From 04539d605dc9b92773f658c3b35901c0c817e61e Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Tue, 27 Sep 2022 20:14:00 +0800
Subject: [PATCH 01/56] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=9B=BE?=
 =?UTF-8?q?=E5=B1=82=E6=A8=A1=E5=BC=8F=E6=8E=A7=E5=88=B6=E9=80=89=E9=A1=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .eslintrc.js                            |  1 +
 src/plugins/icon.ts                     | 13 ++++++--
 src/styles/common/style.scss            | 23 +++++++++-----
 src/views/chart/ContentBox/index.vue    | 15 +++------
 src/views/chart/ContentLayers/index.vue | 41 ++++++++++++++++++++++---
 5 files changed, 67 insertions(+), 26 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index d01f44ae..25f7f0d1 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -22,6 +22,7 @@ module.exports = {
     'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
     'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
     'no-unused-vars': 'off',
+    'vue/no-unused-vars': 'off',
     'vue/multi-word-component-names': 'off',
     'vue/valid-template-root': 'off',
     'vue/no-mutating-props': 'off'
diff --git a/src/plugins/icon.ts b/src/plugins/icon.ts
index 90bf057c..bcc2496a 100644
--- a/src/plugins/icon.ts
+++ b/src/plugins/icon.ts
@@ -57,7 +57,10 @@ import {
   ChevronDownOutline as ChevronDownOutlineIcon,
   Pulse as PulseIcon,
   Folder as FolderIcon,
-  FolderOpen as FolderOpenIcon
+  FolderOpen as FolderOpenIcon,
+  Image as ImageIcon,
+  Images as ImagesIcon,
+  List as ListIcon
 } from '@vicons/ionicons5'
 
 import {
@@ -211,7 +214,13 @@ const ionicons5 = {
   // 文件夹
   FolderIcon,
   // 文件夹打开
-  FolderOpenIcon
+  FolderOpenIcon,
+  // 图片
+  ImageIcon,
+  // 多个图片
+  ImagesIcon,
+  // 列表
+  ListIcon
 }
 
 const carbon = {
diff --git a/src/styles/common/style.scss b/src/styles/common/style.scss
index 9fde7bf4..13dee27b 100644
--- a/src/styles/common/style.scss
+++ b/src/styles/common/style.scss
@@ -1,7 +1,7 @@
-@import './var.scss';
-@import './format.scss';
-@import './animation.scss';
-@import './mixins/mixins.scss';
+@import "./var.scss";
+@import "./format.scss";
+@import "./animation.scss";
+@import "./mixins/mixins.scss";
 
 // 过度
 .go-transition {
@@ -49,14 +49,14 @@
 // 毛玻璃
 .go-background-filter {
   backdrop-filter: $--filter-blur-base;
-  @include fetch-bg-color('filter-color');
+  @include fetch-bg-color("filter-color");
   box-shadow: $--border-shadow;
 }
 
 // 毛玻璃
 .go-background-filter-shallow {
   backdrop-filter: $--filter-blur-base;
-  @include fetch-bg-color('filter-color-shallow');
+  @include fetch-bg-color("filter-color-shallow");
   box-shadow: $--border-shadow;
 }
 
@@ -68,7 +68,7 @@
 
 // 背景斑点需配合 @mixin background-image 使用
 .go-point-bg {
-  @include fetch-theme-custom('background-color', 'background-color1');
+  @include fetch-theme-custom("background-color", "background-color1");
   background-size: 15px 15px, 15px 15px;
 }
 
@@ -117,4 +117,11 @@
   .go-#{$typekey} {
     #{$type}: 0 !important;
   }
-}
\ No newline at end of file
+}
+
+.go-d-inline-block {
+  display: inline-block;
+}
+.go-d-block {
+  display: block;
+}
diff --git a/src/views/chart/ContentBox/index.vue b/src/views/chart/ContentBox/index.vue
index 8c10edcf..826bbb85 100644
--- a/src/views/chart/ContentBox/index.vue
+++ b/src/views/chart/ContentBox/index.vue
@@ -10,14 +10,9 @@
           <slot name="icon"></slot>
         </div>
       </n-space>
-      <n-space>
+      <n-space align="center" style="gap: 4px">
         <slot name="top-right"></slot>
-        <n-icon
-          v-show="backIcon"
-          size="20"
-          class="go-cursor-pointer"
-          @click="backHandle"
-        >
+        <n-icon v-show="backIcon" size="20" class="go-cursor-pointer go-d-block" @click="backHandle">
           <chevron-back-outline-icon></chevron-back-outline-icon>
         </n-icon>
       </n-space>
@@ -151,7 +146,7 @@ $topOrBottomHeight: 40px;
     border-bottom: 1px solid;
     @include fetch-border-color('background-color1');
   }
-  
+
   .content {
     height: calc(100vh - #{$--header-height});
     overflow: hidden;
@@ -165,9 +160,7 @@ $topOrBottomHeight: 40px;
     height: calc(100vh - #{$--header-height} - #{$topOrBottomHeight});
   }
   .content-height-show-both {
-    height: calc(
-      100vh - #{$--header-height} - #{$topOrBottomHeight} - #{$topOrBottomHeight}
-    );
+    height: calc(100vh - #{$--header-height} - #{$topOrBottomHeight} - #{$topOrBottomHeight});
   }
 }
 </style>
diff --git a/src/views/chart/ContentLayers/index.vue b/src/views/chart/ContentLayers/index.vue
index 1c34c7b3..1211316f 100644
--- a/src/views/chart/ContentLayers/index.vue
+++ b/src/views/chart/ContentLayers/index.vue
@@ -8,14 +8,41 @@
     @mousedown="boxMousedownHandle($event)"
   >
     <template #icon>
-      <n-icon size="16" :depth="2">
-        <component :is="LayersIcon"></component>
-      </n-icon>
+      <n-icon size="16" :depth="2" :component="LayersIcon" />
     </template>
+
+    <template #top-right>
+      <n-radio-group v-model:value="layerMode" name="radiobuttongroup1" size="small" class="go-flex-center">
+        <n-radio-button value="thumbnail">
+          <n-icon size="16" class="go-d-block" title="缩略图" :depth="2" :component="ImageIcon" />
+        </n-radio-button>
+        <n-radio-button value="text">
+          <n-icon size="16" class="go-d-block" title="文字列表" :depth="2" :component="ListIcon" />
+        </n-radio-button>
+      </n-radio-group>
+      <!-- <n-icon
+        size="16"
+        class="go-cursor-pointer go-d-block"
+        title="缩略图"
+        :depth="2"
+        :component="ImageIcon"
+        :class="{ 'go-layer-mode-active': layerMode === 'thumbnail' }"
+      />
+      <n-icon
+        size="16"
+        class="go-cursor-pointer go-d-block"
+        title="文字列表"
+        :depth="2"
+        :component="ListIcon"
+        :class="{ 'go-layer-mode-active': layerMode === 'text' }"
+      /> -->
+    </template>
+
     <!-- 图层内容 -->
     <n-space v-if="reverseList.length === 0" justify="center">
       <n-text class="not-layer-text">暂无图层~</n-text>
     </n-space>
+
     <!-- https://github.com/SortableJS/vue.draggable.next -->
     <draggable item-key="id" v-model="layerList" ghostClass="ghost" @change="onMoveCallback">
       <template #item="{ element }">
@@ -55,12 +82,13 @@ import { LayersGroupListItem } from './components/LayersGroupListItem/index'
 
 import { icon } from '@/plugins'
 
-const { LayersIcon } = icon.ionicons5
+const { LayersIcon, ImageIcon, ListIcon } = icon.ionicons5
 const chartLayoutStore = useChartLayoutStore()
 const chartEditStore = useChartEditStore()
 const { handleContextMenu, onClickOutSide } = useContextMenu()
 
 const layerList = ref<any>([])
+const layerMode = ref<'thumbnail' | 'text'>('thumbnail')
 
 // 逆序展示
 const reverseList = computed(() => {
@@ -159,7 +187,7 @@ const mouseleaveHandle = (item: CreateComponentType) => {
 </script>
 
 <style lang="scss" scoped>
-$wight: 170px;
+$wight: 180px;
 @include go(content-layers) {
   width: $wight;
   flex-shrink: 0;
@@ -177,5 +205,8 @@ $wight: 170px;
   .ghost {
     opacity: 0;
   }
+  .go-layer-mode-active {
+    color: #51d6a9;
+  }
 }
 </style>

From e559ca928ad540ccf80c274c6cdd18bd79eede1c Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 28 Sep 2022 11:21:29 +0800
Subject: [PATCH 02/56] =?UTF-8?q?chore:=20=E5=AE=8C=E6=88=90=E9=94=81?=
 =?UTF-8?q?=E5=AE=9A=E5=8F=8A=E9=9A=90=E8=97=8F=EF=BC=8C=E5=88=97=E8=A1=A8?=
 =?UTF-8?q?=E6=96=B9=E5=BC=8F=E5=8A=9F=E8=83=BD=E5=8D=A0=E4=BD=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/plugins/icon.ts                           |  9 ++-
 .../components/LayersGroupListItem/index.vue  | 44 ++++++++++++--
 .../components/LayersListItem/index.vue       | 53 +++++++++++++----
 src/views/chart/ContentLayers/enums.ts        |  1 +
 src/views/chart/ContentLayers/index.vue       | 59 ++++++++++---------
 5 files changed, 119 insertions(+), 47 deletions(-)
 create mode 100644 src/views/chart/ContentLayers/enums.ts

diff --git a/src/plugins/icon.ts b/src/plugins/icon.ts
index bcc2496a..48d6a0a0 100644
--- a/src/plugins/icon.ts
+++ b/src/plugins/icon.ts
@@ -60,7 +60,9 @@ import {
   FolderOpen as FolderOpenIcon,
   Image as ImageIcon,
   Images as ImagesIcon,
-  List as ListIcon
+  List as ListIcon,
+  EyeOutline as EyeOutlineIcon,
+  EyeOffOutline as EyeOffOutlineIcon
 } from '@vicons/ionicons5'
 
 import {
@@ -220,7 +222,10 @@ const ionicons5 = {
   // 多个图片
   ImagesIcon,
   // 列表
-  ListIcon
+  ListIcon,
+  // 眼睛
+  EyeOutlineIcon,
+  EyeOffOutlineIcon
 }
 
 const carbon = {
diff --git a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
index 9c4fb019..ae6d0418 100644
--- a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
@@ -2,7 +2,7 @@
   <div class="go-content-layers-group-list-item">
     <div
       class="root-item-content"
-      :class="{ hover: hover, select: select }"
+      :class="{ hover: hover, select: select, 'list-mini': layerMode === 'text' }"
       @click="clickHandle($event)"
       @mousedown="groupMousedownHandle($event)"
       @mouseenter="mouseenterHandle(componentGroupData)"
@@ -18,11 +18,13 @@
             <folder-icon></folder-icon>
           </template>
         </n-icon>
-        <n-ellipsis>
+        <n-ellipsis style="margin-right: auto">
           <n-text class="go-ml-2 list-text" :depth="2">
             {{ componentGroupData.chartConfig.title }}
           </n-text>
         </n-ellipsis>
+        <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" />
+        <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" />
       </div>
       <div :class="{ 'select-modal': select }"></div>
     </div>
@@ -31,6 +33,7 @@
         v-for="element in componentGroupData.groupList"
         :key="element.id"
         :componentData="element"
+        :layer-mode="layerMode"
         @mousedown="mousedownHandle($event, element, componentGroupData.id)"
         @mouseenter="mouseenterHandle(element)"
         @mouseleave="mouseleaveHandle(element)"
@@ -50,13 +53,21 @@ import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook
 import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
 import { LayersListItem } from '../LayersListItem'
-import throttle from 'lodash/throttle'
 import { icon } from '@/plugins'
+import { LayerModeEnum } from '../../enums'
+
+const { LockClosedOutlineIcon, EyeOffOutlineIcon } = icon.ionicons5
 
 const props = defineProps({
   componentGroupData: {
     type: Object as PropType<CreateComponentGroupType>,
     required: true
+  },
+  layerMode: {
+    type: Object as PropType<LayerModeEnum>,
+    default(): LayerModeEnum {
+      return 'thumbnail'
+    }
   }
 })
 
@@ -148,7 +159,11 @@ const groupMousedownHandle = (e: MouseEvent) => {
 }
 
 // 公共点击事件
-const mousedownHandle = (e: MouseEvent, componentInstance: CreateComponentType | CreateComponentGroupType, id?: string) => {
+const mousedownHandle = (
+  e: MouseEvent,
+  componentInstance: CreateComponentType | CreateComponentGroupType,
+  id?: string
+) => {
   e.preventDefault()
   e.stopPropagation()
 
@@ -169,6 +184,7 @@ const mouseleaveHandle = (componentInstance: CreateComponentType | CreateCompone
 
 <style lang="scss" scoped>
 $centerHeight: 52px;
+$centerMiniHeight: 28px;
 $textSize: 10px;
 
 @include go(content-layers-group-list-item) {
@@ -178,6 +194,11 @@ $textSize: 10px;
   margin-bottom: 5px;
   @extend .go-transition-quick;
 
+  :deep(.go-content-layers-list-item) {
+    margin-right: 0 !important;
+    width: 95% !important;
+  }
+
   .root-item-content {
     height: $centerHeight;
     cursor: pointer;
@@ -196,6 +217,17 @@ $textSize: 10px;
         border: 1px solid v-bind('themeColor') !important;
       }
     }
+
+    // mini样式
+    &.list-mini {
+      height: $centerMiniHeight;
+      .item-content {
+        height: calc(#{$centerMiniHeight} - 10px) !important;
+      }
+      .select-modal {
+        height: calc(#{$centerMiniHeight} + 2px) !important;
+      }
+    }
   }
   .select-modal,
   .item-content {
@@ -220,5 +252,9 @@ $textSize: 10px;
     padding-left: 6px;
     font-size: $textSize;
   }
+
+  .list-status-icon {
+    margin-left: 3px;
+  }
 }
 </style>
diff --git a/src/views/chart/ContentLayers/components/LayersListItem/index.vue b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
index 5ef4cdb2..e113e9bc 100644
--- a/src/views/chart/ContentLayers/components/LayersListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="go-content-layers-list-item" :class="{ hover: hover, select: select }">
+  <div class="go-content-layers-list-item" :class="{ hover: hover, select: select, 'list-mini': layerMode === 'text' }">
     <div class="go-flex-center item-content">
       <n-image
         class="list-img"
@@ -8,21 +8,27 @@
         :src="image"
         :fallback-src="requireErrorImg()"
       ></n-image>
-      <n-ellipsis>
+      <n-ellipsis style="margin-right: auto">
         <n-text class="list-text" :depth="2">
           {{ props.componentData.chartConfig.title }}
         </n-text>
       </n-ellipsis>
+      <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" />
+      <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" />
     </div>
     <div :class="{ 'select-modal': select }"></div>
   </div>
 </template>
 
 <script setup lang="ts">
-import { toRefs, computed } from 'vue'
+import { toRefs, computed, PropType } from 'vue'
 import { requireErrorImg } from '@/utils'
 import { useDesignStore } from '@/store/modules/designStore/designStore'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
+import { LayerModeEnum } from '../../enums'
+
+import { icon } from '@/plugins'
+const { LockClosedOutlineIcon, EyeOffOutlineIcon } = icon.ionicons5
 
 // 全局颜色
 const designStore = useDesignStore()
@@ -37,6 +43,12 @@ const props = defineProps({
   componentData: {
     type: Object,
     required: true
+  },
+  layerMode: {
+    type: Object as PropType<LayerModeEnum>,
+    default(): LayerModeEnum {
+      return 'thumbnail'
+    }
   }
 })
 
@@ -56,6 +68,7 @@ const hover = computed(() => {
 
 <style lang="scss" scoped>
 $centerHeight: 52px;
+$centerMiniHeight: 28px;
 $textSize: 10px;
 
 @include go(content-layers-list-item) {
@@ -72,15 +85,7 @@ $textSize: 10px;
   &:hover {
     @include fetch-bg-color('background-color4');
   }
-  /* 选中 */
-  &.select {
-    border: 1px solid v-bind('themeColor');
-    /* 需要设置最高级,覆盖 hover 的颜色 */
-    background-color: rgba(0, 0, 0, 0);
-    .list-img {
-      border: 1px solid v-bind('themeColor') !important;
-    }
-  }
+
   .select-modal,
   .item-content {
     position: absolute;
@@ -94,24 +99,46 @@ $textSize: 10px;
     width: calc(100% - 10px);
     height: calc(100% - 10px);
   }
+
   .select-modal {
     width: 100%;
     height: 100%;
     opacity: 0.3;
     background-color: v-bind('themeColor');
   }
+
   .list-img {
     flex-shrink: 0;
     height: $centerHeight;
     border-radius: 5px;
     overflow: hidden;
-    border: 1px solid;
+    border: none !important;
     padding: 2px;
     @include hover-border-color('hover-border-color');
   }
+
   .list-text {
     padding-left: 6px;
     font-size: $textSize;
   }
+
+  .list-status-icon {
+    margin-left: 3px;
+  }
+
+  /* 选中样式 */
+  &.select {
+    border: 1px solid v-bind('themeColor');
+    /* 需要设置最高级,覆盖 hover 的颜色 */
+    background-color: rgba(0, 0, 0, 0);
+    // .list-img {
+    //   border: 1px solid v-bind('themeColor') !important;
+    // }
+  }
+
+  // mini样式
+  &.list-mini {
+    height: $centerMiniHeight;
+  }
 }
 </style>
diff --git a/src/views/chart/ContentLayers/enums.ts b/src/views/chart/ContentLayers/enums.ts
new file mode 100644
index 00000000..0cb26ab2
--- /dev/null
+++ b/src/views/chart/ContentLayers/enums.ts
@@ -0,0 +1 @@
+export type LayerModeEnum = 'thumbnail' | 'text'
diff --git a/src/views/chart/ContentLayers/index.vue b/src/views/chart/ContentLayers/index.vue
index 1211316f..6e32111b 100644
--- a/src/views/chart/ContentLayers/index.vue
+++ b/src/views/chart/ContentLayers/index.vue
@@ -12,30 +12,23 @@
     </template>
 
     <template #top-right>
-      <n-radio-group v-model:value="layerMode" name="radiobuttongroup1" size="small" class="go-flex-center">
-        <n-radio-button value="thumbnail">
-          <n-icon size="16" class="go-d-block" title="缩略图" :depth="2" :component="ImageIcon" />
-        </n-radio-button>
-        <n-radio-button value="text">
-          <n-icon size="16" class="go-d-block" title="文字列表" :depth="2" :component="ListIcon" />
-        </n-radio-button>
-      </n-radio-group>
-      <!-- <n-icon
-        size="16"
-        class="go-cursor-pointer go-d-block"
-        title="缩略图"
-        :depth="2"
-        :component="ImageIcon"
-        :class="{ 'go-layer-mode-active': layerMode === 'thumbnail' }"
-      />
-      <n-icon
-        size="16"
-        class="go-cursor-pointer go-d-block"
-        title="文字列表"
-        :depth="2"
-        :component="ListIcon"
-        :class="{ 'go-layer-mode-active': layerMode === 'text' }"
-      /> -->
+      <n-button-group style="display: flex">
+        <n-button
+          v-for="(item, index) in layerModeEnumList"
+          :key="index"
+          ghost
+          size="tiny"
+          :type="layerMode === item.value ? 'primary' : 'tertiary'"
+          @click="layerMode = item.value as LayerModeEnum"
+        >
+          <n-tooltip :show-arrow="false" trigger="hover">
+            <template #trigger>
+              <n-icon size="14" :component="item.icon" />
+            </template>
+            {{ item.label }}
+          </n-tooltip>
+        </n-button>
+      </n-button-group>
     </template>
 
     <!-- 图层内容 -->
@@ -48,11 +41,16 @@
       <template #item="{ element }">
         <div class="go-content-layer-box">
           <!-- 组合 -->
-          <layers-group-list-item v-if="element.isGroup" :componentGroupData="element"></layers-group-list-item>
+          <layers-group-list-item
+            v-if="element.isGroup"
+            :componentGroupData="element"
+            :layer-mode="layerMode"
+          ></layers-group-list-item>
           <!-- 单组件 -->
           <layers-list-item
             v-else
             :componentData="element"
+            :layer-mode="layerMode"
             @mousedown="mousedownHandle($event, element)"
             @mouseenter="mouseenterHandle(element)"
             @mouseleave="mouseleaveHandle(element)"
@@ -79,16 +77,21 @@ import { MenuEnum, MouseEventButton, WinKeyboard, MacKeyboard } from '@/enums/ed
 
 import { LayersListItem } from './components/LayersListItem/index'
 import { LayersGroupListItem } from './components/LayersGroupListItem/index'
+import { LayerModeEnum } from './enums'
 
 import { icon } from '@/plugins'
 
-const { LayersIcon, ImageIcon, ListIcon } = icon.ionicons5
+const { LayersIcon, ImageIcon, ImagesIcon, ListIcon } = icon.ionicons5
 const chartLayoutStore = useChartLayoutStore()
 const chartEditStore = useChartEditStore()
 const { handleContextMenu, onClickOutSide } = useContextMenu()
 
 const layerList = ref<any>([])
-const layerMode = ref<'thumbnail' | 'text'>('thumbnail')
+const layerModeEnumList = [
+  { label: '缩略图', icon: ImagesIcon, value: 'thumbnail' },
+  { label: '文本列表', icon: ListIcon, value: 'text' }
+]
+const layerMode = ref<LayerModeEnum>('thumbnail')
 
 // 逆序展示
 const reverseList = computed(() => {
@@ -187,7 +190,7 @@ const mouseleaveHandle = (item: CreateComponentType) => {
 </script>
 
 <style lang="scss" scoped>
-$wight: 180px;
+$wight: 200px;
 @include go(content-layers) {
   width: $wight;
   flex-shrink: 0;

From 634b5c2beaba6ae32efe3c4d0d9b205f0a921eda Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 28 Sep 2022 16:47:12 +0800
Subject: [PATCH 03/56] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=8F=B3?=
 =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E5=8A=9F=E8=83=BD=E5=8F=8A=E5=A4=84?=
 =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/enums/editPageEnum.ts                     | 24 ++++---
 .../modules/chartEditStore/chartEditStore.ts  | 67 ++++++++++++++++++-
 .../chartHistoryStore/chartHistoryStore.d.ts  | 11 ++-
 .../chartHistoryStore/chartHistoryStore.ts    |  4 ++
 .../components/EditGroup/index.vue            | 34 ++++++----
 src/views/chart/ContentEdit/index.vue         | 28 ++++----
 .../components/LayersGroupListItem/index.vue  | 33 ++++++---
 .../components/LayersListItem/index.vue       |  8 ++-
 src/views/chart/ContentLayers/index.vue       | 22 +++---
 src/views/chart/hooks/useContextMenu.hook.ts  | 43 +++++++++++-
 10 files changed, 212 insertions(+), 62 deletions(-)

diff --git a/src/enums/editPageEnum.ts b/src/enums/editPageEnum.ts
index e2044bd8..df395653 100644
--- a/src/enums/editPageEnum.ts
+++ b/src/enums/editPageEnum.ts
@@ -1,7 +1,7 @@
 // 鼠标点击左右键
 export enum MouseEventButton {
   LEFT = 1,
-  RIGHT = 2,
+  RIGHT = 2
 }
 
 // 页面拖拽键名
@@ -41,7 +41,15 @@ export enum MenuEnum {
   // 后退
   BACK = 'back',
   // 前进
-  FORWORD = 'forward'
+  FORWORD = 'forward',
+  // 锁定
+  LOCK = 'lock',
+  // 解除锁定
+  UNLOCK = 'unLock',
+  // 隐藏
+  HIDE = 'hide',
+  // 显示
+  SHOW = 'show'
 }
 
 // Win 键盘枚举
@@ -49,9 +57,9 @@ export enum WinKeyboard {
   CTRL = 'ctrl',
   SHIFT = 'shift',
   ALT = ' alt',
-  CTRL_SOURCE_KEY = "control",
-  SHIFT_SOURCE_KEY = "shift",
-  ALT_SOURCE_KEY = "alt"
+  CTRL_SOURCE_KEY = 'control',
+  SHIFT_SOURCE_KEY = 'shift',
+  ALT_SOURCE_KEY = 'alt'
 }
 
 // Mac 键盘枚举
@@ -60,7 +68,7 @@ export enum MacKeyboard {
   CTRL = '⌘',
   SHIFT = '⇧',
   ALT = '⌥',
-  CTRL_SOURCE_KEY = "⌘",
-  SHIFT_SOURCE_KEY = "⇧",
-  ALT_SOURCE_KEY = "⌥"
+  CTRL_SOURCE_KEY = '⌘',
+  SHIFT_SOURCE_KEY = '⇧',
+  ALT_SOURCE_KEY = '⌥'
 }
diff --git a/src/store/modules/chartEditStore/chartEditStore.ts b/src/store/modules/chartEditStore/chartEditStore.ts
index 32c55a94..455d6339 100644
--- a/src/store/modules/chartEditStore/chartEditStore.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.ts
@@ -602,7 +602,8 @@ export const useChartEditStore = defineStore({
               ids.push(item.id)
             })
           } else {
-            (historyData[0] as CreateComponentGroupType).groupList.forEach(item => {
+            const group = historyData[0] as CreateComponentGroupType
+            group.groupList.forEach(item => {
               ids.push(item.id)
             })
           }
@@ -795,6 +796,70 @@ export const useChartEditStore = defineStore({
         loadingFinish()
       }
     },
+    // * 锁定
+    setLock(status: boolean = true, isHistory: boolean = true) {
+      try {
+        // 暂不支持多选
+        if (this.getTargetChart.selectId.length > 1) return
+
+        loadingStart()
+        const index: number = this.fetchTargetIndex()
+        if (index !== -1) {
+          // 更新状态
+          const targetItem = this.getComponentList[index]
+          targetItem.status.lock = status
+
+          // 历史记录
+          if (isHistory) {
+            chartHistoryStore.createLayerHistory(
+              [targetItem],
+              status ? HistoryActionTypeEnum.LOCK : HistoryActionTypeEnum.UNLOCK
+            )
+          }
+          this.updateComponentList(index, targetItem)
+          loadingFinish()
+          return
+        }
+      } catch (value) {
+        loadingError()
+      }
+    },
+    // * 解除锁定
+    setUnLock(isHistory: boolean = true) {
+      this.setLock(false, isHistory)
+    },
+    // * 隐藏
+    setHide(status: boolean = true, isHistory: boolean = true) {
+      try {
+        // 暂不支持多选
+        if (this.getTargetChart.selectId.length > 1) return
+
+        loadingStart()
+        const index: number = this.fetchTargetIndex()
+        if (index !== -1) {
+          // 更新状态
+          const targetItem = this.getComponentList[index]
+          targetItem.status.hide = status
+
+          // 历史记录
+          if (isHistory) {
+            chartHistoryStore.createLayerHistory(
+              [targetItem],
+              status ? HistoryActionTypeEnum.HIDE : HistoryActionTypeEnum.SHOW
+            )
+          }
+          this.updateComponentList(index, targetItem)
+          loadingFinish()
+          return
+        }
+      } catch (value) {
+        loadingError()
+      }
+    },
+    // * 显示
+    setShow(isHistory: boolean = true) {
+      this.setHide(false, isHistory)
+    },
     // ----------------
     // * 设置页面大小
     setPageSize(scale: number): void {
diff --git a/src/store/modules/chartHistoryStore/chartHistoryStore.d.ts b/src/store/modules/chartHistoryStore/chartHistoryStore.d.ts
index 0ea7be39..e27240bb 100644
--- a/src/store/modules/chartHistoryStore/chartHistoryStore.d.ts
+++ b/src/store/modules/chartHistoryStore/chartHistoryStore.d.ts
@@ -2,6 +2,7 @@ import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.
 import { EditCanvasType } from '@/store/modules/chartEditStore/chartEditStore.d'
 
 // 操作类型枚举
+
 export enum HistoryActionTypeEnum {
   // 新增
   ADD = 'add',
@@ -30,7 +31,15 @@ export enum HistoryActionTypeEnum {
   // 解组
   UN_GROUP = 'unGroup',
   // 选择历史记录
-  SELECT_HISTORY = 'selectHistory'
+  SELECT_HISTORY = 'selectHistory',
+  // 锁定
+  LOCK = 'lock',
+  // 解除锁定
+  UNLOCK = 'unLock',
+  // 隐藏
+  HIDE = 'hide',
+  // 显示
+  SHOW = 'show'
 }
 
 // 对象类型
diff --git a/src/store/modules/chartHistoryStore/chartHistoryStore.ts b/src/store/modules/chartHistoryStore/chartHistoryStore.ts
index b8627ca6..63da3ff8 100644
--- a/src/store/modules/chartHistoryStore/chartHistoryStore.ts
+++ b/src/store/modules/chartHistoryStore/chartHistoryStore.ts
@@ -153,6 +153,10 @@ export const useChartHistoryStore = defineStore({
         | HistoryActionTypeEnum.DOWN
         | HistoryActionTypeEnum.UP
         | HistoryActionTypeEnum.BOTTOM
+        | HistoryActionTypeEnum.LOCK
+        | HistoryActionTypeEnum.UNLOCK
+        | HistoryActionTypeEnum.HIDE
+        | HistoryActionTypeEnum.SHOW
     ) {
       this.createStackItem(item, type, HistoryTargetTypeEnum.CHART)
     },
diff --git a/src/views/chart/ContentEdit/components/EditGroup/index.vue b/src/views/chart/ContentEdit/components/EditGroup/index.vue
index c78b0b27..3a217c45 100644
--- a/src/views/chart/ContentEdit/components/EditGroup/index.vue
+++ b/src/views/chart/ContentEdit/components/EditGroup/index.vue
@@ -85,26 +85,32 @@ const optionsHandle = (
   allList: MenuOptionsItemType[],
   targetInstance: CreateComponentType
 ) => {
-  // 多选
-  const moreMenuEnums = [MenuEnum.GROUP, MenuEnum.DELETE]
-  // 单选
-  const singleMenuEnums = [MenuEnum.UN_GROUP]
-
   const filter = (menulist: MenuEnum[]) => {
-    const list: MenuOptionsItemType[] = []
-    allList.forEach(item => {
-      if (menulist.includes(item.key as MenuEnum)) {
-        list.push(item)
-      }
-    })
-    return list
+    return allList.filter(i => menulist.includes(i.key as MenuEnum))
   }
 
   // 多选处理
   if (chartEditStore.getTargetChart.selectId.length > 1) {
-    return filter(moreMenuEnums)
+    return filter([MenuEnum.GROUP, MenuEnum.DELETE])
   } else {
-    return [...filter(singleMenuEnums), divider(), ...targetList]
+    const statusMenuEnums: MenuEnum[] = []
+    if (targetInstance.status.lock) {
+      statusMenuEnums.push(MenuEnum.LOCK)
+    } else {
+      statusMenuEnums.push(MenuEnum.UNLOCK)
+    }
+    if (targetInstance.status.hide) {
+      statusMenuEnums.push(MenuEnum.HIDE)
+    } else {
+      statusMenuEnums.push(MenuEnum.SHOW)
+    }
+    // 单选
+    const singleMenuEnums = [MenuEnum.UN_GROUP]
+    return [
+      ...filter(singleMenuEnums),
+      divider(),
+      ...targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))
+    ]
   }
 }
 
diff --git a/src/views/chart/ContentEdit/index.vue b/src/views/chart/ContentEdit/index.vue
index 2f6d9cc3..02242ab5 100644
--- a/src/views/chart/ContentEdit/index.vue
+++ b/src/views/chart/ContentEdit/index.vue
@@ -114,24 +114,22 @@ const optionsHandle = (
   allList: MenuOptionsItemType[],
   targetInstance: CreateComponentType
 ) => {
-  // 多选
-  const moreMenuEnums = [MenuEnum.GROUP, MenuEnum.DELETE]
-  // 单选
-  const singleMenuEnums = targetList
-
   // 多选处理
   if (chartEditStore.getTargetChart.selectId.length > 1) {
-    const list: MenuOptionsItemType[] = []
-
-    allList.forEach(item => {
-      // 成组
-      if (moreMenuEnums.includes(item.key as MenuEnum)) {
-        list.push(item)
-      }
-    })
-    return list
+    return allList.filter(i => [MenuEnum.GROUP, MenuEnum.DELETE].includes(i.key as MenuEnum))
   }
-  return singleMenuEnums
+  const statusMenuEnums: MenuEnum[] = []
+  if (targetInstance.status.lock) {
+    statusMenuEnums.push(MenuEnum.LOCK)
+  } else {
+    statusMenuEnums.push(MenuEnum.UNLOCK)
+  }
+  if (targetInstance.status.hide) {
+    statusMenuEnums.push(MenuEnum.HIDE)
+  } else {
+    statusMenuEnums.push(MenuEnum.SHOW)
+  }
+  return targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))
 }
 
 // 主题色
diff --git a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
index ae6d0418..c971276b 100644
--- a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
@@ -23,8 +23,8 @@
             {{ componentGroupData.chartConfig.title }}
           </n-text>
         </n-ellipsis>
-        <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" />
-        <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" />
+        <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" v-if="status.lock" />
+        <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" v-if="status.hide" />
       </div>
       <div :class="{ 'select-modal': select }"></div>
     </div>
@@ -95,20 +95,29 @@ const optionsHandle = (
   targetInstance: CreateComponentType
 ) => {
   const filter = (menulist: MenuEnum[]) => {
-    const list: MenuOptionsItemType[] = []
-    allList.forEach(item => {
-      if (menulist.includes(item.key as MenuEnum)) {
-        list.push(item)
-      }
-    })
-    return list
+    return allList.filter(i => menulist.includes(i.key as MenuEnum))
   }
 
   // 多选处理
   if (chartEditStore.getTargetChart.selectId.length > 1) {
     return filter([MenuEnum.GROUP])
   } else {
-    return [...filter([MenuEnum.UN_GROUP]), divider(), ...targetList]
+    const statusMenuEnums: MenuEnum[] = []
+    if (targetInstance.status.lock) {
+      statusMenuEnums.push(MenuEnum.LOCK)
+    } else {
+      statusMenuEnums.push(MenuEnum.UNLOCK)
+    }
+    if (targetInstance.status.hide) {
+      statusMenuEnums.push(MenuEnum.HIDE)
+    } else {
+      statusMenuEnums.push(MenuEnum.SHOW)
+    }
+    return [
+      ...filter([MenuEnum.UN_GROUP]),
+      divider(),
+      ...targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))
+    ]
   }
 }
 
@@ -136,6 +145,10 @@ const hover = computed(() => {
   return props.componentGroupData.id === chartEditStore.getTargetChart.hoverId
 })
 
+const status = computed(() => {
+  return props.componentGroupData.status
+})
+
 // 组点击事件
 const groupMousedownHandle = (e: MouseEvent) => {
   onClickOutSide()
diff --git a/src/views/chart/ContentLayers/components/LayersListItem/index.vue b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
index e113e9bc..d37d8c63 100644
--- a/src/views/chart/ContentLayers/components/LayersListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
@@ -13,8 +13,8 @@
           {{ props.componentData.chartConfig.title }}
         </n-text>
       </n-ellipsis>
-      <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" />
-      <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" />
+      <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" v-if="status.lock" />
+      <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" v-if="status.hide" />
     </div>
     <div :class="{ 'select-modal': select }"></div>
   </div>
@@ -64,6 +64,10 @@ const select = computed(() => {
 const hover = computed(() => {
   return props.componentData.id === chartEditStore.getTargetChart.hoverId
 })
+
+const status = computed(() => {
+  return props.componentData.status
+})
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/chart/ContentLayers/index.vue b/src/views/chart/ContentLayers/index.vue
index 6e32111b..54efde08 100644
--- a/src/views/chart/ContentLayers/index.vue
+++ b/src/views/chart/ContentLayers/index.vue
@@ -114,16 +114,20 @@ const optionsHandle = (
 ) => {
   // 多选处理
   if (chartEditStore.getTargetChart.selectId.length > 1) {
-    const list: MenuOptionsItemType[] = []
-    targetList.forEach(item => {
-      // 成组
-      if (item.key === MenuEnum.GROUP) {
-        list.push(item)
-      }
-    })
-    return list
+    return targetList.filter(i => i.key === MenuEnum.GROUP)
   }
-  return targetList
+  const statusMenuEnums: MenuEnum[] = []
+  if (targetInstance.status.lock) {
+    statusMenuEnums.push(MenuEnum.LOCK)
+  } else {
+    statusMenuEnums.push(MenuEnum.UNLOCK)
+  }
+  if (targetInstance.status.hide) {
+    statusMenuEnums.push(MenuEnum.HIDE)
+  } else {
+    statusMenuEnums.push(MenuEnum.SHOW)
+  }
+  return targetList.filter(item => !statusMenuEnums.includes(item.key as MenuEnum))
 }
 
 // 缩小
diff --git a/src/views/chart/hooks/useContextMenu.hook.ts b/src/views/chart/hooks/useContextMenu.hook.ts
index d6e0adb2..f79447cc 100644
--- a/src/views/chart/hooks/useContextMenu.hook.ts
+++ b/src/views/chart/hooks/useContextMenu.hook.ts
@@ -7,7 +7,18 @@ import { MenuOptionsItemType } from './useContextMenu.hook.d'
 import { MenuEnum } from '@/enums/editPageEnum'
 import cloneDeep from 'lodash/cloneDeep'
 
-const { CopyIcon, CutIcon, ClipboardOutlineIcon, TrashIcon, ChevronDownIcon, ChevronUpIcon } = icon.ionicons5
+const {
+  CopyIcon,
+  CutIcon,
+  ClipboardOutlineIcon,
+  TrashIcon,
+  ChevronDownIcon,
+  ChevronUpIcon,
+  LockOpenOutlineIcon,
+  LockClosedOutlineIcon,
+  EyeOutlineIcon,
+  EyeOffOutlineIcon
+} = icon.ionicons5
 const { UpToTopIcon, DownToBottomIcon, PaintBrushIcon, Carbon3DSoftwareIcon, Carbon3DCursorIcon } = icon.carbon
 
 const chartEditStore = useChartEditStore()
@@ -17,7 +28,7 @@ const chartEditStore = useChartEditStore()
  * @param {number} n > 2
  * @returns
  */
-export const divider = (n:number = 3) => {
+export const divider = (n: number = 3) => {
   return {
     type: 'divider',
     key: `d${n}`
@@ -26,6 +37,34 @@ export const divider = (n:number = 3) => {
 
 // * 默认单组件选项
 export const defaultOptions: MenuOptionsItemType[] = [
+  {
+    label: '锁定',
+    key: MenuEnum.LOCK,
+    icon: renderIcon(LockClosedOutlineIcon),
+    fnHandle: chartEditStore.setLock
+  },
+  {
+    label: '解除锁定',
+    key: MenuEnum.UNLOCK,
+    icon: renderIcon(LockOpenOutlineIcon),
+    fnHandle: chartEditStore.setUnLock
+  },
+  {
+    label: '隐藏',
+    key: MenuEnum.HIDE,
+    icon: renderIcon(EyeOffOutlineIcon),
+    fnHandle: chartEditStore.setHide
+  },
+  {
+    label: '显示',
+    key: MenuEnum.SHOW,
+    icon: renderIcon(EyeOutlineIcon),
+    fnHandle: chartEditStore.setShow
+  },
+  {
+    type: 'divider',
+    key: 'd0'
+  },
   {
     label: '复制',
     key: MenuEnum.COPY,

From abbf678e89d8fbb92319dbe92100c0b713cb77ab Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 28 Sep 2022 17:34:11 +0800
Subject: [PATCH 04/56] =?UTF-8?q?fix:=20=E9=9A=90=E8=97=8F=E5=90=8E?=
 =?UTF-8?q?=EF=BC=8C=E7=AB=8B=E5=8D=B3=E5=8F=96=E6=B6=88=E9=80=89=E4=B8=AD?=
 =?UTF-8?q?=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/store/modules/chartEditStore/chartEditStore.ts | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/store/modules/chartEditStore/chartEditStore.ts b/src/store/modules/chartEditStore/chartEditStore.ts
index 455d6339..f3fc4356 100644
--- a/src/store/modules/chartEditStore/chartEditStore.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.ts
@@ -850,6 +850,12 @@ export const useChartEditStore = defineStore({
           }
           this.updateComponentList(index, targetItem)
           loadingFinish()
+
+          // 取消选择隐藏
+          if (status) {
+            const chartEditStore = useChartEditStore()
+            chartEditStore.setTargetSelectChart(undefined)
+          }
           return
         }
       } catch (value) {

From e49cf3dea2eb3584c7ab2f5f6013390a90358fa6 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 28 Sep 2022 17:37:09 +0800
Subject: [PATCH 05/56] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20=E9=94=81?=
 =?UTF-8?q?=E5=AE=9A=E7=BB=84=E4=BB=B6=20hover=20=E5=92=8C=20select=20?=
 =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E6=8E=A7=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ContentEdit/components/EditShapeBox/index.vue    | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/views/chart/ContentEdit/components/EditShapeBox/index.vue b/src/views/chart/ContentEdit/components/EditShapeBox/index.vue
index b7b3bd65..a1d162df 100644
--- a/src/views/chart/ContentEdit/components/EditShapeBox/index.vue
+++ b/src/views/chart/ContentEdit/components/EditShapeBox/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="go-shape-box">
+  <div class="go-shape-box" :class="{ lock: item.status.lock, hide: item.status.hide }">
     <slot></slot>
     <!-- 锚点 -->
     <template v-if="!hiddenPoint">
@@ -55,12 +55,14 @@ const themeColor = computed(() => {
 
 // 计算当前选中目标
 const hover = computed(() => {
+  if (props.item.status.lock) return false
   return props.item.id === chartEditStore.getTargetChart.hoverId
 })
 
 // 兼容多值场景
 const select = computed(() => {
   const id = props.item.id
+  if (props.item.status.lock) return false
   return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
 })
 </script>
@@ -70,6 +72,14 @@ const select = computed(() => {
   position: absolute;
   cursor: move;
 
+  &.lock {
+    cursor: default !important;
+  }
+
+  &.hide {
+    display: none;
+  }
+
   /* 锚点 */
   .shape-point {
     z-index: 1;

From cc97672fcc0a876c3942bdf8002b7dfe9694b8b6 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 28 Sep 2022 17:38:15 +0800
Subject: [PATCH 06/56] =?UTF-8?q?feat:=20=E9=94=81=E5=AE=9A=E5=92=8C?=
 =?UTF-8?q?=E9=9A=90=E8=97=8F=E7=BB=84=E4=BB=B6=E4=B8=8D=E8=83=BD=E8=A2=AB?=
 =?UTF-8?q?=E6=A1=86=E9=80=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/chart/ContentEdit/hooks/useDrag.hook.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/views/chart/ContentEdit/hooks/useDrag.hook.ts b/src/views/chart/ContentEdit/hooks/useDrag.hook.ts
index 2e2218b6..9c412bc3 100644
--- a/src/views/chart/ContentEdit/hooks/useDrag.hook.ts
+++ b/src/views/chart/ContentEdit/hooks/useDrag.hook.ts
@@ -140,7 +140,9 @@ export const mousedownBoxSelect = (e: MouseEvent, item?: CreateComponentType | C
           targetAttr.x1 - selectAttr.x1 >= 0 &&
           targetAttr.y1 - selectAttr.y1 >= 0 &&
           targetAttr.x2 - selectAttr.x2 <= 0 &&
-          targetAttr.y2 - selectAttr.y2 <= 0
+          targetAttr.y2 - selectAttr.y2 <= 0 &&
+          !item.status.lock &&
+          !item.status.hide
         ) {
           isSelect = true
           chartEditStore.setTargetSelectChart(item.id, true)

From 2c834c1d62120c4fad919dff8f53301a934a1841 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 28 Sep 2022 17:51:59 +0800
Subject: [PATCH 07/56] =?UTF-8?q?feat:=20=E9=94=81=E5=AE=9A=E7=BB=84?=
 =?UTF-8?q?=E4=BB=B6=E4=B8=8D=E8=83=BD=E9=80=89=E4=B8=AD=E5=92=8C=E6=8B=96?=
 =?UTF-8?q?=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/chart/ContentEdit/hooks/useDrag.hook.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/views/chart/ContentEdit/hooks/useDrag.hook.ts b/src/views/chart/ContentEdit/hooks/useDrag.hook.ts
index 9c412bc3..995a1427 100644
--- a/src/views/chart/ContentEdit/hooks/useDrag.hook.ts
+++ b/src/views/chart/ContentEdit/hooks/useDrag.hook.ts
@@ -168,6 +168,7 @@ export const useMouseHandle = () => {
   const mouseClickHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {
     e.preventDefault()
     e.stopPropagation()
+    if (item.status.lock) return
     // 若此时按下了 CTRL, 表示多选
     if (
       window.$KeyboardActive?.has(WinKeyboard.CTRL_SOURCE_KEY) ||
@@ -187,6 +188,7 @@ export const useMouseHandle = () => {
   const mousedownHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {
     e.preventDefault()
     e.stopPropagation()
+    if (item.status.lock) return
     onClickOutSide()
     // 按下左键 + CTRL
     if (

From c22d559195140d2b5c39e533883274e4bd79a278 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 28 Sep 2022 18:43:55 +0800
Subject: [PATCH 08/56] =?UTF-8?q?feat:=20=E9=9A=90=E8=97=8F=E9=94=81?=
 =?UTF-8?q?=E5=AE=9A=E6=93=8D=E4=BD=9C=EF=BC=8C=E6=94=AF=E6=8C=81=E5=8E=86?=
 =?UTF-8?q?=E5=8F=B2=E8=AE=B0=E5=BD=95=E5=9B=9E=E9=80=80=E5=92=8C=E5=89=8D?=
 =?UTF-8?q?=E8=BF=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../modules/chartEditStore/chartEditStore.ts  | 30 +++++++++++++++++--
 .../chartHistoryStore/chartHistoryDefine.ts   | 11 +++----
 .../chartHistoryStore/chartHistoryStore.ts    | 18 ++++++++---
 .../components/EditHistory/index.vue          | 27 +++++++++++++----
 4 files changed, 70 insertions(+), 16 deletions(-)

diff --git a/src/store/modules/chartEditStore/chartEditStore.ts b/src/store/modules/chartEditStore/chartEditStore.ts
index f3fc4356..6db94d74 100644
--- a/src/store/modules/chartEditStore/chartEditStore.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.ts
@@ -618,6 +618,32 @@ export const useChartEditStore = defineStore({
         }
         return
       }
+
+      switch (HistoryItem.actionType) {
+        // 锁定处理
+        case HistoryActionTypeEnum.LOCK:
+        case HistoryActionTypeEnum.UNLOCK:
+          if (!isForward) {
+            // 恢复原来状态
+            if (HistoryItem.actionType === HistoryActionTypeEnum.LOCK) historyData[0].status.lock = false
+            if (HistoryItem.actionType === HistoryActionTypeEnum.UNLOCK) historyData[0].status.lock = true
+            return
+          }
+          this.setLock(!historyData[0].status.lock, false)
+          break
+
+        // 隐藏处理
+        case HistoryActionTypeEnum.HIDE:
+        case HistoryActionTypeEnum.SHOW:
+          if (!isForward) {
+            // 恢复原来状态
+            if (HistoryItem.actionType === HistoryActionTypeEnum.HIDE) historyData[0].status.hide = false
+            if (HistoryItem.actionType === HistoryActionTypeEnum.SHOW) historyData[0].status.hide = true
+            return
+          }
+          this.setHide(!historyData[0].status.hide, false)
+          break
+      }
     },
     // * 撤回
     setBack() {
@@ -811,7 +837,7 @@ export const useChartEditStore = defineStore({
 
           // 历史记录
           if (isHistory) {
-            chartHistoryStore.createLayerHistory(
+            chartHistoryStore.createLockHistory(
               [targetItem],
               status ? HistoryActionTypeEnum.LOCK : HistoryActionTypeEnum.UNLOCK
             )
@@ -843,7 +869,7 @@ export const useChartEditStore = defineStore({
 
           // 历史记录
           if (isHistory) {
-            chartHistoryStore.createLayerHistory(
+            chartHistoryStore.createHideHistory(
               [targetItem],
               status ? HistoryActionTypeEnum.HIDE : HistoryActionTypeEnum.SHOW
             )
diff --git a/src/store/modules/chartHistoryStore/chartHistoryDefine.ts b/src/store/modules/chartHistoryStore/chartHistoryDefine.ts
index a3f70d7c..7c38de1b 100644
--- a/src/store/modules/chartHistoryStore/chartHistoryDefine.ts
+++ b/src/store/modules/chartHistoryStore/chartHistoryDefine.ts
@@ -1,7 +1,4 @@
-import {
-  HistoryTargetTypeEnum,
-  HistoryActionTypeEnum
-} from './chartHistoryStore.d'
+import { HistoryTargetTypeEnum, HistoryActionTypeEnum } from './chartHistoryStore.d'
 
 export const historyActionTypeName = {
   [HistoryActionTypeEnum.ADD]: '新增图表',
@@ -18,6 +15,10 @@ export const historyActionTypeName = {
   [HistoryActionTypeEnum.GROUP]: '创建分组',
   [HistoryActionTypeEnum.UN_GROUP]: '解除分组',
   [HistoryActionTypeEnum.SELECT_HISTORY]: '选择记录',
-  
+  [HistoryActionTypeEnum.LOCK]: '锁定',
+  [HistoryActionTypeEnum.UNLOCK]: '解除锁定',
+  [HistoryActionTypeEnum.HIDE]: '隐藏',
+  [HistoryActionTypeEnum.SHOW]: '显示',
+
   [HistoryTargetTypeEnum.CANVAS]: '画布初始化'
 }
diff --git a/src/store/modules/chartHistoryStore/chartHistoryStore.ts b/src/store/modules/chartHistoryStore/chartHistoryStore.ts
index 63da3ff8..b773300b 100644
--- a/src/store/modules/chartHistoryStore/chartHistoryStore.ts
+++ b/src/store/modules/chartHistoryStore/chartHistoryStore.ts
@@ -153,10 +153,6 @@ export const useChartHistoryStore = defineStore({
         | HistoryActionTypeEnum.DOWN
         | HistoryActionTypeEnum.UP
         | HistoryActionTypeEnum.BOTTOM
-        | HistoryActionTypeEnum.LOCK
-        | HistoryActionTypeEnum.UNLOCK
-        | HistoryActionTypeEnum.HIDE
-        | HistoryActionTypeEnum.SHOW
     ) {
       this.createStackItem(item, type, HistoryTargetTypeEnum.CHART)
     },
@@ -171,6 +167,20 @@ export const useChartHistoryStore = defineStore({
     // * 解除分组
     createUnGroupHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
       this.createStackItem(item, HistoryActionTypeEnum.UN_GROUP, HistoryTargetTypeEnum.CHART)
+    },
+    // * 锁定记录
+    createLockHistory(
+      item: Array<CreateComponentType | CreateComponentGroupType>,
+      type: HistoryActionTypeEnum.LOCK | HistoryActionTypeEnum.UNLOCK
+    ) {
+      this.createStackItem(item, type, HistoryTargetTypeEnum.CHART)
+    },
+    // * 隐藏记录
+    createHideHistory(
+      item: Array<CreateComponentType | CreateComponentGroupType>,
+      type: HistoryActionTypeEnum.HIDE | HistoryActionTypeEnum.SHOW
+    ) {
+      this.createStackItem(item, type, HistoryTargetTypeEnum.CHART)
     }
   }
 })
diff --git a/src/views/chart/ContentEdit/components/EditHistory/index.vue b/src/views/chart/ContentEdit/components/EditHistory/index.vue
index 4346905b..4ad642bb 100644
--- a/src/views/chart/ContentEdit/components/EditHistory/index.vue
+++ b/src/views/chart/ContentEdit/components/EditHistory/index.vue
@@ -48,8 +48,19 @@ import {
   HistoryActionTypeEnum
 } from '@/store/modules/chartHistoryStore/chartHistoryStore.d'
 
-const { DesktopOutlineIcon, PencilIcon, TrashIcon, CopyIcon, LayersIcon, DuplicateIcon, HelpOutlineIcon } =
-  icon.ionicons5
+const {
+  DesktopOutlineIcon,
+  PencilIcon,
+  TrashIcon,
+  CopyIcon,
+  LayersIcon,
+  DuplicateIcon,
+  HelpOutlineIcon,
+  LockClosedOutlineIcon,
+  LockOpenOutlineIcon,
+  EyeOffOutlineIcon,
+  EyeOutlineIcon
+} = icon.ionicons5
 const { StackedMoveIcon, Carbon3DCursorIcon, Carbon3DSoftwareIcon } = icon.carbon
 
 const chartHistoryStoreStore = useChartHistoryStore()
@@ -83,6 +94,14 @@ const iconHandle = (e: HistoryItemType) => {
       return Carbon3DCursorIcon
     case HistoryActionTypeEnum.UN_GROUP:
       return Carbon3DSoftwareIcon
+    case HistoryActionTypeEnum.LOCK:
+      return LockClosedOutlineIcon
+    case HistoryActionTypeEnum.UNLOCK:
+      return LockOpenOutlineIcon
+    case HistoryActionTypeEnum.HIDE:
+      return EyeOffOutlineIcon
+    case HistoryActionTypeEnum.SHOW:
+      return EyeOutlineIcon
     default:
       return PencilIcon
   }
@@ -109,9 +128,7 @@ const options = computed(() => {
     }
   })
 
-  return reverse(options.filter(item => {
-    return item.label
-  }))
+  return reverse(options.filter(item => item.label))
 })
 </script>
 

From a8211c6a4150a3ddcfa716c6b4d8c0b4bc395469 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Wed, 28 Sep 2022 21:31:41 +0800
Subject: [PATCH 09/56] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=B1=82?=
 =?UTF-8?q?=E7=BA=A7=E7=9A=84=20UI=20=E6=A0=B7=E5=BC=8F,=E6=94=AF=E6=8C=81?=
 =?UTF-8?q?=E7=82=B9=E5=87=BB=E5=9B=BE=E6=A0=87=E5=AE=8C=E6=88=90=E5=8A=9F?=
 =?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../components/LayersGroupListItem/index.vue  | 68 ++++++++++-------
 .../components/LayersListItem/index.vue       | 62 ++++++++-------
 .../components/LayersStatus/index.ts          |  3 +
 .../components/LayersStatus/index.vue         | 75 +++++++++++++++++++
 src/views/chart/ContentLayers/enums.ts        |  1 -
 src/views/chart/ContentLayers/index.d.ts      |  4 +
 src/views/chart/ContentLayers/index.vue       |  4 +-
 7 files changed, 158 insertions(+), 59 deletions(-)
 create mode 100644 src/views/chart/ContentLayers/components/LayersStatus/index.ts
 create mode 100644 src/views/chart/ContentLayers/components/LayersStatus/index.vue
 create mode 100644 src/views/chart/ContentLayers/index.d.ts

diff --git a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
index c971276b..8fb6abb1 100644
--- a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
@@ -2,7 +2,7 @@
   <div class="go-content-layers-group-list-item">
     <div
       class="root-item-content"
-      :class="{ hover: hover, select: select, 'list-mini': layerMode === 'text' }"
+      :class="{ hover: hover, select: select, 'list-mini': selectText }"
       @click="clickHandle($event)"
       @mousedown="groupMousedownHandle($event)"
       @mouseenter="mouseenterHandle(componentGroupData)"
@@ -23,8 +23,7 @@
             {{ componentGroupData.chartConfig.title }}
           </n-text>
         </n-ellipsis>
-        <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" v-if="status.lock" />
-        <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" v-if="status.hide" />
+        <layers-status :isGroup="false" :hover="hover" :status="status"></layers-status>
       </div>
       <div :class="{ 'select-modal': select }"></div>
     </div>
@@ -34,6 +33,7 @@
         :key="element.id"
         :componentData="element"
         :layer-mode="layerMode"
+        :isGroup="true"
         @mousedown="mousedownHandle($event, element, componentGroupData.id)"
         @mouseenter="mouseenterHandle(element)"
         @mouseleave="mouseleaveHandle(element)"
@@ -53,10 +53,9 @@ import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook
 import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
 import { LayersListItem } from '../LayersListItem'
+import { LayersStatus } from '../LayersStatus/index'
+import { LayerModeEnum } from '../../index.d'
 import { icon } from '@/plugins'
-import { LayerModeEnum } from '../../enums'
-
-const { LockClosedOutlineIcon, EyeOffOutlineIcon } = icon.ionicons5
 
 const props = defineProps({
   componentGroupData: {
@@ -64,10 +63,8 @@ const props = defineProps({
     required: true
   },
   layerMode: {
-    type: Object as PropType<LayerModeEnum>,
-    default(): LayerModeEnum {
-      return 'thumbnail'
-    }
+    type: String as PropType<LayerModeEnum>,
+    default: LayerModeEnum.THUMBNAIL
   }
 })
 
@@ -88,6 +85,27 @@ const themeColor = computed(() => {
   return designStore.getAppTheme
 })
 
+// 是否选中文本
+const selectText = computed(() => {
+  return props.layerMode === LayerModeEnum.TEXT
+})
+
+// 计算当前选中目标
+const select = computed(() => {
+  const id = props.componentGroupData.id
+  return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
+})
+
+// 悬浮
+const hover = computed(() => {
+  return props.componentGroupData.id === chartEditStore.getTargetChart.hoverId
+})
+
+// 组件状态 隐藏/锁定
+const status = computed(() => {
+  return props.componentGroupData.status
+})
+
 // 右键
 const optionsHandle = (
   targetList: MenuOptionsItemType[],
@@ -134,21 +152,6 @@ const clickHandle = (e: MouseEvent) => {
   mousedownHandle(e, props.componentGroupData)
 }
 
-// 计算当前选中目标
-const select = computed(() => {
-  const id = props.componentGroupData.id
-  return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
-})
-
-// 悬浮
-const hover = computed(() => {
-  return props.componentGroupData.id === chartEditStore.getTargetChart.hoverId
-})
-
-const status = computed(() => {
-  return props.componentGroupData.status
-})
-
 // 组点击事件
 const groupMousedownHandle = (e: MouseEvent) => {
   onClickOutSide()
@@ -206,10 +209,19 @@ $textSize: 10px;
   margin: 10px 5%;
   margin-bottom: 5px;
   @extend .go-transition-quick;
+  @include deep() {
+    .go-content-layers-list-item {
+      margin-right: 0 !important;
+      width: 95% !important;
+    }
+  }
 
-  :deep(.go-content-layers-list-item) {
-    margin-right: 0 !important;
-    width: 95% !important;
+  &:hover {
+    @include deep() {
+      .icon-item {
+        opacity: 1;
+      }
+    }
   }
 
   .root-item-content {
diff --git a/src/views/chart/ContentLayers/components/LayersListItem/index.vue b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
index d37d8c63..2b7ecf48 100644
--- a/src/views/chart/ContentLayers/components/LayersListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="go-content-layers-list-item" :class="{ hover: hover, select: select, 'list-mini': layerMode === 'text' }">
+  <div class="go-content-layers-list-item" :class="{ hover: hover, select: select, 'list-mini': selectText }">
     <div class="go-flex-center item-content">
       <n-image
         class="list-img"
@@ -13,61 +13,67 @@
           {{ props.componentData.chartConfig.title }}
         </n-text>
       </n-ellipsis>
-      <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" v-if="status.lock" />
-      <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" v-if="status.hide" />
+      <layers-status :isGroup="isGroup" :hover="hover" :status="status"></layers-status>
     </div>
     <div :class="{ 'select-modal': select }"></div>
   </div>
 </template>
 
 <script setup lang="ts">
-import { toRefs, computed, PropType } from 'vue'
+import { computed, PropType } from 'vue'
 import { requireErrorImg } from '@/utils'
 import { useDesignStore } from '@/store/modules/designStore/designStore'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
-import { LayerModeEnum } from '../../enums'
-
-import { icon } from '@/plugins'
-const { LockClosedOutlineIcon, EyeOffOutlineIcon } = icon.ionicons5
-
-// 全局颜色
-const designStore = useDesignStore()
-const chartEditStore = useChartEditStore()
-
-// 颜色
-const themeColor = computed(() => {
-  return designStore.getAppTheme
-})
+import { LayersStatus } from '../LayersStatus/index'
+import { LayerModeEnum } from '../../index.d'
 
 const props = defineProps({
   componentData: {
     type: Object,
     required: true
   },
+  isGroup: {
+    type: Boolean,
+    default: false
+  },
   layerMode: {
-    type: Object as PropType<LayerModeEnum>,
-    default(): LayerModeEnum {
-      return 'thumbnail'
-    }
+    type: String as PropType<LayerModeEnum>,
+    default: LayerModeEnum.THUMBNAIL
   }
 })
 
+// 全局颜色
+const designStore = useDesignStore()
+const chartEditStore = useChartEditStore()
+
 // eslint-disable-next-line vue/no-setup-props-destructure
 const { image } = props.componentData.chartConfig
 
+// 颜色
+const themeColor = computed(() => {
+  return designStore.getAppTheme
+})
+
 // 计算当前选中目标
 const select = computed(() => {
   const id = props.componentData.id
   return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
 })
 
+// 悬浮对象
 const hover = computed(() => {
   return props.componentData.id === chartEditStore.getTargetChart.hoverId
 })
 
+// 组件状态 隐藏/锁定
 const status = computed(() => {
   return props.componentData.status
 })
+
+// 是否选中文本
+const selectText = computed(() => {
+  return props.layerMode === LayerModeEnum.TEXT
+})
 </script>
 
 <style lang="scss" scoped>
@@ -89,6 +95,13 @@ $textSize: 10px;
   &:hover {
     @include fetch-bg-color('background-color4');
   }
+  &:hover {
+    @include deep() {
+      .icon-item {
+        opacity: 1;
+      }
+    }
+  }
 
   .select-modal,
   .item-content {
@@ -126,18 +139,11 @@ $textSize: 10px;
     font-size: $textSize;
   }
 
-  .list-status-icon {
-    margin-left: 3px;
-  }
-
   /* 选中样式 */
   &.select {
     border: 1px solid v-bind('themeColor');
     /* 需要设置最高级,覆盖 hover 的颜色 */
     background-color: rgba(0, 0, 0, 0);
-    // .list-img {
-    //   border: 1px solid v-bind('themeColor') !important;
-    // }
   }
 
   // mini样式
diff --git a/src/views/chart/ContentLayers/components/LayersStatus/index.ts b/src/views/chart/ContentLayers/components/LayersStatus/index.ts
new file mode 100644
index 00000000..220d5c25
--- /dev/null
+++ b/src/views/chart/ContentLayers/components/LayersStatus/index.ts
@@ -0,0 +1,3 @@
+import LayersStatus from './index.vue'
+
+export { LayersStatus }
diff --git a/src/views/chart/ContentLayers/components/LayersStatus/index.vue b/src/views/chart/ContentLayers/components/LayersStatus/index.vue
new file mode 100644
index 00000000..4179e765
--- /dev/null
+++ b/src/views/chart/ContentLayers/components/LayersStatus/index.vue
@@ -0,0 +1,75 @@
+<template>
+  <div v-show="!isGroup">
+    <n-icon
+      class="go-ml-1 icon-item"
+      :class="{ active: status.lock }"
+      size="15"
+      :component="status.lock ? LockClosedOutlineIcon : LockOpenOutlineIcon"
+      @click="lockHandle"
+    />
+    <n-icon
+      class="go-ml-1 icon-item"
+      :class="{ active: status.hide }"
+      size="15"
+      :component="status.hide ? EyeOffOutlineIcon : EyeOutlineIcon"
+      @click="showHandle"
+    />
+  </div>
+</template>
+
+<script setup lang="ts">
+import { computed, PropType } from 'vue'
+import { LayerModeEnum } from '../../index.d'
+import { PublicConfigType } from '@/packages/index.d'
+import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
+import { icon } from '@/plugins'
+
+const props = defineProps({
+  isGroup: {
+    type: Boolean,
+    default: false
+  },
+  hover: {
+    type: Boolean,
+    default: false
+  },
+  status: {
+    type: Object as PropType<Pick<PublicConfigType, 'status'>>,
+    default: () => ({
+      lock: false,
+      hide: false
+    })
+  }
+})
+
+const { LockClosedOutlineIcon, LockOpenOutlineIcon, EyeOutlineIcon, EyeOffOutlineIcon } = icon.ionicons5
+const chartEditStore = useChartEditStore()
+
+// 隐藏 / 展示
+const showHandle = (e: MouseEvent) => {
+  e.stopPropagation()
+  props.status.hide ? chartEditStore.setShow() : chartEditStore.setHide()
+}
+
+// 锁定 / 解锁
+const lockHandle = (e: MouseEvent) => {
+  e.stopPropagation()
+  props.status.lock ? chartEditStore.setUnLock() : chartEditStore.setLock()
+}
+</script>
+
+<style lang="scss" scoped>
+$activeColor: #ebcb87;
+
+.icon-item {
+  opacity: 0;
+  padding-top: 5px;
+  &.active,
+  &:hover {
+    color: $activeColor;
+  }
+  &.active {
+    opacity: 1 !important;
+  }
+}
+</style>
diff --git a/src/views/chart/ContentLayers/enums.ts b/src/views/chart/ContentLayers/enums.ts
index 0cb26ab2..e69de29b 100644
--- a/src/views/chart/ContentLayers/enums.ts
+++ b/src/views/chart/ContentLayers/enums.ts
@@ -1 +0,0 @@
-export type LayerModeEnum = 'thumbnail' | 'text'
diff --git a/src/views/chart/ContentLayers/index.d.ts b/src/views/chart/ContentLayers/index.d.ts
new file mode 100644
index 00000000..06596dee
--- /dev/null
+++ b/src/views/chart/ContentLayers/index.d.ts
@@ -0,0 +1,4 @@
+export enum LayerModeEnum {
+  THUMBNAIL = 'thumbnail',
+  TEXT = 'text'
+}
diff --git a/src/views/chart/ContentLayers/index.vue b/src/views/chart/ContentLayers/index.vue
index 54efde08..c3323410 100644
--- a/src/views/chart/ContentLayers/index.vue
+++ b/src/views/chart/ContentLayers/index.vue
@@ -17,7 +17,7 @@
           v-for="(item, index) in layerModeEnumList"
           :key="index"
           ghost
-          size="tiny"
+          size="small"
           :type="layerMode === item.value ? 'primary' : 'tertiary'"
           @click="layerMode = item.value as LayerModeEnum"
         >
@@ -77,7 +77,7 @@ import { MenuEnum, MouseEventButton, WinKeyboard, MacKeyboard } from '@/enums/ed
 
 import { LayersListItem } from './components/LayersListItem/index'
 import { LayersGroupListItem } from './components/LayersGroupListItem/index'
-import { LayerModeEnum } from './enums'
+import { LayerModeEnum } from './index.d'
 
 import { icon } from '@/plugins'
 

From 6f5d1d94591892437e531b9c2fcb3e8a66bcca60 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Wed, 28 Sep 2022 21:39:31 +0800
Subject: [PATCH 10/56] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=94=81?=
 =?UTF-8?q?=E5=AE=9A=E5=92=8C=E9=9A=90=E8=97=8F=E5=A4=B1=E7=84=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/store/modules/chartEditStore/chartEditStore.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/store/modules/chartEditStore/chartEditStore.ts b/src/store/modules/chartEditStore/chartEditStore.ts
index 6db94d74..41d2be22 100644
--- a/src/store/modules/chartEditStore/chartEditStore.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.ts
@@ -843,6 +843,7 @@ export const useChartEditStore = defineStore({
             )
           }
           this.updateComponentList(index, targetItem)
+          this.setTargetSelectChart(undefined)
           loadingFinish()
           return
         }
@@ -875,6 +876,7 @@ export const useChartEditStore = defineStore({
             )
           }
           this.updateComponentList(index, targetItem)
+          this.setTargetSelectChart(undefined)
           loadingFinish()
 
           // 取消选择隐藏
@@ -882,7 +884,6 @@ export const useChartEditStore = defineStore({
             const chartEditStore = useChartEditStore()
             chartEditStore.setTargetSelectChart(undefined)
           }
-          return
         }
       } catch (value) {
         loadingError()

From 1aade9c4b867a42357f1910e9b81f4637ad13f2b Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 28 Sep 2022 22:16:08 +0800
Subject: [PATCH 11/56] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=9A=90?=
 =?UTF-8?q?=E8=97=8F=E7=BB=84=E4=BB=B6=E9=A2=84=E8=A7=88=E7=8A=B6=E6=80=81?=
 =?UTF-8?q?=E4=B8=8B=E7=9A=84=E5=BC=82=E5=B8=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/preview/components/PreviewRenderGroup/index.vue | 1 +
 src/views/preview/components/PreviewRenderList/index.vue  | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/views/preview/components/PreviewRenderGroup/index.vue b/src/views/preview/components/PreviewRenderGroup/index.vue
index d5bdf767..4d0a813e 100644
--- a/src/views/preview/components/PreviewRenderGroup/index.vue
+++ b/src/views/preview/components/PreviewRenderGroup/index.vue
@@ -9,6 +9,7 @@
       ...getFilterStyle(item.styles),
       ...getTransformStyle(item.styles)
     }"
+    v-show="!item.status.hide"
   >
     <component
       :is="item.chartConfig.chartKey"
diff --git a/src/views/preview/components/PreviewRenderList/index.vue b/src/views/preview/components/PreviewRenderList/index.vue
index c943be66..a841315f 100644
--- a/src/views/preview/components/PreviewRenderList/index.vue
+++ b/src/views/preview/components/PreviewRenderList/index.vue
@@ -9,6 +9,7 @@
       ...getFilterStyle(item.styles),
       ...getTransformStyle(item.styles)
     }"
+    v-show="!item.status.hide"
   >
     <!-- 分组 -->
     <preview-render-group

From 6ea3f0701e0d9a3adababbd8cd8b847414990b34 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Thu, 29 Sep 2022 09:12:05 +0800
Subject: [PATCH 12/56] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=B1=82?=
 =?UTF-8?q?=E7=BA=A7UI=E5=B1=95=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ContentLayers/components/LayersStatus/index.vue   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/views/chart/ContentLayers/components/LayersStatus/index.vue b/src/views/chart/ContentLayers/components/LayersStatus/index.vue
index 4179e765..648d0842 100644
--- a/src/views/chart/ContentLayers/components/LayersStatus/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersStatus/index.vue
@@ -19,9 +19,10 @@
 
 <script setup lang="ts">
 import { computed, PropType } from 'vue'
-import { LayerModeEnum } from '../../index.d'
+import { useDesignStore } from '@/store/modules/designStore/designStore'
 import { PublicConfigType } from '@/packages/index.d'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
+import { LayerModeEnum } from '../../index.d'
 import { icon } from '@/plugins'
 
 const props = defineProps({
@@ -44,6 +45,12 @@ const props = defineProps({
 
 const { LockClosedOutlineIcon, LockOpenOutlineIcon, EyeOutlineIcon, EyeOffOutlineIcon } = icon.ionicons5
 const chartEditStore = useChartEditStore()
+const designStore = useDesignStore()
+
+// 颜色
+const themeColor = computed(() => {
+  return designStore.getAppTheme
+})
 
 // 隐藏 / 展示
 const showHandle = (e: MouseEvent) => {
@@ -59,7 +66,7 @@ const lockHandle = (e: MouseEvent) => {
 </script>
 
 <style lang="scss" scoped>
-$activeColor: #ebcb87;
+$activeColor: v-bind('themeColor');
 
 .icon-item {
   opacity: 0;

From b66205eda9cbc7049cfd0be7935c1a7232258d02 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Thu, 29 Sep 2022 09:55:11 +0800
Subject: [PATCH 13/56] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=B1=82?=
 =?UTF-8?q?=E7=BA=A7=E5=B1=95=E7=A4=BA,=20=E4=BC=98=E5=8C=96=E5=A4=B1?=
 =?UTF-8?q?=E7=84=A6=E9=9A=90=E8=97=8F=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../modules/chartEditStore/chartEditStore.ts  | 11 +++-----
 .../components/LayersStatus/index.vue         | 25 +++++++++++--------
 2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/store/modules/chartEditStore/chartEditStore.ts b/src/store/modules/chartEditStore/chartEditStore.ts
index 41d2be22..131e8763 100644
--- a/src/store/modules/chartEditStore/chartEditStore.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.ts
@@ -843,7 +843,8 @@ export const useChartEditStore = defineStore({
             )
           }
           this.updateComponentList(index, targetItem)
-          this.setTargetSelectChart(undefined)
+          // 锁定添加失焦效果
+          if(status) this.setTargetSelectChart(undefined)
           loadingFinish()
           return
         }
@@ -876,14 +877,10 @@ export const useChartEditStore = defineStore({
             )
           }
           this.updateComponentList(index, targetItem)
-          this.setTargetSelectChart(undefined)
           loadingFinish()
 
-          // 取消选择隐藏
-          if (status) {
-            const chartEditStore = useChartEditStore()
-            chartEditStore.setTargetSelectChart(undefined)
-          }
+          // 隐藏添加失焦效果
+          if (status) this.setTargetSelectChart(undefined)
         }
       } catch (value) {
         loadingError()
diff --git a/src/views/chart/ContentLayers/components/LayersStatus/index.vue b/src/views/chart/ContentLayers/components/LayersStatus/index.vue
index 648d0842..e0cc2547 100644
--- a/src/views/chart/ContentLayers/components/LayersStatus/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersStatus/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-show="!isGroup">
+  <div class="icon-item-box" v-show="!isGroup">
     <n-icon
       class="go-ml-1 icon-item"
       :class="{ active: status.lock }"
@@ -68,15 +68,20 @@ const lockHandle = (e: MouseEvent) => {
 <style lang="scss" scoped>
 $activeColor: v-bind('themeColor');
 
-.icon-item {
-  opacity: 0;
-  padding-top: 5px;
-  &.active,
-  &:hover {
-    color: $activeColor;
-  }
-  &.active {
-    opacity: 1 !important;
+.icon-item-box {
+  white-space: nowrap;
+
+  .icon-item {
+    opacity: 0;
+    padding-top: 5px;
+    @extend.go-transition;
+    &.active,
+    &:hover {
+      color: $activeColor;
+    }
+    &.active {
+      opacity: 1 !important;
+    }
   }
 }
 </style>

From dd13a0844b40909059a1c3e032013d906157d0b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Thu, 29 Sep 2022 10:10:54 +0800
Subject: [PATCH 14/56] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=E4=BB=A3?=
 =?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ContentEdit/components/EditShapeBox/index.vue    | 12 +++++++++++-
 .../components/LayersGroupListItem/index.vue         |  2 +-
 .../components/LayersListItem/index.vue              |  2 +-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/views/chart/ContentEdit/components/EditShapeBox/index.vue b/src/views/chart/ContentEdit/components/EditShapeBox/index.vue
index a1d162df..b509b32b 100644
--- a/src/views/chart/ContentEdit/components/EditShapeBox/index.vue
+++ b/src/views/chart/ContentEdit/components/EditShapeBox/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="go-shape-box" :class="{ lock: item.status.lock, hide: item.status.hide }">
+  <div class="go-shape-box" :class="{ lock, hide }">
     <slot></slot>
     <!-- 锚点 -->
     <template v-if="!hiddenPoint">
@@ -65,6 +65,16 @@ const select = computed(() => {
   if (props.item.status.lock) return false
   return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
 })
+
+// 锁定
+const lock = computed(() => {
+  return props.item.status.lock
+})
+
+// 隐藏
+const hide = computed(() => {
+  return props.item.status.hide
+})
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
index 8fb6abb1..d9156753 100644
--- a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
@@ -2,7 +2,7 @@
   <div class="go-content-layers-group-list-item">
     <div
       class="root-item-content"
-      :class="{ hover: hover, select: select, 'list-mini': selectText }"
+      :class="{ hover, select, 'list-mini': selectText }"
       @click="clickHandle($event)"
       @mousedown="groupMousedownHandle($event)"
       @mouseenter="mouseenterHandle(componentGroupData)"
diff --git a/src/views/chart/ContentLayers/components/LayersListItem/index.vue b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
index 2b7ecf48..8562b55f 100644
--- a/src/views/chart/ContentLayers/components/LayersListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="go-content-layers-list-item" :class="{ hover: hover, select: select, 'list-mini': selectText }">
+  <div class="go-content-layers-list-item" :class="{ hover, select, 'list-mini': selectText }">
     <div class="go-flex-center item-content">
       <n-image
         class="list-img"

From 885387cb5af904e36350ec070572fa5e76b22d5f Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Thu, 29 Sep 2022 10:32:17 +0800
Subject: [PATCH 15/56] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=80=9A?=
 =?UTF-8?q?=E7=94=A8=E7=BF=BB=E7=89=8C=E5=99=A8=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/Flipper/index.ts  |   3 +
 src/components/Flipper/index.vue | 257 +++++++++++++++++++++++++++++++
 2 files changed, 260 insertions(+)
 create mode 100644 src/components/Flipper/index.ts
 create mode 100644 src/components/Flipper/index.vue

diff --git a/src/components/Flipper/index.ts b/src/components/Flipper/index.ts
new file mode 100644
index 00000000..bf785165
--- /dev/null
+++ b/src/components/Flipper/index.ts
@@ -0,0 +1,3 @@
+import Flipper from './index.vue'
+
+export { Flipper }
diff --git a/src/components/Flipper/index.vue b/src/components/Flipper/index.vue
new file mode 100644
index 00000000..8ccc7696
--- /dev/null
+++ b/src/components/Flipper/index.vue
@@ -0,0 +1,257 @@
+<template>
+  <div class="M-Flipper" :class="[flipType, { go: isFlipping }]">
+    <div class="digital front" :class="_textClass(frontTextFromData)"></div>
+    <div class="digital back" :class="_textClass(backTextFromData)"></div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue'
+type FlipType = 'up' | 'down'
+
+const name = 'Flipper'
+
+const props = defineProps({
+  frontText: {
+    type: [Number, String],
+    default: 0
+  },
+  backText: {
+    type: [Number, String],
+    default: 1
+  },
+  duration: {
+    type: Number,
+    default: 600
+  },
+  width: {
+    type: Number,
+    default: 60
+  },
+  height: {
+    type: Number,
+    default: 100
+  },
+  radius: {
+    type: Number,
+    default: 10
+  },
+  frontColor: {
+    type: String,
+    default: '#ffffff'
+  },
+  backColor: {
+    type: String,
+    default: '#000000'
+  }
+})
+
+const isFlipping = ref(false)
+const flipType = ref<FlipType>('down')
+const frontTextFromData = ref(props.frontText)
+const backTextFromData = ref(props.backText)
+
+const _textClass = (number: string | number) => `number${number}`
+const _flip = (type: FlipType, front: string | number, back: string | number) => {
+  // 如果处于翻转中,则不执行
+  if (isFlipping.value) return
+  frontTextFromData.value = front
+  backTextFromData.value = back
+  // 根据传递过来的type设置翻转方向
+  flipType.value = type
+  // 设置翻转状态为true
+  isFlipping.value = true
+  setTimeout(() => {
+    // 设置翻转状态为false
+    isFlipping.value = false
+    frontTextFromData.value = back
+  }, props.duration)
+}
+// 下翻牌
+const flipDown = (front: string | number, back: string | number) => _flip('down', front, back)
+// 上翻牌
+const flipUp = (front: string | number, back: string | number) => _flip('up', front, back)
+// 设置前牌文字
+const setFront = (text: string | number) => {
+  frontTextFromData.value = text
+}
+// 设置后牌文字
+const setBack = (text: string | number) => {
+  backTextFromData.value = text
+}
+
+defineExpose({
+  name,
+  flipDown,
+  flipUp
+})
+</script>
+
+<style lang="scss" scoped>
+@keyframes frontFlipDown {
+  0% {
+    transform: perspective(160px) rotateX(0deg);
+  }
+  100% {
+    transform: perspective(160px) rotateX(-180deg);
+  }
+}
+@keyframes backFlipDown {
+  0% {
+    transform: perspective(160px) rotateX(180deg);
+  }
+  100% {
+    transform: perspective(160px) rotateX(0deg);
+  }
+}
+@keyframes frontFlipUp {
+  0% {
+    transform: perspective(160px) rotateX(0deg);
+  }
+  100% {
+    transform: perspective(160px) rotateX(180deg);
+  }
+}
+@keyframes backFlipUp {
+  0% {
+    transform: perspective(160px) rotateX(-180deg);
+  }
+  100% {
+    transform: perspective(160px) rotateX(0deg);
+  }
+}
+
+$frontColor: v-bind('props.frontColor');
+$backColor: v-bind('props.backColor');
+$radius: v-bind('props.radius');
+
+.M-Flipper {
+  display: inline-block;
+  position: relative;
+  width: v-bind('`${width}px`');
+  height: v-bind('`${height}px`');
+  line-height: v-bind('`${height}px`');
+  border: solid 1px $backColor;
+  border-radius: v-bind('`${radius}px`');
+  background: $frontColor;
+  font-size: v-bind('`${width * 1.1}px`');
+  color: v-bind('props.frontColor');
+  box-shadow: 0 0 6px rgba(0, 0, 0, 0.5);
+  text-align: center;
+  font-family: 'Helvetica Neue';
+
+  .digital:before,
+  .digital:after {
+    content: '';
+    position: absolute;
+    left: 0;
+    right: 0;
+    background: v-bind('props.backColor');
+    overflow: hidden;
+    box-sizing: border-box;
+  }
+  // .digital.front:after {
+  //   content: v-bind(frontTextFromData) !important;
+  // }
+  // .digital.back:after {
+  //   content: v-bind(backTextFromData) !important;
+  // }
+  .digital:before {
+    top: 0;
+    bottom: 50%;
+    border-radius: v-bind('`${radius}px`') v-bind('`${radius}px`') 0 0;
+    border-bottom: solid 1px #666;
+  }
+  .digital:after {
+    top: 50%;
+    bottom: 0;
+    border-radius: 0 0 v-bind('`${radius}px`') v-bind('`${radius}px`');
+    line-height: 0;
+  }
+  /*向下翻*/
+  &.down .front:before {
+    z-index: 3;
+  }
+  &.down .back:after {
+    z-index: 2;
+    transform-origin: 50% 0%;
+    transform: perspective(v-bind('`${height * 1.6}px`')) rotateX(180deg);
+  }
+  &.down .front:after,
+  &.down .back:before {
+    z-index: 1;
+  }
+  &.down.go .front:before {
+    transform-origin: 50% 100%;
+    animation: frontFlipDown v-bind('`${props.duration / 1000}s`') ease-in-out both;
+    box-shadow: 0 -2px 6px rgba(255, 255, 255, 0.3);
+    backface-visibility: hidden;
+  }
+  &.down.go .back:after {
+    animation: backFlipDown v-bind('`${props.duration / 1000}s`') ease-in-out both;
+  }
+  /*向上翻*/
+  &.up .front:after {
+    z-index: 3;
+  }
+  &.up .back:before {
+    z-index: 2;
+    transform-origin: 50% 100%;
+    transform: perspective(v-bind('`${height * 1.6}px`')) rotateX(-180deg);
+  }
+  &.up .front:before,
+  &.up .back:after {
+    z-index: 1;
+  }
+  &.up.go .front:after {
+    transform-origin: 50% 0;
+    animation: frontFlipUp v-bind('`${props.duration / 1000}s`') ease-in-out both;
+    box-shadow: 0 2px 6px rgba(255, 255, 255, 0.3);
+    backface-visibility: hidden;
+  }
+  &.up.go .back:before {
+    animation: backFlipUp v-bind('`${props.duration / 1000}s`') ease-in-out both;
+  }
+
+  .number0:before,
+  .number0:after {
+    content: '0';
+  }
+  .number1:before,
+  .number1:after {
+    content: '1';
+  }
+  .number2:before,
+  .number2:after {
+    content: '2';
+  }
+  .number3:before,
+  .number3:after {
+    content: '3';
+  }
+  .number4:before,
+  .number4:after {
+    content: '4';
+  }
+  .number5:before,
+  .number5:after {
+    content: '5';
+  }
+  .number6:before,
+  .number6:after {
+    content: '6';
+  }
+  .number7:before,
+  .number7:after {
+    content: '7';
+  }
+  .number8:before,
+  .number8:after {
+    content: '8';
+  }
+  .number9:before,
+  .number9:after {
+    content: '9';
+  }
+}
+</style>

From 144ef06cd127e02ffbc9d7f013960c6de67d7161 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Thu, 29 Sep 2022 10:34:29 +0800
Subject: [PATCH 16/56] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=80=92?=
 =?UTF-8?q?=E8=AE=A1=E6=97=B6=E7=BB=84=E4=BB=B6(=E6=B5=8B=E8=AF=95?=
 =?UTF-8?q?=E4=B8=AD)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Decorates/Mores/CountDown/config.ts       | 38 +++++++++
 .../Decorates/Mores/CountDown/config.vue      | 68 ++++++++++++++++
 .../Decorates/Mores/CountDown/index.ts        | 14 ++++
 .../Decorates/Mores/CountDown/index.vue       | 77 +++++++++++++++++++
 .../components/Decorates/Mores/index.ts       |  3 +-
 5 files changed, 199 insertions(+), 1 deletion(-)
 create mode 100644 src/packages/components/Decorates/Mores/CountDown/config.ts
 create mode 100644 src/packages/components/Decorates/Mores/CountDown/config.vue
 create mode 100644 src/packages/components/Decorates/Mores/CountDown/index.ts
 create mode 100644 src/packages/components/Decorates/Mores/CountDown/index.vue

diff --git a/src/packages/components/Decorates/Mores/CountDown/config.ts b/src/packages/components/Decorates/Mores/CountDown/config.ts
new file mode 100644
index 00000000..ee3c5193
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/CountDown/config.ts
@@ -0,0 +1,38 @@
+import { PublicConfigClass } from '@/packages/public'
+import { CreateComponentType } from '@/packages/index.d'
+import { CountDownConfig } from './index'
+import cloneDeep from 'lodash/cloneDeep'
+import { chartInitConfig } from '@/settings/designSetting'
+
+export enum FontWeightEnum {
+  NORMAL = '常规',
+  BOLD = '加粗'
+}
+
+export const FontWeightObject = {
+  [FontWeightEnum.NORMAL]: 'normal',
+  [FontWeightEnum.BOLD]: 'bold'
+}
+
+export const option = {
+  // 数据说明
+  timeSize: 24,
+  timeLineHeight: 50,
+  timeTextIndent: 2,
+  timeColor: '#E6F7FF',
+  fontWeight: 'normal',
+
+  //阴影
+  showShadow: true,
+  hShadow: 0,
+  vShadow: 0,
+  blurShadow: 8,
+  colorShadow: '#0075ff'
+}
+
+export default class Config extends PublicConfigClass implements CreateComponentType {
+  public key = CountDownConfig.key
+  public attr = { ...chartInitConfig, w: 300, h: 200, zIndex: -1 }
+  public chartConfig = cloneDeep(CountDownConfig)
+  public option = cloneDeep(option)
+}
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.vue b/src/packages/components/Decorates/Mores/CountDown/config.vue
new file mode 100644
index 00000000..208cbedb
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/CountDown/config.vue
@@ -0,0 +1,68 @@
+<template>
+  <CollapseItem name="内容" :expanded="true">
+    <SettingItemBox name="字体">
+      <SettingItem name="大小">
+        <n-input-number v-model:value="optionData.timeSize" size="small" :min="1"></n-input-number>
+      </SettingItem>
+      <SettingItem name="粗细">
+        <n-select v-model:value="optionData.fontWeight" size="small" :options="fontWeightOptions" />
+      </SettingItem>
+    </SettingItemBox>
+    <SettingItemBox name="间距">
+      <SettingItem name="字距">
+        <n-input-number v-model:value="optionData.timeTextIndent" size="small" :min="1"></n-input-number>
+      </SettingItem>
+      <SettingItem name="行距">
+        <n-input-number v-model:value="optionData.timeLineHeight" size="small" :min="1"></n-input-number>
+      </SettingItem>
+    </SettingItemBox>
+
+    <SettingItemBox name="颜色">
+      <SettingItem name="时间">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.timeColor"></n-color-picker>
+      </SettingItem>
+    </SettingItemBox>
+    <SettingItemBox name="阴影">
+      <SettingItem>
+        <n-space>
+          <n-switch v-model:value="optionData.showShadow" size="small" />
+          <n-text>展示阴影</n-text>
+        </n-space>
+      </SettingItem>
+      <SettingItem name="x">
+        <n-input-number v-model:value="optionData.hShadow" size="small"></n-input-number
+      ></SettingItem>
+      <SettingItem name="y">
+        <n-input-number v-model:value="optionData.vShadow" size="small"></n-input-number
+      ></SettingItem>
+      <SettingItem name="模糊">
+        <n-input-number v-model:value="optionData.blurShadow" size="small"></n-input-number
+      ></SettingItem>
+      <SettingItem name="颜色">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.colorShadow"></n-color-picker
+      ></SettingItem>
+    </SettingItemBox>
+  </CollapseItem>
+</template>
+<script setup lang="ts">
+import { PropType } from 'vue'
+import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
+import { option, FontWeightEnum, FontWeightObject } from './config'
+
+const props = defineProps({
+  optionData: {
+    type: Object as PropType<typeof option>,
+    required: true
+  }
+})
+const fontWeightOptions = [
+  {
+    label: FontWeightEnum.NORMAL,
+    value: FontWeightObject[FontWeightEnum.NORMAL]
+  },
+  {
+    label: FontWeightEnum.BOLD,
+    value: FontWeightObject[FontWeightEnum.BOLD]
+  }
+]
+</script>
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.ts b/src/packages/components/Decorates/Mores/CountDown/index.ts
new file mode 100644
index 00000000..b745355c
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/CountDown/index.ts
@@ -0,0 +1,14 @@
+import image from '@/assets/images/chart/decorates/time.png'
+import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
+import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
+
+export const CountDownConfig: ConfigType = {
+  key: 'CountDown',
+  chartKey: 'VCountDown',
+  conKey: 'VCCountDown',
+  title: '倒计时',
+  category: ChatCategoryEnum.MORE,
+  categoryName: ChatCategoryEnumName.MORE,
+  package: PackagesCategoryEnum.DECORATES,
+  image
+}
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.vue b/src/packages/components/Decorates/Mores/CountDown/index.vue
new file mode 100644
index 00000000..d151fe9a
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/CountDown/index.vue
@@ -0,0 +1,77 @@
+<template>
+  <div class="go-decorates-more-countdown">
+    <div>剩余时间</div>
+    <n-countdown :duration="50000" :active="true" />
+    <flipper :front-text="9" ref="flipperRef" />
+    <div>。</div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { PropType, toRefs, ref, watch, onMounted, onUnmounted } from 'vue'
+import { CreateComponentType } from '@/packages/index.d'
+import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
+import { useChartDataFetch } from '@/hooks'
+import { Flipper } from '@/components/Flipper/index'
+
+const props = defineProps({
+  chartConfig: {
+    type: Object as PropType<CreateComponentType>,
+    required: true
+  }
+})
+let boxShadow = ref('none')
+
+const { w, h } = toRefs(props.chartConfig.attr)
+
+let {
+  timeColor,
+  timeSize,
+  timeLineHeight,
+  timeTextIndent,
+  fontWeight,
+  showShadow,
+  hShadow,
+  vShadow,
+  blurShadow,
+  colorShadow
+} = toRefs(props.chartConfig.option)
+
+watch(
+  props.chartConfig.option,
+  () => {
+    if (props.chartConfig.option.showShadow) {
+      boxShadow.value = `${props.chartConfig.option.hShadow}px ${props.chartConfig.option.vShadow}px ${props.chartConfig.option.blurShadow}px ${props.chartConfig.option.colorShadow}`
+    } else {
+      boxShadow.value = 'none'
+    }
+  },
+  {
+    immediate: true
+  }
+)
+
+const flipperRef = ref(null)
+
+let COUNT = 9
+let interval = 0
+onMounted(() => {
+  const interval = window.setInterval(() => {
+    COUNT--
+    if (COUNT === 0) window.clearInterval(interval)
+    const flipperCON: any = flipperRef.value
+    flipperCON?.flipDown(COUNT, COUNT - 1)
+  }, 1000)
+})
+onUnmounted(() => {
+  window.clearInterval(interval)
+})
+useChartDataFetch(props.chartConfig, useChartEditStore)
+</script>
+
+<style lang="scss" scoped>
+@include go('decorates-more-countdown') {
+  width: v-bind('`${w}px`');
+  height: v-bind('`${h}px`');
+}
+</style>
diff --git a/src/packages/components/Decorates/Mores/index.ts b/src/packages/components/Decorates/Mores/index.ts
index 9aff3b7d..bc6a3849 100644
--- a/src/packages/components/Decorates/Mores/index.ts
+++ b/src/packages/components/Decorates/Mores/index.ts
@@ -1,5 +1,6 @@
 import { NumberConfig } from './Number/index'
 import { TimeCommonConfig } from './TimeCommon/index'
 import { ClockConfig } from './Clock/index'
+import { CountDownConfig } from './CountDown/index'
 
-export default [TimeCommonConfig, NumberConfig, ClockConfig]
+export default [TimeCommonConfig, CountDownConfig, NumberConfig, ClockConfig]

From dad4d418941f4a1576b9173acbdd824017aed000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Thu, 29 Sep 2022 10:47:07 +0800
Subject: [PATCH 17/56] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=94=81?=
 =?UTF-8?q?=E5=AE=9A/=E9=9A=90=E8=97=8F=E5=BF=AB=E6=8D=B7=E9=94=AE?=
 =?UTF-8?q?=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../EditShortcutKey/ShortcutKeyModal.vue      | 20 ++++++++++
 src/views/chart/hooks/useContextMenu.hook.ts  |  6 +--
 src/views/chart/hooks/useKeyboard.hook.ts     | 38 +++++++++++++++++++
 3 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/src/views/chart/ContentEdit/components/EditShortcutKey/ShortcutKeyModal.vue b/src/views/chart/ContentEdit/components/EditShortcutKey/ShortcutKeyModal.vue
index 74a3574c..24af3ca7 100644
--- a/src/views/chart/ContentEdit/components/EditShortcutKey/ShortcutKeyModal.vue
+++ b/src/views/chart/ContentEdit/components/EditShortcutKey/ShortcutKeyModal.vue
@@ -63,6 +63,26 @@ const shortcutKeyOptions = [
     win: `${WinKeyboard.CTRL.toUpperCase()} + ← `,
     mac: `${MacKeyboard.CTRL.toUpperCase()} + ← `
   },
+  {
+    label: '锁定',
+    win: `${WinKeyboard.CTRL.toUpperCase()} + L `,
+    mac: `${MacKeyboard.CTRL.toUpperCase()} + L `
+  },
+  {
+    label: '解锁',
+    win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()}+ L `,
+    mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + L `
+  },
+  {
+    label: '展示',
+    win: `${WinKeyboard.CTRL.toUpperCase()} + H `,
+    mac: `${MacKeyboard.CTRL.toUpperCase()} + H `
+  },
+  {
+    label: '隐藏',
+    win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + H `,
+    mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + H `
+  },
   {
     label: '删除',
     win: 'Delete'.toUpperCase(),
diff --git a/src/views/chart/hooks/useContextMenu.hook.ts b/src/views/chart/hooks/useContextMenu.hook.ts
index f79447cc..2bf8fdf8 100644
--- a/src/views/chart/hooks/useContextMenu.hook.ts
+++ b/src/views/chart/hooks/useContextMenu.hook.ts
@@ -44,7 +44,7 @@ export const defaultOptions: MenuOptionsItemType[] = [
     fnHandle: chartEditStore.setLock
   },
   {
-    label: '解除锁定',
+    label: '解锁',
     key: MenuEnum.UNLOCK,
     icon: renderIcon(LockOpenOutlineIcon),
     fnHandle: chartEditStore.setUnLock
@@ -100,13 +100,13 @@ export const defaultOptions: MenuOptionsItemType[] = [
     fnHandle: chartEditStore.setBottom
   },
   {
-    label: '上移一层',
+    label: '上移',
     key: MenuEnum.UP,
     icon: renderIcon(ChevronUpIcon),
     fnHandle: chartEditStore.setUp
   },
   {
-    label: '下移一层',
+    label: '下移',
     key: MenuEnum.DOWN,
     icon: renderIcon(ChevronDownIcon),
     fnHandle: chartEditStore.setDown
diff --git a/src/views/chart/hooks/useKeyboard.hook.ts b/src/views/chart/hooks/useKeyboard.hook.ts
index 19e219dd..a2ee49c0 100644
--- a/src/views/chart/hooks/useKeyboard.hook.ts
+++ b/src/views/chart/hooks/useKeyboard.hook.ts
@@ -24,6 +24,10 @@ export const winKeyboardValue = {
   [MenuEnum.FORWORD]: winCtrlMerge(winShiftMerge('z')),
   [MenuEnum.GROUP]: winCtrlMerge('g'),
   [MenuEnum.UN_GROUP]: winCtrlMerge(winShiftMerge('g')),
+  [MenuEnum.LOCK]: winCtrlMerge('l'),
+  [MenuEnum.UNLOCK]: winCtrlMerge(winShiftMerge('l')),
+  [MenuEnum.HIDE]: winCtrlMerge('h'),
+  [MenuEnum.SHOW]: winCtrlMerge(winShiftMerge('h')),
 }
 
 // 这个 Ctrl 后面还是换成了 ⌘
@@ -45,6 +49,10 @@ export const macKeyboardValue = {
   [MenuEnum.FORWORD]: macCtrlMerge(macShiftMerge('z')),
   [MenuEnum.GROUP]: macCtrlMerge('g'),
   [MenuEnum.UN_GROUP]: macCtrlMerge(macShiftMerge('g')),
+  [MenuEnum.LOCK]: macCtrlMerge('l'),
+  [MenuEnum.UNLOCK]: macCtrlMerge(macShiftMerge('l')),
+  [MenuEnum.HIDE]: macCtrlMerge('h'),
+  [MenuEnum.SHOW]: macCtrlMerge(macShiftMerge('h')),
 }
 
 // Win 快捷键列表
@@ -64,6 +72,12 @@ const winKeyList: Array<string> = [
 
   winKeyboardValue.group,
   winKeyboardValue.unGroup,
+
+  winKeyboardValue.lock,
+  winKeyboardValue.unLock,
+
+  winKeyboardValue.hide,
+  winKeyboardValue.show,
 ]
 
 // Mac 快捷键列表
@@ -83,6 +97,12 @@ const macKeyList: Array<string> = [
 
   macKeyboardValue.group,
   macKeyboardValue.unGroup,
+
+  macKeyboardValue.lock,
+  macKeyboardValue.unLock,
+
+  macKeyboardValue.hide,
+  macKeyboardValue.show,
 ]
 
 // 处理键盘记录
@@ -156,6 +176,24 @@ export const useAddKeyboard = () => {
       case keyboardValue.unGroup:
         keymaster(e, throttle(() => { chartEditStore.setUnGroup(); return false }, throttleTime))
         break;
+
+      // 锁定 ct+l
+      case keyboardValue.lock:
+        keymaster(e, throttle(() => { chartEditStore.setLock(); return false }, throttleTime))
+        break;
+      // 解除锁定 ct+sh+l
+      case keyboardValue.unLock:
+        keymaster(e, throttle(() => { chartEditStore.setUnLock(); return false }, throttleTime))
+        break;
+
+      // 锁定 ct+h
+      case keyboardValue.hide:
+        keymaster(e, throttle(() => { chartEditStore.setHide(); return false }, throttleTime))
+        break;
+      // 解除锁定 ct+sh+h
+      case keyboardValue.show:
+        keymaster(e, throttle(() => { chartEditStore.setShow(); return false }, throttleTime))
+        break;
     }
   }
   winKeyList.forEach((key: string) => {

From fd8aeba7005e16bed3dfd7cac93498b626b06862 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Thu, 29 Sep 2022 11:35:35 +0800
Subject: [PATCH 18/56] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4=E9=A2=84?=
 =?UTF-8?q?=E8=A7=88=E7=8A=B6=E6=80=81=E4=B8=8B=E6=8E=A7=E5=88=B6=E7=8A=B6?=
 =?UTF-8?q?=E6=80=81=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../preview/components/PreviewRenderGroup/index.vue |  6 +++---
 .../preview/components/PreviewRenderList/index.vue  |  6 +++---
 src/views/preview/utils/style.ts                    | 13 ++++++++++---
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/views/preview/components/PreviewRenderGroup/index.vue b/src/views/preview/components/PreviewRenderGroup/index.vue
index 4d0a813e..62b9b22a 100644
--- a/src/views/preview/components/PreviewRenderGroup/index.vue
+++ b/src/views/preview/components/PreviewRenderGroup/index.vue
@@ -7,9 +7,9 @@
     :style="{
       ...getComponentAttrStyle(item.attr, groupIndex),
       ...getFilterStyle(item.styles),
-      ...getTransformStyle(item.styles)
+      ...getTransformStyle(item.styles),
+      ...getStatusStyle(item.status)
     }"
-    v-show="!item.status.hide"
   >
     <component
       :is="item.chartConfig.chartKey"
@@ -25,7 +25,7 @@
 import { PropType } from 'vue'
 import { CreateComponentGroupType } from '@/packages/index.d'
 import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
-import { getSizeStyle, getComponentAttrStyle } from '../../utils'
+import { getSizeStyle, getComponentAttrStyle, getStatusStyle } from '../../utils'
 
 const props = defineProps({
   groupData: {
diff --git a/src/views/preview/components/PreviewRenderList/index.vue b/src/views/preview/components/PreviewRenderList/index.vue
index a841315f..00e359ff 100644
--- a/src/views/preview/components/PreviewRenderList/index.vue
+++ b/src/views/preview/components/PreviewRenderList/index.vue
@@ -7,9 +7,9 @@
     :style="{
       ...getComponentAttrStyle(item.attr, index),
       ...getFilterStyle(item.styles),
-      ...getTransformStyle(item.styles)
+      ...getTransformStyle(item.styles),
+      ...getStatusStyle(item.status)
     }"
-    v-show="!item.status.hide"
   >
     <!-- 分组 -->
     <preview-render-group
@@ -39,7 +39,7 @@ import { PreviewRenderGroup } from '../PreviewRenderGroup/index'
 import { CreateComponentGroupType } from '@/packages/index.d'
 import { chartColors } from '@/settings/chartThemes/index'
 import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
-import { getSizeStyle, getComponentAttrStyle } from '../../utils'
+import { getSizeStyle, getComponentAttrStyle, getStatusStyle } from '../../utils'
 
 const props = defineProps({
   localStorageInfo: {
diff --git a/src/views/preview/utils/style.ts b/src/views/preview/utils/style.ts
index 8392c348..6cd25cba 100644
--- a/src/views/preview/utils/style.ts
+++ b/src/views/preview/utils/style.ts
@@ -2,7 +2,7 @@ import { PickCreateComponentType } from '@/packages/index.d'
 import { EditCanvasConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'
 
 type AttrType = PickCreateComponentType<'attr'>
-type StylesType = PickCreateComponentType<'styles'>
+type StatusType = PickCreateComponentType<'status'>
 
 // 设置位置
 export const getComponentAttrStyle = (attr: AttrType, index: number) => {
@@ -16,10 +16,17 @@ export const getComponentAttrStyle = (attr: AttrType, index: number) => {
 
 // 设置大小
 export const getSizeStyle = (attr: AttrType, scale?: number) => {
-  return ({
+  return {
     width: `${scale ? scale * attr.w : attr.w}px`,
     height: `${scale ? scale * attr.h : attr.h}px`
-  })
+  }
+}
+
+// 设置状态样式
+export const getStatusStyle = (attr: StatusType) => {
+  return {
+    display: attr.hide ? 'none' : 'block'
+  }
 }
 
 // 全局样式

From ac85b72be850d59cd64e659fc7cebbe28ec77b48 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=92=8B=E6=89=BF?= <1141845963@qq.com>
Date: Thu, 29 Sep 2022 12:37:19 +0800
Subject: [PATCH 19/56] =?UTF-8?q?feat:=20=E4=B8=B0=E5=AF=8C=E5=9C=B0?=
 =?UTF-8?q?=E5=9B=BE=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../components/Charts/Maps/MapBase/config.ts  | 18 +++--
 .../components/Charts/Maps/MapBase/config.vue | 70 +++++++++++++++++--
 2 files changed, 77 insertions(+), 11 deletions(-)

diff --git a/src/packages/components/Charts/Maps/MapBase/config.ts b/src/packages/components/Charts/Maps/MapBase/config.ts
index 455ca206..173ff409 100644
--- a/src/packages/components/Charts/Maps/MapBase/config.ts
+++ b/src/packages/components/Charts/Maps/MapBase/config.ts
@@ -95,19 +95,23 @@ export const option = {
       geoIndex: 1,
       tooltip: {
         show: true,
-        backgroundColor: 'rgba(0,0,0,.6)',
-        borderColor: 'rgba(147, 235, 248, .8)',
+        backgroundColor: '#00000060',
+        borderColor: 'rgba(147, 235, 248, 0.8)',
         textStyle: {
-          color: '#FFF'
+          color: '#FFFFFF',
+          fontSize: 12,
         }
       },
       label: {
-        show: false
+        show: false,
+        color: '#FFFFFF',
+        fontSize: 12,
       },
       emphasis: {
         disabled: false,
         label: {
-          color: '#fffFFF'
+          color: '#FFFFFF',
+          fontSize: 12,
         },
         itemStyle: {
           areaColor: '#389BB7',
@@ -126,11 +130,11 @@ export const option = {
           colorStops: [
             {
               offset: 0,
-              color: 'rgba(147, 235, 248, 0)' // 0% 处的颜色
+              color: '#93ebf800' // 0% 处的颜色
             },
             {
               offset: 1,
-              color: 'rgba(147, 235, 248, .2)' // 100% 处的颜色
+              color: '#93ebf820' // 100% 处的颜色
             }
           ],
           globalCoord: false
diff --git a/src/packages/components/Charts/Maps/MapBase/config.vue b/src/packages/components/Charts/Maps/MapBase/config.vue
index c6d2958c..a6c916a2 100644
--- a/src/packages/components/Charts/Maps/MapBase/config.vue
+++ b/src/packages/components/Charts/Maps/MapBase/config.vue
@@ -14,7 +14,7 @@
       </SettingItem>
     </SettingItemBox>
 
-    <SettingItemBox name="区域颜色" :alone="true">
+    <SettingItemBox name="区域颜色">
       <SettingItem name="0%处颜色">
         <n-color-picker
           size="small"
@@ -61,7 +61,31 @@
         ></n-input-number>
       </SettingItem>
     </SettingItemBox>
-    <SettingItemBox name="聚焦 (预览可见)">
+
+    <SettingItemBox name="省级名称">
+      <setting-item name="显示">
+        <n-space>
+          <n-switch v-model:value="seriesList[1].label.show" size="small"></n-switch>
+        </n-space>
+      </setting-item>
+      <SettingItem name="字体颜色">
+        <n-color-picker
+          size="small"
+          :modes="['hex']"
+          v-model:value="seriesList[1].label.color"
+        ></n-color-picker>
+      </SettingItem>
+      <SettingItem name="字体大小">
+        <n-input-number
+          v-model:value="seriesList[1].label.fontSize"
+          :min="1"
+          size="small"
+          placeholder="请输入字体大小"
+        ></n-input-number>
+      </SettingItem>
+    </SettingItemBox>
+
+    <SettingItemBox name="悬浮 (预览可见)">
       <setting-item name="禁用">
         <n-space>
           <n-switch v-model:value="seriesList[1].emphasis.disabled" size="small"></n-switch>
@@ -74,6 +98,14 @@
           v-model:value="seriesList[1].emphasis.itemStyle.areaColor"
         ></n-color-picker>
       </SettingItem>
+      <SettingItem name="字体大小">
+        <n-input-number
+          v-model:value="seriesList[1].emphasis.label.fontSize"
+          :min="1"
+          size="small"
+          placeholder="请输入字体大小"
+        ></n-input-number>
+      </SettingItem>
       <SettingItem name="阴影">
         <n-color-picker
           size="small"
@@ -97,7 +129,37 @@
         ></n-color-picker>
       </SettingItem>
     </SettingItemBox>
-    <SettingItemBox name="边框">
+    
+    <SettingItemBox name="悬浮弹窗">
+      <SettingItem name="显示">
+        <n-space>
+          <n-switch v-model:value="seriesList[1].tooltip.show" size="small"></n-switch>
+        </n-space>
+      </SettingItem>
+      <SettingItem name="字体大小">
+        <n-input-number
+          v-model:value="seriesList[1].tooltip.textStyle.fontSize"
+          :min="1"
+          size="small"
+          placeholder="请输入字体大小"
+        ></n-input-number>
+      </SettingItem>
+      <SettingItem name="字体颜色">
+        <n-color-picker
+          size="small"
+          :modes="['hex']"
+          v-model:value="seriesList[1].tooltip.textStyle.color"
+        ></n-color-picker>
+      </SettingItem>
+      <SettingItem name="背景颜色">
+        <n-color-picker
+          size="small"
+          :modes="['hex']"
+          v-model:value="seriesList[1].tooltip.backgroundColor"
+        ></n-color-picker>
+      </SettingItem>
+    </SettingItemBox>
+    <SettingItemBox name="区域边框">
       <SettingItem name="颜色">
         <n-color-picker
           size="small"
@@ -105,7 +167,7 @@
           v-model:value="seriesList[1].itemStyle.borderColor"
         ></n-color-picker>
       </SettingItem>
-      <SettingItem name="大小">
+      <SettingItem name="宽度大小">
         <n-input-number
           v-model:value="seriesList[1].itemStyle.borderWidth"
           :min="1"

From e3d5860a4179dd139fbae8fd642e005ba80a2653 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Thu, 29 Sep 2022 15:20:23 +0800
Subject: [PATCH 20/56] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4=E7=BF=BB?=
 =?UTF-8?q?=E7=89=8C=E5=99=A8=E6=A0=B7=E5=BC=8F=E6=8E=A7=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/Flipper/index.vue | 60 ++++++--------------------------
 1 file changed, 10 insertions(+), 50 deletions(-)

diff --git a/src/components/Flipper/index.vue b/src/components/Flipper/index.vue
index 8ccc7696..1e1d86de 100644
--- a/src/components/Flipper/index.vue
+++ b/src/components/Flipper/index.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="M-Flipper" :class="[flipType, { go: isFlipping }]">
-    <div class="digital front" :class="_textClass(frontTextFromData)"></div>
-    <div class="digital back" :class="_textClass(backTextFromData)"></div>
+    <div class="digital front" :data-front="frontTextFromData"></div>
+    <div class="digital back" :data-back="backTextFromData"></div>
   </div>
 </template>
 
@@ -51,7 +51,6 @@ const flipType = ref<FlipType>('down')
 const frontTextFromData = ref(props.frontText)
 const backTextFromData = ref(props.backText)
 
-const _textClass = (number: string | number) => `number${number}`
 const _flip = (type: FlipType, front: string | number, back: string | number) => {
   // 如果处于翻转中,则不执行
   if (isFlipping.value) return
@@ -150,12 +149,14 @@ $radius: v-bind('props.radius');
     overflow: hidden;
     box-sizing: border-box;
   }
-  // .digital.front:after {
-  //   content: v-bind(frontTextFromData) !important;
-  // }
-  // .digital.back:after {
-  //   content: v-bind(backTextFromData) !important;
-  // }
+  .digital.front:before,
+  .digital.front:after {
+    content: attr(data-front) !important;
+  }
+  .digital.back:before,
+  .digital.back:after {
+    content: attr(data-back) !important;
+  }
   .digital:before {
     top: 0;
     bottom: 50%;
@@ -212,46 +213,5 @@ $radius: v-bind('props.radius');
   &.up.go .back:before {
     animation: backFlipUp v-bind('`${props.duration / 1000}s`') ease-in-out both;
   }
-
-  .number0:before,
-  .number0:after {
-    content: '0';
-  }
-  .number1:before,
-  .number1:after {
-    content: '1';
-  }
-  .number2:before,
-  .number2:after {
-    content: '2';
-  }
-  .number3:before,
-  .number3:after {
-    content: '3';
-  }
-  .number4:before,
-  .number4:after {
-    content: '4';
-  }
-  .number5:before,
-  .number5:after {
-    content: '5';
-  }
-  .number6:before,
-  .number6:after {
-    content: '6';
-  }
-  .number7:before,
-  .number7:after {
-    content: '7';
-  }
-  .number8:before,
-  .number8:after {
-    content: '8';
-  }
-  .number9:before,
-  .number9:after {
-    content: '9';
-  }
 }
 </style>

From d0260041ce2adc1faeb8f9731bd55b1eb03cd069 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Thu, 29 Sep 2022 15:21:04 +0800
Subject: [PATCH 21/56] =?UTF-8?q?fix:=20=E5=BC=95=E5=85=A5=20naiveui=20NCo?=
 =?UTF-8?q?untdown=20=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/plugins/naive.ts | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/plugins/naive.ts b/src/plugins/naive.ts
index a1e03c3a..9354a285 100644
--- a/src/plugins/naive.ts
+++ b/src/plugins/naive.ts
@@ -1,4 +1,4 @@
-import type { App } from 'vue';
+import type { App } from 'vue'
 import {
   create,
   NA,
@@ -8,6 +8,7 @@ import {
   NH3,
   NH4,
   NCode,
+  NCountdown,
   NText,
   NTime,
   NEllipsis,
@@ -98,7 +99,7 @@ import {
   NWatermark,
   NEmpty,
   NCollapseTransition
-} from 'naive-ui';
+} from 'naive-ui'
 
 const naive = create({
   components: [
@@ -109,6 +110,7 @@ const naive = create({
     NH3,
     NH4,
     NCode,
+    NCountdown,
     NText,
     NTime,
     NEllipsis,
@@ -199,9 +201,9 @@ const naive = create({
     NWatermark,
     NEmpty,
     NCollapseTransition
-  ],
-});
+  ]
+})
 
 export function setupNaive(app: App<Element>) {
-  app.use(naive);
+  app.use(naive)
 }

From 4a75cc4d1108af443fe99c2fef213cbc3ec2d3a1 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Thu, 29 Sep 2022 15:21:22 +0800
Subject: [PATCH 22/56] =?UTF-8?q?chore:=20=E8=B0=83=E6=95=B4=E5=80=92?=
 =?UTF-8?q?=E8=AE=A1=E6=97=B6=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Decorates/Mores/CountDown/config.ts       | 21 ++---
 .../Decorates/Mores/CountDown/config.vue      | 85 +++++++----------
 .../Decorates/Mores/CountDown/index.vue       | 91 +++++++++++++++----
 3 files changed, 113 insertions(+), 84 deletions(-)

diff --git a/src/packages/components/Decorates/Mores/CountDown/config.ts b/src/packages/components/Decorates/Mores/CountDown/config.ts
index ee3c5193..118797ff 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.ts
+++ b/src/packages/components/Decorates/Mores/CountDown/config.ts
@@ -15,24 +15,17 @@ export const FontWeightObject = {
 }
 
 export const option = {
-  // 数据说明
-  timeSize: 24,
-  timeLineHeight: 50,
-  timeTextIndent: 2,
-  timeColor: '#E6F7FF',
-  fontWeight: 'normal',
-
-  //阴影
-  showShadow: true,
-  hShadow: 0,
-  vShadow: 0,
-  blurShadow: 8,
-  colorShadow: '#0075ff'
+  flipperBgColor: '#ee6600FF',
+  flipperTextColor: '#336600FF',
+  flipperWidth: 60,
+  flipperHeight: 100,
+  flipperRadius: 10,
+  flipperSpeed: 600
 }
 
 export default class Config extends PublicConfigClass implements CreateComponentType {
   public key = CountDownConfig.key
-  public attr = { ...chartInitConfig, w: 300, h: 200, zIndex: -1 }
+  public attr = { ...chartInitConfig, w: 500, h: 200, zIndex: -1 }
   public chartConfig = cloneDeep(CountDownConfig)
   public option = cloneDeep(option)
 }
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.vue b/src/packages/components/Decorates/Mores/CountDown/config.vue
index 208cbedb..bd8efe1c 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/config.vue
@@ -1,53 +1,40 @@
 <template>
-  <CollapseItem name="内容" :expanded="true">
-    <SettingItemBox name="字体">
-      <SettingItem name="大小">
-        <n-input-number v-model:value="optionData.timeSize" size="small" :min="1"></n-input-number>
-      </SettingItem>
-      <SettingItem name="粗细">
-        <n-select v-model:value="optionData.fontWeight" size="small" :options="fontWeightOptions" />
-      </SettingItem>
-    </SettingItemBox>
-    <SettingItemBox name="间距">
-      <SettingItem name="字距">
-        <n-input-number v-model:value="optionData.timeTextIndent" size="small" :min="1"></n-input-number>
-      </SettingItem>
-      <SettingItem name="行距">
-        <n-input-number v-model:value="optionData.timeLineHeight" size="small" :min="1"></n-input-number>
-      </SettingItem>
-    </SettingItemBox>
+  <collapse-item name="翻牌" :expanded="true">
+    <setting-item-box name="尺寸">
+      <setting-item name="宽度">
+        <n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
+      </setting-item>
+      <setting-item name="高度">
+        <n-input-number v-model:value="optionData.flipperHeight" size="small" :min="1"></n-input-number>
+      </setting-item>
+    </setting-item-box>
 
-    <SettingItemBox name="颜色">
-      <SettingItem name="时间">
-        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.timeColor"></n-color-picker>
-      </SettingItem>
-    </SettingItemBox>
-    <SettingItemBox name="阴影">
-      <SettingItem>
-        <n-space>
-          <n-switch v-model:value="optionData.showShadow" size="small" />
-          <n-text>展示阴影</n-text>
-        </n-space>
-      </SettingItem>
-      <SettingItem name="x">
-        <n-input-number v-model:value="optionData.hShadow" size="small"></n-input-number
-      ></SettingItem>
-      <SettingItem name="y">
-        <n-input-number v-model:value="optionData.vShadow" size="small"></n-input-number
-      ></SettingItem>
-      <SettingItem name="模糊">
-        <n-input-number v-model:value="optionData.blurShadow" size="small"></n-input-number
-      ></SettingItem>
-      <SettingItem name="颜色">
-        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.colorShadow"></n-color-picker
-      ></SettingItem>
-    </SettingItemBox>
-  </CollapseItem>
+    <setting-item-box name="样式">
+      <setting-item name="背景色">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperBgColor"></n-color-picker>
+      </setting-item>
+      <setting-item name="字体色">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
+      </setting-item>
+      <setting-item name="圆角">
+        <n-input-number v-model:value="optionData.flipperRadius" size="small" :min="0"></n-input-number>
+      </setting-item>
+      <setting-item name="翻牌速度">
+        <n-input-number
+          v-model:value="optionData.flipperSpeed"
+          size="small"
+          :min="100"
+          :max="900"
+          :step="100"
+        ></n-input-number>
+      </setting-item>
+    </setting-item-box>
+  </collapse-item>
 </template>
 <script setup lang="ts">
 import { PropType } from 'vue'
 import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
-import { option, FontWeightEnum, FontWeightObject } from './config'
+import { option } from './config'
 
 const props = defineProps({
   optionData: {
@@ -55,14 +42,4 @@ const props = defineProps({
     required: true
   }
 })
-const fontWeightOptions = [
-  {
-    label: FontWeightEnum.NORMAL,
-    value: FontWeightObject[FontWeightEnum.NORMAL]
-  },
-  {
-    label: FontWeightEnum.BOLD,
-    value: FontWeightObject[FontWeightEnum.BOLD]
-  }
-]
 </script>
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.vue b/src/packages/components/Decorates/Mores/CountDown/index.vue
index d151fe9a..3a7d0b04 100644
--- a/src/packages/components/Decorates/Mores/CountDown/index.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/index.vue
@@ -1,9 +1,73 @@
 <template>
   <div class="go-decorates-more-countdown">
-    <div>剩余时间</div>
     <n-countdown :duration="50000" :active="true" />
-    <flipper :front-text="9" ref="flipperRef" />
-    <div>。</div>
+    <n-space :gap="10">
+      <flipper
+        :front-text="9"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :duration="flipperSpeed"
+        ref="flipperRef"
+      />
+      <flipper
+        :front-text="9"
+        :back-text="8"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :duration="flipperSpeed"
+        ref="flipperRef2"
+      />
+      <flipper
+        :front-text="8"
+        :back-text="7"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :duration="flipperSpeed"
+        ref="flipperRef3"
+      />
+      <flipper
+        :front-text="7"
+        :back-text="7"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :duration="flipperSpeed"
+        ref="flipperRef4"
+      />
+      <flipper
+        :front-text="6"
+        :back-text="5"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :duration="flipperSpeed"
+        ref="flipperRef5"
+      />
+      <flipper
+        :front-text="5"
+        :back-text="4"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :duration="flipperSpeed"
+        ref="flipperRef6"
+      />
+    </n-space>
   </div>
 </template>
 
@@ -24,18 +88,9 @@ let boxShadow = ref('none')
 
 const { w, h } = toRefs(props.chartConfig.attr)
 
-let {
-  timeColor,
-  timeSize,
-  timeLineHeight,
-  timeTextIndent,
-  fontWeight,
-  showShadow,
-  hShadow,
-  vShadow,
-  blurShadow,
-  colorShadow
-} = toRefs(props.chartConfig.option)
+let { flipperBgColor, flipperTextColor, flipperWidth, flipperHeight, flipperRadius, flipperSpeed } = toRefs(
+  props.chartConfig.option
+)
 
 watch(
   props.chartConfig.option,
@@ -58,7 +113,7 @@ let interval = 0
 onMounted(() => {
   const interval = window.setInterval(() => {
     COUNT--
-    if (COUNT === 0) window.clearInterval(interval)
+    if (COUNT <= 1) window.clearInterval(interval)
     const flipperCON: any = flipperRef.value
     flipperCON?.flipDown(COUNT, COUNT - 1)
   }, 1000)
@@ -73,5 +128,9 @@ useChartDataFetch(props.chartConfig, useChartEditStore)
 @include go('decorates-more-countdown') {
   width: v-bind('`${w}px`');
   height: v-bind('`${h}px`');
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
 }
 </style>

From 01bf37ce388d752feadc31ce51224ae1122827f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=92=8B=E6=89=BF?= <1141845963@qq.com>
Date: Thu, 29 Sep 2022 15:23:32 +0800
Subject: [PATCH 23/56] =?UTF-8?q?feat:=20=E4=B8=B0=E5=AF=8C=E5=9C=B0?=
 =?UTF-8?q?=E5=9B=BE=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../components/Charts/Maps/MapBase/config.ts  |  2 +-
 .../components/Charts/Maps/MapBase/config.vue | 24 +++++++++++++++----
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/src/packages/components/Charts/Maps/MapBase/config.ts b/src/packages/components/Charts/Maps/MapBase/config.ts
index 173ff409..36663256 100644
--- a/src/packages/components/Charts/Maps/MapBase/config.ts
+++ b/src/packages/components/Charts/Maps/MapBase/config.ts
@@ -73,7 +73,7 @@ export const option = {
         textShadowColor: '#000',
         textShadowBlur: 10,
         textBorderWidth: 0,
-        color: '#FFF',
+        color: '#FFFFFF',
         show: true
       },
       itemStyle: {
diff --git a/src/packages/components/Charts/Maps/MapBase/config.vue b/src/packages/components/Charts/Maps/MapBase/config.vue
index a6c916a2..b3ef4961 100644
--- a/src/packages/components/Charts/Maps/MapBase/config.vue
+++ b/src/packages/components/Charts/Maps/MapBase/config.vue
@@ -62,12 +62,12 @@
       </SettingItem>
     </SettingItemBox>
 
-    <SettingItemBox name="省级名称">
-      <setting-item name="显示">
+    <SettingItemBox name="地理信息名称">
+      <SettingItem name="显示">
         <n-space>
           <n-switch v-model:value="seriesList[1].label.show" size="small"></n-switch>
         </n-space>
-      </setting-item>
+      </SettingItem>
       <SettingItem name="字体颜色">
         <n-color-picker
           size="small"
@@ -86,11 +86,11 @@
     </SettingItemBox>
 
     <SettingItemBox name="悬浮 (预览可见)">
-      <setting-item name="禁用">
+      <SettingItem name="禁用">
         <n-space>
           <n-switch v-model:value="seriesList[1].emphasis.disabled" size="small"></n-switch>
         </n-space>
-      </setting-item>
+      </SettingItem>
       <SettingItem name="颜色">
         <n-color-picker
           size="small"
@@ -191,6 +191,20 @@
         <n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].itemStyle.color"></n-color-picker>
       </SettingItem>
     </SettingItemBox>
+      
+    <SettingItemBox name="文本">
+      <SettingItem name="显示">
+        <n-space>
+          <n-switch v-model:value="seriesList[0].label.show" size="small"></n-switch>
+        </n-space>
+      </SettingItem>
+      <SettingItem name="字体大小">
+        <n-input-number v-model:value="seriesList[0].label.fontSize" size="small" :min="0"></n-input-number>
+      </SettingItem>
+      <SettingItem name="字体颜色">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].label.color"></n-color-picker>
+      </SettingItem>
+    </SettingItemBox>
 
     <SettingItemBox name="涟漪">
       <SettingItem name="涟漪大小">

From a56ddc9415d285b5f975a6b7d76c7e575f2ef3f5 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Thu, 29 Sep 2022 19:11:54 +0800
Subject: [PATCH 24/56] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=BF=BB?=
 =?UTF-8?q?=E7=89=8C=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/Flipper/index.vue | 114 +++++++++++++++++--------------
 1 file changed, 61 insertions(+), 53 deletions(-)

diff --git a/src/components/Flipper/index.vue b/src/components/Flipper/index.vue
index 1e1d86de..63f5b55f 100644
--- a/src/components/Flipper/index.vue
+++ b/src/components/Flipper/index.vue
@@ -1,24 +1,28 @@
 <template>
   <div class="M-Flipper" :class="[flipType, { go: isFlipping }]">
-    <div class="digital front" :data-front="frontTextFromData"></div>
-    <div class="digital back" :data-back="backTextFromData"></div>
+    <div class="digital front" :data-front="frontTextFromData || 0"></div>
+    <div class="digital back" :data-back="backTextFromData || 0"></div>
   </div>
 </template>
 
 <script lang="ts" setup>
-import { ref } from 'vue'
+import { ref, PropType, watch } from 'vue'
 type FlipType = 'up' | 'down'
 
-const name = 'Flipper'
-
 const props = defineProps({
+  flipType: {
+    type: Object as PropType<FlipType>,
+    default: () => {
+      return 'down'
+    }
+  },
   frontText: {
     type: [Number, String],
     default: 0
   },
   backText: {
     type: [Number, String],
-    default: 1
+    default: 0
   },
   duration: {
     type: Number,
@@ -47,97 +51,101 @@ const props = defineProps({
 })
 
 const isFlipping = ref(false)
-const flipType = ref<FlipType>('down')
 const frontTextFromData = ref(props.frontText)
 const backTextFromData = ref(props.backText)
 
-const _flip = (type: FlipType, front: string | number, back: string | number) => {
+// 翻牌
+const flip = (front: string | number, back: string | number) => {
   // 如果处于翻转中,则不执行
   if (isFlipping.value) return
-  frontTextFromData.value = front
+  // 设置翻盘前后数据
   backTextFromData.value = back
-  // 根据传递过来的type设置翻转方向
-  flipType.value = type
+  frontTextFromData.value = front
+
   // 设置翻转状态为true
   isFlipping.value = true
+
+  // 翻牌结束的行为
   setTimeout(() => {
-    // 设置翻转状态为false
-    isFlipping.value = false
+    isFlipping.value = false // 设置翻转状态为false
     frontTextFromData.value = back
   }, props.duration)
 }
-// 下翻牌
-const flipDown = (front: string | number, back: string | number) => _flip('down', front, back)
-// 上翻牌
-const flipUp = (front: string | number, back: string | number) => _flip('up', front, back)
-// 设置前牌文字
-const setFront = (text: string | number) => {
-  frontTextFromData.value = text
-}
-// 设置后牌文字
-const setBack = (text: string | number) => {
-  backTextFromData.value = text
-}
+
+watch(
+  () => props.backText,
+  (newVal, oldVal) => {
+    console.log('watch:props.backText', newVal)
+    flip(newVal, oldVal as string | number)
+  },
+  {
+    immediate: true
+  }
+)
 
 defineExpose({
-  name,
-  flipDown,
-  flipUp
+  flip
 })
 </script>
 
 <style lang="scss" scoped>
+// #region 动画效果
 @keyframes frontFlipDown {
   0% {
-    transform: perspective(160px) rotateX(0deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(0deg);
   }
   100% {
-    transform: perspective(160px) rotateX(-180deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(-180deg);
   }
 }
 @keyframes backFlipDown {
   0% {
-    transform: perspective(160px) rotateX(180deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(180deg);
   }
   100% {
-    transform: perspective(160px) rotateX(0deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(0deg);
   }
 }
 @keyframes frontFlipUp {
   0% {
-    transform: perspective(160px) rotateX(0deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(0deg);
   }
   100% {
-    transform: perspective(160px) rotateX(180deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(180deg);
   }
 }
 @keyframes backFlipUp {
   0% {
-    transform: perspective(160px) rotateX(-180deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(-180deg);
   }
   100% {
-    transform: perspective(160px) rotateX(0deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(0deg);
   }
 }
+// #endregion
 
 $frontColor: v-bind('props.frontColor');
 $backColor: v-bind('props.backColor');
-$radius: v-bind('props.radius');
+$radius: v-bind('`${props.radius}px`');
+$width: v-bind('`${props.width}px`');
+$height: v-bind('`${props.height}px`');
+$shadowColor: #000000;
+$lineColor: #ffffff;
 
 .M-Flipper {
   display: inline-block;
   position: relative;
-  width: v-bind('`${width}px`');
-  height: v-bind('`${height}px`');
-  line-height: v-bind('`${height}px`');
+  width: $width;
+  height: $height;
+  line-height: $height;
   border: solid 1px $backColor;
-  border-radius: v-bind('`${radius}px`');
+  border-radius: $radius;
   background: $frontColor;
-  font-size: v-bind('`${width * 1.1}px`');
-  color: v-bind('props.frontColor');
-  box-shadow: 0 0 6px rgba(0, 0, 0, 0.5);
+  font-size: v-bind('`${props.width * 1.1}px`');
+  color: $frontColor;
+  box-shadow: 0 0 6px rgba($color: $shadowColor, $alpha: 0.5); // 阴影部分
   text-align: center;
-  font-family: 'Helvetica Neue';
+  // font-family: 'Helvetica Neue';
 
   .digital:before,
   .digital:after {
@@ -145,7 +153,7 @@ $radius: v-bind('props.radius');
     position: absolute;
     left: 0;
     right: 0;
-    background: v-bind('props.backColor');
+    background: $backColor;
     overflow: hidden;
     box-sizing: border-box;
   }
@@ -160,13 +168,13 @@ $radius: v-bind('props.radius');
   .digital:before {
     top: 0;
     bottom: 50%;
-    border-radius: v-bind('`${radius}px`') v-bind('`${radius}px`') 0 0;
-    border-bottom: solid 1px #666;
+    border-radius: $radius $radius 0 0;
+    border-bottom: solid 1px rgba($color: $lineColor, $alpha: 0.5); // 中间线颜色
   }
   .digital:after {
     top: 50%;
     bottom: 0;
-    border-radius: 0 0 v-bind('`${radius}px`') v-bind('`${radius}px`');
+    border-radius: 0 0 $radius $radius;
     line-height: 0;
   }
   /*向下翻*/
@@ -176,7 +184,7 @@ $radius: v-bind('props.radius');
   &.down .back:after {
     z-index: 2;
     transform-origin: 50% 0%;
-    transform: perspective(v-bind('`${height * 1.6}px`')) rotateX(180deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(180deg);
   }
   &.down .front:after,
   &.down .back:before {
@@ -185,7 +193,7 @@ $radius: v-bind('props.radius');
   &.down.go .front:before {
     transform-origin: 50% 100%;
     animation: frontFlipDown v-bind('`${props.duration / 1000}s`') ease-in-out both;
-    box-shadow: 0 -2px 6px rgba(255, 255, 255, 0.3);
+    box-shadow: 0 -2px 6px rgba($color: $lineColor, $alpha: 0.3);
     backface-visibility: hidden;
   }
   &.down.go .back:after {
@@ -198,7 +206,7 @@ $radius: v-bind('props.radius');
   &.up .back:before {
     z-index: 2;
     transform-origin: 50% 100%;
-    transform: perspective(v-bind('`${height * 1.6}px`')) rotateX(-180deg);
+    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(-180deg);
   }
   &.up .front:before,
   &.up .back:after {
@@ -207,7 +215,7 @@ $radius: v-bind('props.radius');
   &.up.go .front:after {
     transform-origin: 50% 0;
     animation: frontFlipUp v-bind('`${props.duration / 1000}s`') ease-in-out both;
-    box-shadow: 0 2px 6px rgba(255, 255, 255, 0.3);
+    box-shadow: 0 2px 6px rgba($color: $lineColor, $alpha: 0.3);
     backface-visibility: hidden;
   }
   &.up.go .back:before {

From 73ce3a855135782a33a26bbcac1c2c509f9d7a75 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Thu, 29 Sep 2022 19:25:29 +0800
Subject: [PATCH 25/56] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/Flipper/index.vue              |  2 +
 .../Decorates/Mores/CountDown/config.ts       |  2 +-
 .../Decorates/Mores/CountDown/index.vue       | 68 +++----------------
 3 files changed, 13 insertions(+), 59 deletions(-)

diff --git a/src/components/Flipper/index.vue b/src/components/Flipper/index.vue
index 63f5b55f..fcee3cdd 100644
--- a/src/components/Flipper/index.vue
+++ b/src/components/Flipper/index.vue
@@ -56,6 +56,8 @@ const backTextFromData = ref(props.backText)
 
 // 翻牌
 const flip = (front: string | number, back: string | number) => {
+  if (!back) back = +front - 1
+  console.log('flip:', { front, back })
   // 如果处于翻转中,则不执行
   if (isFlipping.value) return
   // 设置翻盘前后数据
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.ts b/src/packages/components/Decorates/Mores/CountDown/config.ts
index 118797ff..94b2e383 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.ts
+++ b/src/packages/components/Decorates/Mores/CountDown/config.ts
@@ -16,7 +16,7 @@ export const FontWeightObject = {
 
 export const option = {
   flipperBgColor: '#ee6600FF',
-  flipperTextColor: '#336600FF',
+  flipperTextColor: '#FFFFFFFF',
   flipperWidth: 60,
   flipperHeight: 100,
   flipperRadius: 10,
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.vue b/src/packages/components/Decorates/Mores/CountDown/index.vue
index 3a7d0b04..e98c5bf4 100644
--- a/src/packages/components/Decorates/Mores/CountDown/index.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/index.vue
@@ -3,7 +3,9 @@
     <n-countdown :duration="50000" :active="true" />
     <n-space :gap="10">
       <flipper
-        :front-text="9"
+        flip-type="down"
+        :front-text="0"
+        :back-text="COUNT"
         :width="flipperWidth"
         :height="flipperHeight"
         :front-color="flipperTextColor"
@@ -12,61 +14,6 @@
         :duration="flipperSpeed"
         ref="flipperRef"
       />
-      <flipper
-        :front-text="9"
-        :back-text="8"
-        :width="flipperWidth"
-        :height="flipperHeight"
-        :front-color="flipperTextColor"
-        :back-color="flipperBgColor"
-        :radius="flipperRadius"
-        :duration="flipperSpeed"
-        ref="flipperRef2"
-      />
-      <flipper
-        :front-text="8"
-        :back-text="7"
-        :width="flipperWidth"
-        :height="flipperHeight"
-        :front-color="flipperTextColor"
-        :back-color="flipperBgColor"
-        :radius="flipperRadius"
-        :duration="flipperSpeed"
-        ref="flipperRef3"
-      />
-      <flipper
-        :front-text="7"
-        :back-text="7"
-        :width="flipperWidth"
-        :height="flipperHeight"
-        :front-color="flipperTextColor"
-        :back-color="flipperBgColor"
-        :radius="flipperRadius"
-        :duration="flipperSpeed"
-        ref="flipperRef4"
-      />
-      <flipper
-        :front-text="6"
-        :back-text="5"
-        :width="flipperWidth"
-        :height="flipperHeight"
-        :front-color="flipperTextColor"
-        :back-color="flipperBgColor"
-        :radius="flipperRadius"
-        :duration="flipperSpeed"
-        ref="flipperRef5"
-      />
-      <flipper
-        :front-text="5"
-        :back-text="4"
-        :width="flipperWidth"
-        :height="flipperHeight"
-        :front-color="flipperTextColor"
-        :back-color="flipperBgColor"
-        :radius="flipperRadius"
-        :duration="flipperSpeed"
-        ref="flipperRef6"
-      />
     </n-space>
   </div>
 </template>
@@ -112,10 +59,15 @@ let COUNT = 9
 let interval = 0
 onMounted(() => {
   const interval = window.setInterval(() => {
+    if (COUNT <= 1) {
+      window.clearInterval(interval)
+      return
+    }
     COUNT--
-    if (COUNT <= 1) window.clearInterval(interval)
     const flipperCON: any = flipperRef.value
-    flipperCON?.flipDown(COUNT, COUNT - 1)
+    console.log(flipperCON)
+    flipperCON?.flip(COUNT, COUNT - 1)
+    console.log('onMounted:window.setInterval', COUNT)
   }, 1000)
 })
 onUnmounted(() => {

From 77a763db75c1217bb90b30f1f5254f65ca480de0 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Fri, 30 Sep 2022 01:29:48 +0800
Subject: [PATCH 26/56] =?UTF-8?q?chore:=20=E5=9F=BA=E6=9C=AC=E5=AE=8C?=
 =?UTF-8?q?=E6=88=90=E7=BF=BB=E7=89=8C=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/Flipper/index.vue              | 35 ++++------
 .../Decorates/Mores/CountDown/config.ts       |  4 +-
 .../Decorates/Mores/CountDown/config.vue      |  9 +++
 .../Decorates/Mores/CountDown/index.vue       | 69 +++++++++----------
 4 files changed, 60 insertions(+), 57 deletions(-)

diff --git a/src/components/Flipper/index.vue b/src/components/Flipper/index.vue
index fcee3cdd..b71a08a1 100644
--- a/src/components/Flipper/index.vue
+++ b/src/components/Flipper/index.vue
@@ -1,26 +1,28 @@
 <template>
   <div class="M-Flipper" :class="[flipType, { go: isFlipping }]">
-    <div class="digital front" :data-front="frontTextFromData || 0"></div>
-    <div class="digital back" :data-back="backTextFromData || 0"></div>
+    <div class="digital front" :data-front="frontTextFromData"></div>
+    <div class="digital back" :data-back="backTextFromData"></div>
   </div>
 </template>
 
+<script lang="ts">
+export default {
+  name: 'Flipper'
+}
+</script>
+
 <script lang="ts" setup>
 import { ref, PropType, watch } from 'vue'
 type FlipType = 'up' | 'down'
 
 const props = defineProps({
   flipType: {
-    type: Object as PropType<FlipType>,
+    type: String as PropType<FlipType>,
     default: () => {
       return 'down'
     }
   },
-  frontText: {
-    type: [Number, String],
-    default: 0
-  },
-  backText: {
+  count: {
     type: [Number, String],
     default: 0
   },
@@ -51,13 +53,11 @@ const props = defineProps({
 })
 
 const isFlipping = ref(false)
-const frontTextFromData = ref(props.frontText)
-const backTextFromData = ref(props.backText)
+const frontTextFromData = ref(props.count || 0)
+const backTextFromData = ref(props.count || 0)
 
 // 翻牌
 const flip = (front: string | number, back: string | number) => {
-  if (!back) back = +front - 1
-  console.log('flip:', { front, back })
   // 如果处于翻转中,则不执行
   if (isFlipping.value) return
   // 设置翻盘前后数据
@@ -75,19 +75,14 @@ const flip = (front: string | number, back: string | number) => {
 }
 
 watch(
-  () => props.backText,
+  () => props.count,
   (newVal, oldVal) => {
-    console.log('watch:props.backText', newVal)
-    flip(newVal, oldVal as string | number)
+    flip(oldVal as string | number, newVal as string | number)
   },
   {
     immediate: true
   }
 )
-
-defineExpose({
-  flip
-})
 </script>
 
 <style lang="scss" scoped>
@@ -171,7 +166,7 @@ $lineColor: #ffffff;
     top: 0;
     bottom: 50%;
     border-radius: $radius $radius 0 0;
-    border-bottom: solid 1px rgba($color: $lineColor, $alpha: 0.5); // 中间线颜色
+    border-bottom: solid 1px rgba($color: $lineColor, $alpha: 0.3); // 中间线颜色
   }
   .digital:after {
     top: 50%;
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.ts b/src/packages/components/Decorates/Mores/CountDown/config.ts
index 94b2e383..f7904e4b 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.ts
+++ b/src/packages/components/Decorates/Mores/CountDown/config.ts
@@ -15,12 +15,14 @@ export const FontWeightObject = {
 }
 
 export const option = {
+  dataset: 203234,
+  flipperLength: 6,
   flipperBgColor: '#ee6600FF',
   flipperTextColor: '#FFFFFFFF',
   flipperWidth: 60,
   flipperHeight: 100,
   flipperRadius: 10,
-  flipperSpeed: 600
+  flipperSpeed: 450
 }
 
 export default class Config extends PublicConfigClass implements CreateComponentType {
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.vue b/src/packages/components/Decorates/Mores/CountDown/config.vue
index bd8efe1c..5ae92508 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/config.vue
@@ -1,5 +1,14 @@
 <template>
   <collapse-item name="翻牌" :expanded="true">
+    <setting-item-box name="内容">
+      <setting-item name="初始值">
+        <n-input-number v-model:value="optionData.dataset" size="small" :min="0"></n-input-number>
+      </setting-item>
+      <setting-item name="个数">
+        <n-input-number v-model:value="optionData.flipperLength" size="small" :min="1"></n-input-number>
+      </setting-item>
+    </setting-item-box>
+
     <setting-item-box name="尺寸">
       <setting-item name="宽度">
         <n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.vue b/src/packages/components/Decorates/Mores/CountDown/index.vue
index e98c5bf4..415bb3bf 100644
--- a/src/packages/components/Decorates/Mores/CountDown/index.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/index.vue
@@ -1,25 +1,25 @@
 <template>
   <div class="go-decorates-more-countdown">
-    <n-countdown :duration="50000" :active="true" />
+    <!-- <n-countdown :duration="50000" :active="true" /> -->
     <n-space :gap="10">
       <flipper
         flip-type="down"
-        :front-text="0"
-        :back-text="COUNT"
+        :count="item"
         :width="flipperWidth"
         :height="flipperHeight"
         :front-color="flipperTextColor"
         :back-color="flipperBgColor"
         :radius="flipperRadius"
         :duration="flipperSpeed"
-        ref="flipperRef"
+        v-for="(item, index) in flipperData"
+        :key="index"
       />
     </n-space>
   </div>
 </template>
 
 <script setup lang="ts">
-import { PropType, toRefs, ref, watch, onMounted, onUnmounted } from 'vue'
+import { PropType, toRefs, watch, computed } from 'vue'
 import { CreateComponentType } from '@/packages/index.d'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { useChartDataFetch } from '@/hooks'
@@ -31,49 +31,47 @@ const props = defineProps({
     required: true
   }
 })
-let boxShadow = ref('none')
 
 const { w, h } = toRefs(props.chartConfig.attr)
 
-let { flipperBgColor, flipperTextColor, flipperWidth, flipperHeight, flipperRadius, flipperSpeed } = toRefs(
-  props.chartConfig.option
-)
+const {
+  dataset,
+  flipperLength,
+  flipperBgColor,
+  flipperTextColor,
+  flipperWidth,
+  flipperHeight,
+  flipperRadius,
+  flipperSpeed
+} = toRefs(props.chartConfig.option)
+
+const updateDatasetHandler = (newVal: number) => {
+  let datasetVal = dataset?.value as Number
+  datasetVal !== undefined && (datasetVal = newVal)
+}
 
 watch(
-  props.chartConfig.option,
-  () => {
-    if (props.chartConfig.option.showShadow) {
-      boxShadow.value = `${props.chartConfig.option.hShadow}px ${props.chartConfig.option.vShadow}px ${props.chartConfig.option.blurShadow}px ${props.chartConfig.option.colorShadow}`
-    } else {
-      boxShadow.value = 'none'
-    }
+  props.chartConfig.option.dataset,
+  (newVal: number) => {
+    updateDatasetHandler(newVal)
   },
   {
     immediate: true
   }
 )
 
-const flipperRef = ref(null)
+const flipperData = computed(() => {
+  const datasetVal: Number = dataset?.value || 0
+  return datasetVal
+    .toString()
+    .padStart(flipperLength.value, '0')
+    .split('')
+    .slice(flipperLength.value * -1)
+})
 
-let COUNT = 9
-let interval = 0
-onMounted(() => {
-  const interval = window.setInterval(() => {
-    if (COUNT <= 1) {
-      window.clearInterval(interval)
-      return
-    }
-    COUNT--
-    const flipperCON: any = flipperRef.value
-    console.log(flipperCON)
-    flipperCON?.flip(COUNT, COUNT - 1)
-    console.log('onMounted:window.setInterval', COUNT)
-  }, 1000)
+useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: number) => {
+  updateDatasetHandler(newVal)
 })
-onUnmounted(() => {
-  window.clearInterval(interval)
-})
-useChartDataFetch(props.chartConfig, useChartEditStore)
 </script>
 
 <style lang="scss" scoped>
@@ -81,7 +79,6 @@ useChartDataFetch(props.chartConfig, useChartEditStore)
   width: v-bind('`${w}px`');
   height: v-bind('`${h}px`');
   display: flex;
-  flex-direction: column;
   align-items: center;
   justify-content: center;
 }

From 872382b4a3d434f298e821887bad1364831df076 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Fri, 30 Sep 2022 09:22:56 +0800
Subject: [PATCH 27/56] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E6=95=B0?=
 =?UTF-8?q?=E5=AD=97=E7=BF=BB=E7=89=8C=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/Flipper/index.ts               |  3 +-
 src/components/Flipper/index.vue              |  2 +-
 .../Decorates/Mores/CountDown/config.ts       | 26 +++---
 .../Decorates/Mores/CountDown/config.vue      | 38 ++++++---
 .../Decorates/Mores/CountDown/index.vue       | 78 +++++++++---------
 .../Decorates/Mores/FlipperNumber/config.ts   | 39 +++++++++
 .../Decorates/Mores/FlipperNumber/config.vue  | 72 +++++++++++++++++
 .../Decorates/Mores/FlipperNumber/index.ts    | 14 ++++
 .../Decorates/Mores/FlipperNumber/index.vue   | 81 +++++++++++++++++++
 .../components/Decorates/Mores/index.ts       |  3 +-
 10 files changed, 292 insertions(+), 64 deletions(-)
 create mode 100644 src/packages/components/Decorates/Mores/FlipperNumber/config.ts
 create mode 100644 src/packages/components/Decorates/Mores/FlipperNumber/config.vue
 create mode 100644 src/packages/components/Decorates/Mores/FlipperNumber/index.ts
 create mode 100644 src/packages/components/Decorates/Mores/FlipperNumber/index.vue

diff --git a/src/components/Flipper/index.ts b/src/components/Flipper/index.ts
index bf785165..fc3da216 100644
--- a/src/components/Flipper/index.ts
+++ b/src/components/Flipper/index.ts
@@ -1,3 +1,4 @@
 import Flipper from './index.vue'
+type FlipType = 'up' | 'down'
 
-export { Flipper }
+export { Flipper, FlipType }
diff --git a/src/components/Flipper/index.vue b/src/components/Flipper/index.vue
index b71a08a1..72807c5e 100644
--- a/src/components/Flipper/index.vue
+++ b/src/components/Flipper/index.vue
@@ -13,7 +13,7 @@ export default {
 
 <script lang="ts" setup>
 import { ref, PropType, watch } from 'vue'
-type FlipType = 'up' | 'down'
+import { FlipType } from '.'
 
 const props = defineProps({
   flipType: {
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.ts b/src/packages/components/Decorates/Mores/CountDown/config.ts
index f7904e4b..5440a13a 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.ts
+++ b/src/packages/components/Decorates/Mores/CountDown/config.ts
@@ -3,25 +3,31 @@ import { CreateComponentType } from '@/packages/index.d'
 import { CountDownConfig } from './index'
 import cloneDeep from 'lodash/cloneDeep'
 import { chartInitConfig } from '@/settings/designSetting'
+import { FlipType } from '@/components/Flipper'
 
-export enum FontWeightEnum {
-  NORMAL = '常规',
-  BOLD = '加粗'
+export interface OptionType {
+  dataset: number | string
+  flipperLength: number
+  flipperBgColor: string
+  flipperTextColor: string
+  flipperWidth: number
+  flipperHeight: number
+  flipperRadius: number
+  flipperGap: number
+  flipperType: FlipType
+  flipperSpeed: number
 }
 
-export const FontWeightObject = {
-  [FontWeightEnum.NORMAL]: 'normal',
-  [FontWeightEnum.BOLD]: 'bold'
-}
-
-export const option = {
+export const option: OptionType = {
   dataset: 203234,
   flipperLength: 6,
-  flipperBgColor: '#ee6600FF',
+  flipperBgColor: '#ee6600',
   flipperTextColor: '#FFFFFFFF',
   flipperWidth: 60,
   flipperHeight: 100,
   flipperRadius: 10,
+  flipperGap: 10,
+  flipperType: 'down',
   flipperSpeed: 450
 }
 
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.vue b/src/packages/components/Decorates/Mores/CountDown/config.vue
index 5ae92508..a7478250 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/config.vue
@@ -9,24 +9,42 @@
       </setting-item>
     </setting-item-box>
 
-    <setting-item-box name="尺寸">
+    <setting-item-box name="样式">
       <setting-item name="宽度">
         <n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
       </setting-item>
       <setting-item name="高度">
         <n-input-number v-model:value="optionData.flipperHeight" size="small" :min="1"></n-input-number>
       </setting-item>
-    </setting-item-box>
-
-    <setting-item-box name="样式">
+      <setting-item name="间隔">
+        <n-input-number v-model:value="optionData.flipperGap" size="small" :min="0"></n-input-number>
+      </setting-item>
+      <setting-item name="圆角">
+        <n-input-number v-model:value="optionData.flipperRadius" size="small" :min="0"></n-input-number>
+      </setting-item>
       <setting-item name="背景色">
-        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperBgColor"></n-color-picker>
+        <n-color-picker
+          size="small"
+          :show-alpha="false"
+          :modes="['hex']"
+          v-model:value="optionData.flipperBgColor"
+        ></n-color-picker>
       </setting-item>
       <setting-item name="字体色">
         <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
       </setting-item>
-      <setting-item name="圆角">
-        <n-input-number v-model:value="optionData.flipperRadius" size="small" :min="0"></n-input-number>
+    </setting-item-box>
+
+    <setting-item-box name="行为">
+      <setting-item name="动画">
+        <n-select
+          v-model:value="optionData.flipperType"
+          size="small"
+          :options="[
+            { label: '下翻', value: 'down' },
+            { label: '上翻', value: 'up' }
+          ]"
+        ></n-select>
       </setting-item>
       <setting-item name="翻牌速度">
         <n-input-number
@@ -43,11 +61,11 @@
 <script setup lang="ts">
 import { PropType } from 'vue'
 import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
-import { option } from './config'
+import { OptionType } from './config'
 
-const props = defineProps({
+defineProps({
   optionData: {
-    type: Object as PropType<typeof option>,
+    type: Object as PropType<OptionType>,
     required: true
   }
 })
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.vue b/src/packages/components/Decorates/Mores/CountDown/index.vue
index 415bb3bf..34a6defa 100644
--- a/src/packages/components/Decorates/Mores/CountDown/index.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/index.vue
@@ -1,29 +1,28 @@
 <template>
-  <div class="go-decorates-more-countdown">
-    <!-- <n-countdown :duration="50000" :active="true" /> -->
-    <n-space :gap="10">
-      <flipper
-        flip-type="down"
-        :count="item"
-        :width="flipperWidth"
-        :height="flipperHeight"
-        :front-color="flipperTextColor"
-        :back-color="flipperBgColor"
-        :radius="flipperRadius"
-        :duration="flipperSpeed"
-        v-for="(item, index) in flipperData"
-        :key="index"
-      />
-    </n-space>
-  </div>
+  <!-- <n-countdown :duration="50000" :active="true" /> -->
+  <n-space class="go-decorates-more-countdown" :size="flipperGap" align="center" justify="center">
+    <flipper
+      :count="item"
+      :width="flipperWidth"
+      :height="flipperHeight"
+      :front-color="flipperTextColor"
+      :back-color="flipperBgColor"
+      :radius="flipperRadius"
+      :flip-type="flipperType"
+      :duration="flipperSpeed"
+      v-for="(item, index) in flipperData"
+      :key="index"
+    />
+  </n-space>
 </template>
 
 <script setup lang="ts">
-import { PropType, toRefs, watch, computed } from 'vue'
+import { PropType, toRefs, watch, ref } from 'vue'
 import { CreateComponentType } from '@/packages/index.d'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { useChartDataFetch } from '@/hooks'
-import { Flipper } from '@/components/Flipper/index'
+import { Flipper } from '@/components/Flipper'
+import { OptionType } from './config'
 
 const props = defineProps({
   chartConfig: {
@@ -35,41 +34,41 @@ const props = defineProps({
 const { w, h } = toRefs(props.chartConfig.attr)
 
 const {
-  dataset,
   flipperLength,
   flipperBgColor,
   flipperTextColor,
   flipperWidth,
   flipperHeight,
   flipperRadius,
+  flipperGap,
+  flipperType,
   flipperSpeed
-} = toRefs(props.chartConfig.option)
+} = toRefs(props.chartConfig.option as OptionType)
 
-const updateDatasetHandler = (newVal: number) => {
-  let datasetVal = dataset?.value as Number
-  datasetVal !== undefined && (datasetVal = newVal)
+const flipperData = ref<string[] | number[]>([])
+const getFlipperData = (val: string | number) => {
+  return val
+    .toString()
+    .padStart(flipperLength.value, '0') // 左侧填充|右对齐
+    .split('') // 转数组
+    .slice(flipperLength.value * -1) // 从右向左取
+}
+const updateDatasetHandler = (newVal: string | number) => {
+  flipperData.value = getFlipperData(newVal)
 }
 
 watch(
-  props.chartConfig.option.dataset,
-  (newVal: number) => {
-    updateDatasetHandler(newVal)
+  () => props.chartConfig.option,
+  newVal => {
+    updateDatasetHandler((newVal as OptionType).dataset)
   },
   {
-    immediate: true
+    immediate: true,
+    deep: true
   }
 )
 
-const flipperData = computed(() => {
-  const datasetVal: Number = dataset?.value || 0
-  return datasetVal
-    .toString()
-    .padStart(flipperLength.value, '0')
-    .split('')
-    .slice(flipperLength.value * -1)
-})
-
-useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: number) => {
+useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: string | number) => {
   updateDatasetHandler(newVal)
 })
 </script>
@@ -78,8 +77,5 @@ useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: number) => {
 @include go('decorates-more-countdown') {
   width: v-bind('`${w}px`');
   height: v-bind('`${h}px`');
-  display: flex;
-  align-items: center;
-  justify-content: center;
 }
 </style>
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/config.ts b/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
new file mode 100644
index 00000000..347e3681
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
@@ -0,0 +1,39 @@
+import { PublicConfigClass } from '@/packages/public'
+import { CreateComponentType } from '@/packages/index.d'
+import { FlipperNumberConfig } from './index'
+import cloneDeep from 'lodash/cloneDeep'
+import { chartInitConfig } from '@/settings/designSetting'
+import { FlipType } from '@/components/Flipper'
+
+export interface OptionType {
+  dataset: number | string
+  flipperLength: number
+  flipperBgColor: string
+  flipperTextColor: string
+  flipperWidth: number
+  flipperHeight: number
+  flipperRadius: number
+  flipperGap: number
+  flipperType: FlipType
+  flipperSpeed: number
+}
+
+export const option: OptionType = {
+  dataset: 203234,
+  flipperLength: 6,
+  flipperBgColor: '#253E4E',
+  flipperTextColor: '#7CFFB2FF',
+  flipperWidth: 60,
+  flipperHeight: 100,
+  flipperRadius: 10,
+  flipperGap: 10,
+  flipperType: 'down',
+  flipperSpeed: 450
+}
+
+export default class Config extends PublicConfigClass implements CreateComponentType {
+  public key = FlipperNumberConfig.key
+  public attr = { ...chartInitConfig, w: 500, h: 200, zIndex: -1 }
+  public chartConfig = cloneDeep(FlipperNumberConfig)
+  public option = cloneDeep(option)
+}
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/config.vue b/src/packages/components/Decorates/Mores/FlipperNumber/config.vue
new file mode 100644
index 00000000..a7478250
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/config.vue
@@ -0,0 +1,72 @@
+<template>
+  <collapse-item name="翻牌" :expanded="true">
+    <setting-item-box name="内容">
+      <setting-item name="初始值">
+        <n-input-number v-model:value="optionData.dataset" size="small" :min="0"></n-input-number>
+      </setting-item>
+      <setting-item name="个数">
+        <n-input-number v-model:value="optionData.flipperLength" size="small" :min="1"></n-input-number>
+      </setting-item>
+    </setting-item-box>
+
+    <setting-item-box name="样式">
+      <setting-item name="宽度">
+        <n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
+      </setting-item>
+      <setting-item name="高度">
+        <n-input-number v-model:value="optionData.flipperHeight" size="small" :min="1"></n-input-number>
+      </setting-item>
+      <setting-item name="间隔">
+        <n-input-number v-model:value="optionData.flipperGap" size="small" :min="0"></n-input-number>
+      </setting-item>
+      <setting-item name="圆角">
+        <n-input-number v-model:value="optionData.flipperRadius" size="small" :min="0"></n-input-number>
+      </setting-item>
+      <setting-item name="背景色">
+        <n-color-picker
+          size="small"
+          :show-alpha="false"
+          :modes="['hex']"
+          v-model:value="optionData.flipperBgColor"
+        ></n-color-picker>
+      </setting-item>
+      <setting-item name="字体色">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
+      </setting-item>
+    </setting-item-box>
+
+    <setting-item-box name="行为">
+      <setting-item name="动画">
+        <n-select
+          v-model:value="optionData.flipperType"
+          size="small"
+          :options="[
+            { label: '下翻', value: 'down' },
+            { label: '上翻', value: 'up' }
+          ]"
+        ></n-select>
+      </setting-item>
+      <setting-item name="翻牌速度">
+        <n-input-number
+          v-model:value="optionData.flipperSpeed"
+          size="small"
+          :min="100"
+          :max="900"
+          :step="100"
+        ></n-input-number>
+      </setting-item>
+    </setting-item-box>
+  </collapse-item>
+</template>
+<script setup lang="ts">
+import { PropType } from 'vue'
+import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
+import { OptionType } from './config'
+
+defineProps({
+  optionData: {
+    type: Object as PropType<OptionType>,
+    required: true
+  }
+})
+</script>
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/index.ts b/src/packages/components/Decorates/Mores/FlipperNumber/index.ts
new file mode 100644
index 00000000..2e3d883b
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/index.ts
@@ -0,0 +1,14 @@
+import image from '@/assets/images/chart/decorates/time.png'
+import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
+import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
+
+export const FlipperNumberConfig: ConfigType = {
+  key: 'FlipperNumber',
+  chartKey: 'VFlipperNumber',
+  conKey: 'VCFlipperNumber',
+  title: '数字翻牌2',
+  category: ChatCategoryEnum.MORE,
+  categoryName: ChatCategoryEnumName.MORE,
+  package: PackagesCategoryEnum.DECORATES,
+  image
+}
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/index.vue b/src/packages/components/Decorates/Mores/FlipperNumber/index.vue
new file mode 100644
index 00000000..34a6defa
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/index.vue
@@ -0,0 +1,81 @@
+<template>
+  <!-- <n-countdown :duration="50000" :active="true" /> -->
+  <n-space class="go-decorates-more-countdown" :size="flipperGap" align="center" justify="center">
+    <flipper
+      :count="item"
+      :width="flipperWidth"
+      :height="flipperHeight"
+      :front-color="flipperTextColor"
+      :back-color="flipperBgColor"
+      :radius="flipperRadius"
+      :flip-type="flipperType"
+      :duration="flipperSpeed"
+      v-for="(item, index) in flipperData"
+      :key="index"
+    />
+  </n-space>
+</template>
+
+<script setup lang="ts">
+import { PropType, toRefs, watch, ref } from 'vue'
+import { CreateComponentType } from '@/packages/index.d'
+import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
+import { useChartDataFetch } from '@/hooks'
+import { Flipper } from '@/components/Flipper'
+import { OptionType } from './config'
+
+const props = defineProps({
+  chartConfig: {
+    type: Object as PropType<CreateComponentType>,
+    required: true
+  }
+})
+
+const { w, h } = toRefs(props.chartConfig.attr)
+
+const {
+  flipperLength,
+  flipperBgColor,
+  flipperTextColor,
+  flipperWidth,
+  flipperHeight,
+  flipperRadius,
+  flipperGap,
+  flipperType,
+  flipperSpeed
+} = toRefs(props.chartConfig.option as OptionType)
+
+const flipperData = ref<string[] | number[]>([])
+const getFlipperData = (val: string | number) => {
+  return val
+    .toString()
+    .padStart(flipperLength.value, '0') // 左侧填充|右对齐
+    .split('') // 转数组
+    .slice(flipperLength.value * -1) // 从右向左取
+}
+const updateDatasetHandler = (newVal: string | number) => {
+  flipperData.value = getFlipperData(newVal)
+}
+
+watch(
+  () => props.chartConfig.option,
+  newVal => {
+    updateDatasetHandler((newVal as OptionType).dataset)
+  },
+  {
+    immediate: true,
+    deep: true
+  }
+)
+
+useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: string | number) => {
+  updateDatasetHandler(newVal)
+})
+</script>
+
+<style lang="scss" scoped>
+@include go('decorates-more-countdown') {
+  width: v-bind('`${w}px`');
+  height: v-bind('`${h}px`');
+}
+</style>
diff --git a/src/packages/components/Decorates/Mores/index.ts b/src/packages/components/Decorates/Mores/index.ts
index bc6a3849..855f6e27 100644
--- a/src/packages/components/Decorates/Mores/index.ts
+++ b/src/packages/components/Decorates/Mores/index.ts
@@ -2,5 +2,6 @@ import { NumberConfig } from './Number/index'
 import { TimeCommonConfig } from './TimeCommon/index'
 import { ClockConfig } from './Clock/index'
 import { CountDownConfig } from './CountDown/index'
+import { FlipperNumberConfig } from './FlipperNumber'
 
-export default [TimeCommonConfig, CountDownConfig, NumberConfig, ClockConfig]
+export default [NumberConfig, FlipperNumberConfig, TimeCommonConfig, CountDownConfig, ClockConfig]

From 4048d4a418d2d2e1616230a6f80a391a47609479 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Fri, 30 Sep 2022 11:39:41 +0800
Subject: [PATCH 28/56] =?UTF-8?q?feat:=20=E5=8A=A0=E5=85=A5=E7=BC=A9?=
 =?UTF-8?q?=E7=95=A5=E5=9B=BE=EF=BC=8C=E5=AE=8C=E6=88=90=E5=80=92=E8=AE=A1?=
 =?UTF-8?q?=E6=97=B6=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../images/chart/decorates/countdown.png      | Bin 0 -> 18163 bytes
 .../images/chart/decorates/flipper-number.png | Bin 0 -> 12441 bytes
 .../Decorates/Mores/CountDown/config.ts       |  20 ++-
 .../Decorates/Mores/CountDown/config.vue      |  37 ++++-
 .../Decorates/Mores/CountDown/index.ts        |   2 +-
 .../Decorates/Mores/CountDown/index.vue       | 136 +++++++++++++++---
 .../Decorates/Mores/FlipperNumber/config.ts   |   4 +-
 .../Decorates/Mores/FlipperNumber/config.vue  |   4 +-
 .../Decorates/Mores/FlipperNumber/index.ts    |   4 +-
 .../Decorates/Mores/Number/index.ts           |   4 +-
 10 files changed, 172 insertions(+), 39 deletions(-)
 create mode 100644 src/assets/images/chart/decorates/countdown.png
 create mode 100644 src/assets/images/chart/decorates/flipper-number.png

diff --git a/src/assets/images/chart/decorates/countdown.png b/src/assets/images/chart/decorates/countdown.png
new file mode 100644
index 0000000000000000000000000000000000000000..06d168117cb46d85ab9197f562a3230edfa64281
GIT binary patch
literal 18163
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

literal 0
HcmV?d00001

diff --git a/src/assets/images/chart/decorates/flipper-number.png b/src/assets/images/chart/decorates/flipper-number.png
new file mode 100644
index 0000000000000000000000000000000000000000..a02939f02a37913af9b7a86158ec591815ff8891
GIT binary patch
literal 12441
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
VwvJst{lWoIl2etfls5nTzW|4)_V)k)

literal 0
HcmV?d00001

diff --git a/src/packages/components/Decorates/Mores/CountDown/config.ts b/src/packages/components/Decorates/Mores/CountDown/config.ts
index 5440a13a..7131bcaf 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.ts
+++ b/src/packages/components/Decorates/Mores/CountDown/config.ts
@@ -5,8 +5,14 @@ import cloneDeep from 'lodash/cloneDeep'
 import { chartInitConfig } from '@/settings/designSetting'
 import { FlipType } from '@/components/Flipper'
 
+type STYLE = '时分秒' | '冒号'
+
 export interface OptionType {
-  dataset: number | string
+  dataset: number
+  fixedDate: boolean
+  endDate: number
+  style: STYLE
+  showDay: boolean
   flipperLength: number
   flipperBgColor: string
   flipperTextColor: string
@@ -19,10 +25,14 @@ export interface OptionType {
 }
 
 export const option: OptionType = {
-  dataset: 203234,
+  dataset: 10 * 60, // 10分钟
+  fixedDate: false,
+  endDate: new Date().getTime(), // 当前时间
+  style: '时分秒',
+  showDay: true,
   flipperLength: 6,
-  flipperBgColor: '#ee6600',
-  flipperTextColor: '#FFFFFFFF',
+  flipperBgColor: '#253E4E',
+  flipperTextColor: '#7CFFB2FF',
   flipperWidth: 60,
   flipperHeight: 100,
   flipperRadius: 10,
@@ -33,7 +43,7 @@ export const option: OptionType = {
 
 export default class Config extends PublicConfigClass implements CreateComponentType {
   public key = CountDownConfig.key
-  public attr = { ...chartInitConfig, w: 500, h: 200, zIndex: -1 }
+  public attr = { ...chartInitConfig, w: 950, h: 160, zIndex: -1 }
   public chartConfig = cloneDeep(CountDownConfig)
   public option = cloneDeep(option)
 }
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.vue b/src/packages/components/Decorates/Mores/CountDown/config.vue
index a7478250..00aae7df 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/config.vue
@@ -1,14 +1,24 @@
 <template>
-  <collapse-item name="翻牌" :expanded="true">
-    <setting-item-box name="内容">
-      <setting-item name="初始值">
-        <n-input-number v-model:value="optionData.dataset" size="small" :min="0"></n-input-number>
+  <collapse-item name="倒计时" :expanded="true">
+    <setting-item-box name="内容" alone>
+      <setting-item name="计时(秒)">
+        <n-input-number
+          v-model:value="optionData.dataset"
+          size="small"
+          :min="0"
+          :disabled="optionData.fixedDate"
+        ></n-input-number>
       </setting-item>
-      <setting-item name="个数">
-        <n-input-number v-model:value="optionData.flipperLength" size="small" :min="1"></n-input-number>
+      <setting-item name="结束日期">
+        <n-date-picker v-model:value="optionData.endDate" type="datetime" :disabled="!optionData.fixedDate" />
+      </setting-item>
+      <setting-item>
+        <n-checkbox v-model:checked="optionData.fixedDate" size="small">使用固定日期</n-checkbox>
       </setting-item>
     </setting-item-box>
+  </collapse-item>
 
+  <collapse-item name="翻牌" :expanded="true">
     <setting-item-box name="样式">
       <setting-item name="宽度">
         <n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
@@ -33,6 +43,19 @@
       <setting-item name="字体色">
         <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
       </setting-item>
+      <setting-item name="风格">
+        <n-select
+          v-model:value="optionData.style"
+          size="small"
+          :options="[
+            { label: '时分秒', value: '时分秒' },
+            { label: '冒号', value: '冒号' }
+          ]"
+        ></n-select>
+      </setting-item>
+      <setting-item>
+        <n-checkbox v-model:checked="optionData.showDay" size="small">显示天</n-checkbox>
+      </setting-item>
     </setting-item-box>
 
     <setting-item-box name="行为">
@@ -46,7 +69,7 @@
           ]"
         ></n-select>
       </setting-item>
-      <setting-item name="翻牌速度">
+      <setting-item name="翻牌速度(毫秒)">
         <n-input-number
           v-model:value="optionData.flipperSpeed"
           size="small"
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.ts b/src/packages/components/Decorates/Mores/CountDown/index.ts
index b745355c..6755fdda 100644
--- a/src/packages/components/Decorates/Mores/CountDown/index.ts
+++ b/src/packages/components/Decorates/Mores/CountDown/index.ts
@@ -1,4 +1,4 @@
-import image from '@/assets/images/chart/decorates/time.png'
+import image from '@/assets/images/chart/decorates/countdown.png'
 import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
 
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.vue b/src/packages/components/Decorates/Mores/CountDown/index.vue
index 34a6defa..ad24c6b3 100644
--- a/src/packages/components/Decorates/Mores/CountDown/index.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/index.vue
@@ -1,6 +1,29 @@
 <template>
-  <!-- <n-countdown :duration="50000" :active="true" /> -->
+  <n-countdown
+    ref="countdownRef"
+    :duration="totalDuration"
+    :render="renderCountdown"
+    :active="countdownActive"
+    v-show="false"
+  />
   <n-space class="go-decorates-more-countdown" :size="flipperGap" align="center" justify="center">
+    <template v-if="showDay">
+      <flipper
+        :count="item"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :flip-type="flipperType"
+        :duration="flipperSpeed"
+        v-for="(item, index) in daysFlipperData"
+        :key="index"
+        class="go-d-block"
+      />
+      <div v-if="style === '时分秒'">天</div>
+      <div v-else>:</div>
+    </template>
     <flipper
       :count="item"
       :width="flipperWidth"
@@ -10,19 +33,50 @@
       :radius="flipperRadius"
       :flip-type="flipperType"
       :duration="flipperSpeed"
-      v-for="(item, index) in flipperData"
+      v-for="(item, index) in hoursFlipperData"
       :key="index"
+      class="go-d-block"
     />
+    <div v-if="style === '时分秒'">时</div>
+    <div v-else>:</div>
+    <flipper
+      :count="item"
+      :width="flipperWidth"
+      :height="flipperHeight"
+      :front-color="flipperTextColor"
+      :back-color="flipperBgColor"
+      :radius="flipperRadius"
+      :flip-type="flipperType"
+      :duration="flipperSpeed"
+      v-for="(item, index) in minutesFlipperData"
+      :key="index"
+      class="go-d-block"
+    />
+    <div v-if="style === '时分秒'">分</div>
+    <div v-else>:</div>
+    <flipper
+      :count="item"
+      :width="flipperWidth"
+      :height="flipperHeight"
+      :front-color="flipperTextColor"
+      :back-color="flipperBgColor"
+      :radius="flipperRadius"
+      :flip-type="flipperType"
+      :duration="flipperSpeed"
+      v-for="(item, index) in secondsFlipperData"
+      :key="index"
+      class="go-d-block"
+    />
+    <div v-if="style === '时分秒'">秒</div>
   </n-space>
 </template>
 
 <script setup lang="ts">
-import { PropType, toRefs, watch, ref } from 'vue'
+import { PropType, toRefs, watch, ref, onMounted } from 'vue'
 import { CreateComponentType } from '@/packages/index.d'
-import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
-import { useChartDataFetch } from '@/hooks'
 import { Flipper } from '@/components/Flipper'
 import { OptionType } from './config'
+import { CountdownInst, CountdownProps } from 'naive-ui/es/countdown/src/Countdown'
 
 const props = defineProps({
   chartConfig: {
@@ -34,7 +88,11 @@ const props = defineProps({
 const { w, h } = toRefs(props.chartConfig.attr)
 
 const {
-  flipperLength,
+  dataset,
+  fixedDate,
+  endDate,
+  style,
+  showDay,
   flipperBgColor,
   flipperTextColor,
   flipperWidth,
@@ -45,31 +103,70 @@ const {
   flipperSpeed
 } = toRefs(props.chartConfig.option as OptionType)
 
-const flipperData = ref<string[] | number[]>([])
+const countdownRef = ref<CountdownInst | null>()
+const countdownActive = ref(false)
+
+const totalDuration = ref(dataset.value * 1000)
+const daysFlipperData = ref<string[] | number[]>([])
+const hoursFlipperData = ref<string[] | number[]>([])
+const minutesFlipperData = ref<string[] | number[]>([])
+const secondsFlipperData = ref<string[] | number[]>([])
 const getFlipperData = (val: string | number) => {
+  const len = Math.max(val.toString().length, 2)
   return val
     .toString()
-    .padStart(flipperLength.value, '0') // 左侧填充|右对齐
+    .padStart(len, '0') // 左侧填充|右对齐
     .split('') // 转数组
-    .slice(flipperLength.value * -1) // 从右向左取
 }
-const updateDatasetHandler = (newVal: string | number) => {
-  flipperData.value = getFlipperData(newVal)
+const updateDatasetHandler = (hours: number, minutes: number, seconds: number) => {
+  const days = Math.floor(hours / 24)
+  daysFlipperData.value = getFlipperData(days)
+  hoursFlipperData.value = getFlipperData(showDay.value ? hours % 24 : hours)
+  minutesFlipperData.value = getFlipperData(minutes)
+  secondsFlipperData.value = getFlipperData(seconds)
+}
+
+const renderCountdown: CountdownProps['render'] = ({ hours, minutes, seconds }) => {
+  updateDatasetHandler(hours, minutes, seconds)
+}
+
+const updateTotalDuration = () => {
+  countdownActive.value = false
+  totalDuration.value = fixedDate.value ? endDate.value - new Date().getTime() : dataset.value * 1000
+  countdownRef.value?.reset && countdownRef.value?.reset()
+  countdownActive.value = true
 }
 
 watch(
-  () => props.chartConfig.option,
-  newVal => {
-    updateDatasetHandler((newVal as OptionType).dataset)
+  () => props.chartConfig.option.dataset,
+  () => {
+    updateTotalDuration()
   },
   {
-    immediate: true,
-    deep: true
+    immediate: true
+  }
+)
+watch(
+  () => props.chartConfig.option.endDate,
+  () => {
+    updateTotalDuration()
+  },
+  {
+    immediate: true
+  }
+)
+watch(
+  () => props.chartConfig.option.fixedDate,
+  () => {
+    updateTotalDuration()
+  },
+  {
+    immediate: true
   }
 )
 
-useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: string | number) => {
-  updateDatasetHandler(newVal)
+onMounted(() => {
+  updateTotalDuration()
 })
 </script>
 
@@ -77,5 +174,8 @@ useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: string | number
 @include go('decorates-more-countdown') {
   width: v-bind('`${w}px`');
   height: v-bind('`${h}px`');
+  font-size: v-bind('`${flipperWidth}px`');
+  line-height: v-bind('`${flipperHeight}px`');
+  color: v-bind('flipperTextColor');
 }
 </style>
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/config.ts b/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
index 347e3681..ef074f7c 100644
--- a/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
@@ -19,7 +19,7 @@ export interface OptionType {
 }
 
 export const option: OptionType = {
-  dataset: 203234,
+  dataset: 3234,
   flipperLength: 6,
   flipperBgColor: '#253E4E',
   flipperTextColor: '#7CFFB2FF',
@@ -33,7 +33,7 @@ export const option: OptionType = {
 
 export default class Config extends PublicConfigClass implements CreateComponentType {
   public key = FlipperNumberConfig.key
-  public attr = { ...chartInitConfig, w: 500, h: 200, zIndex: -1 }
+  public attr = { ...chartInitConfig, w: 500, h: 160, zIndex: -1 }
   public chartConfig = cloneDeep(FlipperNumberConfig)
   public option = cloneDeep(option)
 }
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/config.vue b/src/packages/components/Decorates/Mores/FlipperNumber/config.vue
index a7478250..f2c65a96 100644
--- a/src/packages/components/Decorates/Mores/FlipperNumber/config.vue
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/config.vue
@@ -4,7 +4,7 @@
       <setting-item name="初始值">
         <n-input-number v-model:value="optionData.dataset" size="small" :min="0"></n-input-number>
       </setting-item>
-      <setting-item name="个数">
+      <setting-item name="翻牌个数">
         <n-input-number v-model:value="optionData.flipperLength" size="small" :min="1"></n-input-number>
       </setting-item>
     </setting-item-box>
@@ -46,7 +46,7 @@
           ]"
         ></n-select>
       </setting-item>
-      <setting-item name="翻牌速度">
+      <setting-item name="翻牌速度(毫秒)">
         <n-input-number
           v-model:value="optionData.flipperSpeed"
           size="small"
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/index.ts b/src/packages/components/Decorates/Mores/FlipperNumber/index.ts
index 2e3d883b..16aa2137 100644
--- a/src/packages/components/Decorates/Mores/FlipperNumber/index.ts
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/index.ts
@@ -1,4 +1,4 @@
-import image from '@/assets/images/chart/decorates/time.png'
+import image from '@/assets/images/chart/decorates/flipper-number.png'
 import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
 
@@ -6,7 +6,7 @@ export const FlipperNumberConfig: ConfigType = {
   key: 'FlipperNumber',
   chartKey: 'VFlipperNumber',
   conKey: 'VCFlipperNumber',
-  title: '数字翻牌2',
+  title: '数字翻牌',
   category: ChatCategoryEnum.MORE,
   categoryName: ChatCategoryEnumName.MORE,
   package: PackagesCategoryEnum.DECORATES,
diff --git a/src/packages/components/Decorates/Mores/Number/index.ts b/src/packages/components/Decorates/Mores/Number/index.ts
index 7a5d54fc..ff9a9469 100644
--- a/src/packages/components/Decorates/Mores/Number/index.ts
+++ b/src/packages/components/Decorates/Mores/Number/index.ts
@@ -1,12 +1,12 @@
 import image from '@/assets/images/chart/decorates/number.png'
 import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
-import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
+import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
 
 export const NumberConfig: ConfigType = {
   key: 'Number',
   chartKey: 'VNumber',
   conKey: 'VCNumber',
-  title: '数字翻牌',
+  title: '数字计数',
   category: ChatCategoryEnum.MORE,
   categoryName: ChatCategoryEnumName.MORE,
   package: PackagesCategoryEnum.DECORATES,

From 5220cae94a087be167f34b3445e81011e78b5b1a Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Fri, 30 Sep 2022 12:18:46 +0800
Subject: [PATCH 29/56] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=E8=B0=83?=
 =?UTF-8?q?=E6=95=B4=E5=B1=9E=E6=80=A7=E5=88=86=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Decorates/Mores/CountDown/config.vue      | 33 ++++++++++---------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/src/packages/components/Decorates/Mores/CountDown/config.vue b/src/packages/components/Decorates/Mores/CountDown/config.vue
index 00aae7df..43827977 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/config.vue
@@ -1,5 +1,5 @@
 <template>
-  <collapse-item name="倒计时" :expanded="true">
+  <collapse-item name="倒计时" expanded>
     <setting-item-box name="内容" alone>
       <setting-item name="计时(秒)">
         <n-input-number
@@ -16,9 +16,25 @@
         <n-checkbox v-model:checked="optionData.fixedDate" size="small">使用固定日期</n-checkbox>
       </setting-item>
     </setting-item-box>
+
+    <setting-item-box name="样式">
+      <setting-item name="风格">
+        <n-select
+          v-model:value="optionData.style"
+          size="small"
+          :options="[
+            { label: '时分秒', value: '时分秒' },
+            { label: '冒号', value: '冒号' }
+          ]"
+        ></n-select>
+      </setting-item>
+      <setting-item>
+        <n-checkbox v-model:checked="optionData.showDay" size="small">显示天</n-checkbox>
+      </setting-item>
+    </setting-item-box>
   </collapse-item>
 
-  <collapse-item name="翻牌" :expanded="true">
+  <collapse-item name="翻牌" expanded>
     <setting-item-box name="样式">
       <setting-item name="宽度">
         <n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
@@ -43,19 +59,6 @@
       <setting-item name="字体色">
         <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
       </setting-item>
-      <setting-item name="风格">
-        <n-select
-          v-model:value="optionData.style"
-          size="small"
-          :options="[
-            { label: '时分秒', value: '时分秒' },
-            { label: '冒号', value: '冒号' }
-          ]"
-        ></n-select>
-      </setting-item>
-      <setting-item>
-        <n-checkbox v-model:checked="optionData.showDay" size="small">显示天</n-checkbox>
-      </setting-item>
     </setting-item-box>
 
     <setting-item-box name="行为">

From f96a9c9d6f8c95c60564d0919b1b298427fbe1db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Fri, 30 Sep 2022 15:43:58 +0800
Subject: [PATCH 30/56] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E9=A5=BC?=
 =?UTF-8?q?=E5=9B=BE=E7=8E=AF=E5=BD=A2=E6=95=B0=E5=80=BC=E4=B8=8D=E5=87=BA?=
 =?UTF-8?q?=E7=8E=B0=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/packages/components/Charts/Pies/PieCircle/index.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/packages/components/Charts/Pies/PieCircle/index.vue b/src/packages/components/Charts/Pies/PieCircle/index.vue
index eb9c4ea9..61c50049 100644
--- a/src/packages/components/Charts/Pies/PieCircle/index.vue
+++ b/src/packages/components/Charts/Pies/PieCircle/index.vue
@@ -12,7 +12,7 @@ import { mergeTheme } from '@/packages/public/chart'
 import config, { includes } from './config'
 import { useChartDataFetch } from '@/hooks'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
-import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
+import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent, TitleComponent } from 'echarts/components'
 
 const props = defineProps({
   themeSetting: {
@@ -29,7 +29,7 @@ const props = defineProps({
   }
 })
 
-use([DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent])
+use([DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent, TitleComponent])
 
 const option = reactive({
   value: {}

From 96def0107d8e15b31ef68876ee10fe0abab942ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Fri, 30 Sep 2022 16:03:35 +0800
Subject: [PATCH 31/56] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E9=83=A8?=
 =?UTF-8?q?=E5=88=86=E7=BB=84=E4=BB=B6=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E?=
 =?UTF-8?q?=E9=94=99=E8=AF=AF=E6=95=B0=E6=8D=AE=EF=BC=8C=E9=A1=B5=E9=9D=A2?=
 =?UTF-8?q?=E4=BC=9A=E5=8D=A1=E6=AD=BB=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/api/axios.ts                                            | 1 -
 src/packages/components/Charts/Bars/BarCommon/index.vue     | 6 ++++--
 src/packages/components/Charts/Bars/BarCrossrange/index.vue | 4 +++-
 src/packages/components/Charts/Lines/LineCommon/index.vue   | 4 +++-
 src/packages/components/Charts/Mores/TreeMap/index.vue      | 3 ++-
 src/packages/components/Charts/Mores/WaterPolo/index.vue    | 3 ++-
 src/packages/components/Charts/Pies/PieCommon/index.vue     | 2 +-
 .../components/Charts/Scatters/ScatterCommon/index.vue      | 3 ++-
 8 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/api/axios.ts b/src/api/axios.ts
index c913ea09..9833998f 100644
--- a/src/api/axios.ts
+++ b/src/api/axios.ts
@@ -27,7 +27,6 @@ axiosInstance.interceptors.response.use(
     return Promise.resolve(res.data)
   },
   (err: AxiosResponse) => {
-    window['$message'].error('接口异常,请检查!')
     Promise.reject(err)
   }
 )
diff --git a/src/packages/components/Charts/Bars/BarCommon/index.vue b/src/packages/components/Charts/Bars/BarCommon/index.vue
index b186a6d1..54aaa27b 100644
--- a/src/packages/components/Charts/Bars/BarCommon/index.vue
+++ b/src/packages/components/Charts/Bars/BarCommon/index.vue
@@ -24,6 +24,7 @@ import { CreateComponentType } from '@/packages/index.d'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { isPreview } from '@/utils'
 import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
+import isObject from 'lodash/isObject'
 
 const props = defineProps({
   themeSetting: {
@@ -51,8 +52,9 @@ const option = computed(() => {
 // dataset 无法变更条数的补丁
 watch(
   () => props.chartConfig.option.dataset,
-  (newData, oldData) => {
-    if (newData.dimensions.length !== oldData.dimensions.length) {
+  (newData: { dimensions: any }, oldData) => {
+    if (!isObject(newData) || !('dimensions' in newData)) return
+    if (newData?.dimensions.length !== oldData?.dimensions.length) {
       const seriesArr = []
       for (let i = 0; i < newData.dimensions.length - 1; i++) {
         seriesArr.push(seriesItem)
diff --git a/src/packages/components/Charts/Bars/BarCrossrange/index.vue b/src/packages/components/Charts/Bars/BarCrossrange/index.vue
index 5e928ee0..d42ce328 100644
--- a/src/packages/components/Charts/Bars/BarCrossrange/index.vue
+++ b/src/packages/components/Charts/Bars/BarCrossrange/index.vue
@@ -23,6 +23,7 @@ import { useChartDataFetch } from '@/hooks'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { isPreview } from '@/utils'
 import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
+import isObject from 'lodash/isObject'
 
 const props = defineProps({
   themeSetting: {
@@ -50,7 +51,8 @@ const option = computed(() => {
 // dataset 无法变更条数的补丁
 watch(
   () => props.chartConfig.option.dataset,
-  (newData, oldData) => {
+  (newData: { dimensions: any }, oldData) => {
+    if (!isObject(newData) || !('dimensions' in newData)) return
     if (newData?.dimensions.length !== oldData?.dimensions.length) {
       const seriesArr = []
       for (let i = 0; i < newData.dimensions.length - 1; i++) {
diff --git a/src/packages/components/Charts/Lines/LineCommon/index.vue b/src/packages/components/Charts/Lines/LineCommon/index.vue
index 4af2be19..8a5c4f44 100644
--- a/src/packages/components/Charts/Lines/LineCommon/index.vue
+++ b/src/packages/components/Charts/Lines/LineCommon/index.vue
@@ -24,6 +24,7 @@ import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore
 import { useChartDataFetch } from '@/hooks'
 import { isPreview } from '@/utils'
 import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
+import isObject from 'lodash/isObject'
 
 const props = defineProps({
   themeSetting: {
@@ -51,7 +52,8 @@ const option = computed(() => {
 // dataset 无法变更条数的补丁
 watch(
   () => props.chartConfig.option.dataset,
-  (newData, oldData) => {
+  (newData: { dimensions: any }, oldData) => {
+    if (!isObject(newData) || !('dimensions' in newData)) return
     if (newData?.dimensions.length !== oldData?.dimensions.length) {
       const seriesArr = []
       for (let i = 0; i < newData.dimensions.length - 1; i++) {
diff --git a/src/packages/components/Charts/Mores/TreeMap/index.vue b/src/packages/components/Charts/Mores/TreeMap/index.vue
index de2516ea..1e0801ee 100644
--- a/src/packages/components/Charts/Mores/TreeMap/index.vue
+++ b/src/packages/components/Charts/Mores/TreeMap/index.vue
@@ -14,7 +14,7 @@ import { mergeTheme } from '@/packages/public/chart'
 import { useChartDataFetch } from '@/hooks'
 import { CreateComponentType } from '@/packages/index.d'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
-import { isPreview } from '@/utils'
+import { isPreview, isArray } from '@/utils'
 
 const props = defineProps({
   themeSetting: {
@@ -49,6 +49,7 @@ const dataSetHandle = (dataset: typeof dataJson) => {
 watch(
   () => props.chartConfig.option.dataset,
   newData => {
+    if(!isArray(newData)) return
     dataSetHandle(newData)
   },
   {
diff --git a/src/packages/components/Charts/Mores/WaterPolo/index.vue b/src/packages/components/Charts/Mores/WaterPolo/index.vue
index 14112d94..30038f01 100644
--- a/src/packages/components/Charts/Mores/WaterPolo/index.vue
+++ b/src/packages/components/Charts/Mores/WaterPolo/index.vue
@@ -10,7 +10,7 @@ import 'echarts-liquidfill/src/liquidFill.js'
 import { CanvasRenderer } from 'echarts/renderers'
 import { GridComponent } from 'echarts/components'
 import config from './config'
-import { isPreview, isString } from '@/utils'
+import { isPreview, isString, isNumber } from '@/utils'
 import { chartColorsSearch, defaultTheme } from '@/settings/chartThemes/index'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { useChartDataFetch } from '@/hooks'
@@ -75,6 +75,7 @@ const dataHandle = (newData: number | string) => {
 watch(
   () => props.chartConfig.option.dataset,
   newData => {
+    if(!isString(newData) && !isNumber(newData)) return
     props.chartConfig.option.series[0].data = [dataHandle(newData)]
     option.value = props.chartConfig.option
   },
diff --git a/src/packages/components/Charts/Pies/PieCommon/index.vue b/src/packages/components/Charts/Pies/PieCommon/index.vue
index 3f47c66a..e8f2c68a 100644
--- a/src/packages/components/Charts/Pies/PieCommon/index.vue
+++ b/src/packages/components/Charts/Pies/PieCommon/index.vue
@@ -50,7 +50,7 @@ watch(
       props.chartConfig.option.series[0].roseType = true
     }
   },
-  { deep: true, immediate: true }
+  { deep: false, immediate: true }
 )
 
 const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore)
diff --git a/src/packages/components/Charts/Scatters/ScatterCommon/index.vue b/src/packages/components/Charts/Scatters/ScatterCommon/index.vue
index a68c0911..945df53d 100644
--- a/src/packages/components/Charts/Scatters/ScatterCommon/index.vue
+++ b/src/packages/components/Charts/Scatters/ScatterCommon/index.vue
@@ -20,7 +20,7 @@ import config, { includes, seriesItem } from './config'
 import { mergeTheme } from '@/packages/public/chart'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { useChartDataFetch } from '@/hooks'
-import { isPreview } from '@/utils'
+import { isPreview, isArray } from '@/utils'
 import {
   DatasetComponent,
   GridComponent,
@@ -69,6 +69,7 @@ const option = computed(() => {
 watch(
   () => props.chartConfig.option.dataset,
   (newData, oldData) => {
+    if (!isArray(newData)) return
     if (newData?.length !== oldData?.length) {
       replaceMergeArr.value = ['series']
       // eslint-disable-next-line vue/no-mutating-props

From 3c802d44f420a105664c6b8cc687cd0a3b9b3810 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Fri, 30 Sep 2022 16:21:52 +0800
Subject: [PATCH 32/56] =?UTF-8?q?perf:=20=E6=97=A0=E6=95=B0=E6=8D=AE?=
 =?UTF-8?q?=E6=97=B6=E5=80=99=E7=9A=84=E7=A6=81=E6=AD=A2=E4=B8=8B=E8=BD=BD?=
 =?UTF-8?q?=E5=92=8C=E5=AF=BC=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ChartData/components/ChartDataMatchingAndShow/index.vue | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index.vue b/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index.vue
index afb4422e..8c36f1d8 100644
--- a/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index.vue
+++ b/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index.vue
@@ -41,7 +41,7 @@
             @before-upload="beforeUpload"
           >
             <n-space>
-              <n-button v-if="!ajax" class="sourceBtn-item">
+              <n-button v-if="!ajax" class="sourceBtn-item" :disabled="noData">
                 <template #icon>
                   <n-icon>
                     <document-add-icon />
@@ -52,7 +52,7 @@
             </n-space>
           </n-upload>
           <div>
-            <n-button class="sourceBtn-item" @click="download">
+            <n-button class="sourceBtn-item" :disabled="noData" @click="download">
               <template #icon>
                 <n-icon>
                   <document-download-icon />
@@ -111,6 +111,7 @@ const { DocumentAddIcon, DocumentDownloadIcon } = icon.carbon
 const source = ref()
 const dimensions = ref()
 const dimensionsAndSource = ref()
+const noData = ref(false)
 
 const { uploadFileListRef, customRequest, beforeUpload, download } = useFile(targetData)
 
@@ -180,6 +181,7 @@ watch(
       dimensionsAndSource.value = null
       source.value = newData
     } else {
+      noData.value = true
       source.value = '此组件无数据源'
     }
     if (isArray(newData)) {

From 2036a509f063f442442aef929cd7c28283d2fbb6 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Fri, 30 Sep 2022 22:25:08 +0800
Subject: [PATCH 33/56] =?UTF-8?q?style:=20=E8=B0=83=E6=95=B4=E7=BF=BB?=
 =?UTF-8?q?=E7=89=8C=E9=BB=98=E8=AE=A4=E5=A4=A7=E5=B0=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Decorates/Mores/CountDown/config.ts          | 16 +++++++---------
 .../Decorates/Mores/CountDown/config.vue         |  6 +++---
 .../Decorates/Mores/CountDown/index.vue          |  7 ++++---
 .../Decorates/Mores/FlipperNumber/config.ts      |  8 ++++----
 .../Decorates/Mores/FlipperNumber/index.vue      |  7 ++++---
 5 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/src/packages/components/Decorates/Mores/CountDown/config.ts b/src/packages/components/Decorates/Mores/CountDown/config.ts
index 7131bcaf..daa32918 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.ts
+++ b/src/packages/components/Decorates/Mores/CountDown/config.ts
@@ -9,11 +9,10 @@ type STYLE = '时分秒' | '冒号'
 
 export interface OptionType {
   dataset: number
-  fixedDate: boolean
+  useEndDate: boolean
   endDate: number
   style: STYLE
   showDay: boolean
-  flipperLength: number
   flipperBgColor: string
   flipperTextColor: string
   flipperWidth: number
@@ -26,16 +25,15 @@ export interface OptionType {
 
 export const option: OptionType = {
   dataset: 10 * 60, // 10分钟
-  fixedDate: false,
+  useEndDate: false,
   endDate: new Date().getTime(), // 当前时间
   style: '时分秒',
-  showDay: true,
-  flipperLength: 6,
+  showDay: false,
   flipperBgColor: '#253E4E',
   flipperTextColor: '#7CFFB2FF',
-  flipperWidth: 60,
-  flipperHeight: 100,
-  flipperRadius: 10,
+  flipperWidth: 30,
+  flipperHeight: 50,
+  flipperRadius: 5,
   flipperGap: 10,
   flipperType: 'down',
   flipperSpeed: 450
@@ -43,7 +41,7 @@ export const option: OptionType = {
 
 export default class Config extends PublicConfigClass implements CreateComponentType {
   public key = CountDownConfig.key
-  public attr = { ...chartInitConfig, w: 950, h: 160, zIndex: -1 }
+  public attr = { ...chartInitConfig, w: 500, h: 100, zIndex: -1 }
   public chartConfig = cloneDeep(CountDownConfig)
   public option = cloneDeep(option)
 }
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.vue b/src/packages/components/Decorates/Mores/CountDown/config.vue
index 43827977..0b92d80e 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/config.vue
@@ -6,14 +6,14 @@
           v-model:value="optionData.dataset"
           size="small"
           :min="0"
-          :disabled="optionData.fixedDate"
+          :disabled="optionData.useEndDate"
         ></n-input-number>
       </setting-item>
       <setting-item name="结束日期">
-        <n-date-picker v-model:value="optionData.endDate" type="datetime" :disabled="!optionData.fixedDate" />
+        <n-date-picker v-model:value="optionData.endDate" type="datetime" :disabled="!optionData.useEndDate" />
       </setting-item>
       <setting-item>
-        <n-checkbox v-model:checked="optionData.fixedDate" size="small">使用固定日期</n-checkbox>
+        <n-checkbox v-model:checked="optionData.useEndDate" size="small">使用固定结束日期</n-checkbox>
       </setting-item>
     </setting-item-box>
 
diff --git a/src/packages/components/Decorates/Mores/CountDown/index.vue b/src/packages/components/Decorates/Mores/CountDown/index.vue
index ad24c6b3..8dde8706 100644
--- a/src/packages/components/Decorates/Mores/CountDown/index.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/index.vue
@@ -89,7 +89,7 @@ const { w, h } = toRefs(props.chartConfig.attr)
 
 const {
   dataset,
-  fixedDate,
+  useEndDate,
   endDate,
   style,
   showDay,
@@ -132,7 +132,7 @@ const renderCountdown: CountdownProps['render'] = ({ hours, minutes, seconds })
 
 const updateTotalDuration = () => {
   countdownActive.value = false
-  totalDuration.value = fixedDate.value ? endDate.value - new Date().getTime() : dataset.value * 1000
+  totalDuration.value = useEndDate.value ? endDate.value - new Date().getTime() : dataset.value * 1000
   countdownRef.value?.reset && countdownRef.value?.reset()
   countdownActive.value = true
 }
@@ -156,7 +156,7 @@ watch(
   }
 )
 watch(
-  () => props.chartConfig.option.fixedDate,
+  () => props.chartConfig.option.useEndDate,
   () => {
     updateTotalDuration()
   },
@@ -177,5 +177,6 @@ onMounted(() => {
   font-size: v-bind('`${flipperWidth}px`');
   line-height: v-bind('`${flipperHeight}px`');
   color: v-bind('flipperTextColor');
+  user-select: none;
 }
 </style>
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/config.ts b/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
index ef074f7c..d7410da5 100644
--- a/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
@@ -23,9 +23,9 @@ export const option: OptionType = {
   flipperLength: 6,
   flipperBgColor: '#253E4E',
   flipperTextColor: '#7CFFB2FF',
-  flipperWidth: 60,
-  flipperHeight: 100,
-  flipperRadius: 10,
+  flipperWidth: 30,
+  flipperHeight: 50,
+  flipperRadius: 5,
   flipperGap: 10,
   flipperType: 'down',
   flipperSpeed: 450
@@ -33,7 +33,7 @@ export const option: OptionType = {
 
 export default class Config extends PublicConfigClass implements CreateComponentType {
   public key = FlipperNumberConfig.key
-  public attr = { ...chartInitConfig, w: 500, h: 160, zIndex: -1 }
+  public attr = { ...chartInitConfig, w: 300, h: 100, zIndex: -1 }
   public chartConfig = cloneDeep(FlipperNumberConfig)
   public option = cloneDeep(option)
 }
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/index.vue b/src/packages/components/Decorates/Mores/FlipperNumber/index.vue
index 34a6defa..d831c4ed 100644
--- a/src/packages/components/Decorates/Mores/FlipperNumber/index.vue
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/index.vue
@@ -1,6 +1,6 @@
 <template>
   <!-- <n-countdown :duration="50000" :active="true" /> -->
-  <n-space class="go-decorates-more-countdown" :size="flipperGap" align="center" justify="center">
+  <n-space class="go-decorates-flipper-number" :size="flipperGap" align="center" justify="center">
     <flipper
       :count="item"
       :width="flipperWidth"
@@ -12,6 +12,7 @@
       :duration="flipperSpeed"
       v-for="(item, index) in flipperData"
       :key="index"
+      class="go-d-block"
     />
   </n-space>
 </template>
@@ -51,7 +52,7 @@ const getFlipperData = (val: string | number) => {
     .toString()
     .padStart(flipperLength.value, '0') // 左侧填充|右对齐
     .split('') // 转数组
-    .slice(flipperLength.value * -1) // 从右向左取
+    .slice(flipperLength.value * -1) // 从后面取指定长度
 }
 const updateDatasetHandler = (newVal: string | number) => {
   flipperData.value = getFlipperData(newVal)
@@ -74,7 +75,7 @@ useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: string | number
 </script>
 
 <style lang="scss" scoped>
-@include go('decorates-more-countdown') {
+@include go('decorates-flipper-number') {
   width: v-bind('`${w}px`');
   height: v-bind('`${h}px`');
 }

From d0f3490bd558e59744c8d6d3b52dba0a0fee4f9c Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Sat, 1 Oct 2022 10:27:11 +0800
Subject: [PATCH 34/56] =?UTF-8?q?style:=20=E8=B0=83=E6=95=B4=E7=BC=A9?=
 =?UTF-8?q?=E7=95=A5=E5=9B=BE=E5=92=8C=E9=BB=98=E8=AE=A4=E9=A2=9C=E8=89=B2?=
 =?UTF-8?q?=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../images/chart/decorates/countdown.png      | Bin 18163 -> 27851 bytes
 .../images/chart/decorates/flipper-number.png | Bin 12441 -> 27933 bytes
 src/components/Flipper/index.vue              |  88 +++++++++---------
 .../Decorates/Mores/CountDown/config.ts       |   4 +-
 .../Decorates/Mores/FlipperNumber/config.ts   |   4 +-
 5 files changed, 49 insertions(+), 47 deletions(-)

diff --git a/src/assets/images/chart/decorates/countdown.png b/src/assets/images/chart/decorates/countdown.png
index 06d168117cb46d85ab9197f562a3230edfa64281..c414a3162bc5ef07e34889b9024b621216060703 100644
GIT binary patch
literal 27851
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
F_-~Zuxr6`!

delta 15252
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

diff --git a/src/assets/images/chart/decorates/flipper-number.png b/src/assets/images/chart/decorates/flipper-number.png
index a02939f02a37913af9b7a86158ec591815ff8891..b64d4fd469706b97e240a65df6200f9513733ff7 100644
GIT binary patch
literal 27933
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

delta 9483
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
NH6=~O3i%hW{}($!-0J`U

diff --git a/src/components/Flipper/index.vue b/src/components/Flipper/index.vue
index 72807c5e..7757d536 100644
--- a/src/components/Flipper/index.vue
+++ b/src/components/Flipper/index.vue
@@ -86,48 +86,50 @@ watch(
 </script>
 
 <style lang="scss" scoped>
-// #region 动画效果
-@keyframes frontFlipDown {
-  0% {
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(0deg);
-  }
-  100% {
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(-180deg);
-  }
-}
-@keyframes backFlipDown {
-  0% {
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(180deg);
-  }
-  100% {
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(0deg);
-  }
-}
-@keyframes frontFlipUp {
-  0% {
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(0deg);
-  }
-  100% {
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(180deg);
-  }
-}
-@keyframes backFlipUp {
-  0% {
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(-180deg);
-  }
-  100% {
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(0deg);
-  }
-}
-// #endregion
-
 $frontColor: v-bind('props.frontColor');
 $backColor: v-bind('props.backColor');
 $radius: v-bind('`${props.radius}px`');
 $width: v-bind('`${props.width}px`');
 $height: v-bind('`${props.height}px`');
+$perspective: v-bind('`${props.height * 2}px`');
+$speed: v-bind('`${props.duration / 1000}s`');
 $shadowColor: #000000;
-$lineColor: #ffffff;
+$lineColor: #4a9ef8;
+
+// #region 动画效果
+@keyframes frontFlipDown {
+  0% {
+    transform: perspective($perspective) rotateX(0deg);
+  }
+  100% {
+    transform: perspective($perspective) rotateX(-180deg);
+  }
+}
+@keyframes backFlipDown {
+  0% {
+    transform: perspective($perspective) rotateX(180deg);
+  }
+  100% {
+    transform: perspective($perspective) rotateX(0deg);
+  }
+}
+@keyframes frontFlipUp {
+  0% {
+    transform: perspective($perspective) rotateX(0deg);
+  }
+  100% {
+    transform: perspective($perspective) rotateX(180deg);
+  }
+}
+@keyframes backFlipUp {
+  0% {
+    transform: perspective($perspective) rotateX(-180deg);
+  }
+  100% {
+    transform: perspective($perspective) rotateX(0deg);
+  }
+}
+// #endregion
 
 .M-Flipper {
   display: inline-block;
@@ -138,7 +140,7 @@ $lineColor: #ffffff;
   border: solid 1px $backColor;
   border-radius: $radius;
   background: $frontColor;
-  font-size: v-bind('`${props.width * 1.1}px`');
+  font-size: $width;
   color: $frontColor;
   box-shadow: 0 0 6px rgba($color: $shadowColor, $alpha: 0.5); // 阴影部分
   text-align: center;
@@ -181,7 +183,7 @@ $lineColor: #ffffff;
   &.down .back:after {
     z-index: 2;
     transform-origin: 50% 0%;
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(180deg);
+    transform: perspective($perspective) rotateX(180deg);
   }
   &.down .front:after,
   &.down .back:before {
@@ -189,12 +191,12 @@ $lineColor: #ffffff;
   }
   &.down.go .front:before {
     transform-origin: 50% 100%;
-    animation: frontFlipDown v-bind('`${props.duration / 1000}s`') ease-in-out both;
+    animation: frontFlipDown $speed ease-in-out both;
     box-shadow: 0 -2px 6px rgba($color: $lineColor, $alpha: 0.3);
     backface-visibility: hidden;
   }
   &.down.go .back:after {
-    animation: backFlipDown v-bind('`${props.duration / 1000}s`') ease-in-out both;
+    animation: backFlipDown $speed ease-in-out both;
   }
   /*向上翻*/
   &.up .front:after {
@@ -203,7 +205,7 @@ $lineColor: #ffffff;
   &.up .back:before {
     z-index: 2;
     transform-origin: 50% 100%;
-    transform: perspective(v-bind('`${props.height * 1.6}px`')) rotateX(-180deg);
+    transform: perspective($perspective) rotateX(-180deg);
   }
   &.up .front:before,
   &.up .back:after {
@@ -211,12 +213,12 @@ $lineColor: #ffffff;
   }
   &.up.go .front:after {
     transform-origin: 50% 0;
-    animation: frontFlipUp v-bind('`${props.duration / 1000}s`') ease-in-out both;
+    animation: frontFlipUp $speed ease-in-out both;
     box-shadow: 0 2px 6px rgba($color: $lineColor, $alpha: 0.3);
     backface-visibility: hidden;
   }
   &.up.go .back:before {
-    animation: backFlipUp v-bind('`${props.duration / 1000}s`') ease-in-out both;
+    animation: backFlipUp $speed ease-in-out both;
   }
 }
 </style>
diff --git a/src/packages/components/Decorates/Mores/CountDown/config.ts b/src/packages/components/Decorates/Mores/CountDown/config.ts
index daa32918..d9537fe9 100644
--- a/src/packages/components/Decorates/Mores/CountDown/config.ts
+++ b/src/packages/components/Decorates/Mores/CountDown/config.ts
@@ -29,8 +29,8 @@ export const option: OptionType = {
   endDate: new Date().getTime(), // 当前时间
   style: '时分秒',
   showDay: false,
-  flipperBgColor: '#253E4E',
-  flipperTextColor: '#7CFFB2FF',
+  flipperBgColor: '#16293E',
+  flipperTextColor: '#4A9EF8FF',
   flipperWidth: 30,
   flipperHeight: 50,
   flipperRadius: 5,
diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/config.ts b/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
index d7410da5..5069100b 100644
--- a/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/config.ts
@@ -21,8 +21,8 @@ export interface OptionType {
 export const option: OptionType = {
   dataset: 3234,
   flipperLength: 6,
-  flipperBgColor: '#253E4E',
-  flipperTextColor: '#7CFFB2FF',
+  flipperBgColor: '#16293E',
+  flipperTextColor: '#4A9EF8FF',
   flipperWidth: 30,
   flipperHeight: 50,
   flipperRadius: 5,

From e9e5b798e76024e5493f315a76e4d065740abf9e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 1 Oct 2022 17:26:52 +0800
Subject: [PATCH 35/56] =?UTF-8?q?perf:=20=E5=8E=BB=E9=99=A4=E5=B1=8F?=
 =?UTF-8?q?=E5=B9=95=E5=A4=A7=E5=B0=8F=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 index.css                                     | 21 --------------
 index.html                                    |  3 --
 .../chartHistoryStore/chartHistoryDefine.ts   | 29 +++++++++----------
 3 files changed, 14 insertions(+), 39 deletions(-)

diff --git a/index.css b/index.css
index 2e996bd6..b93daf3b 100644
--- a/index.css
+++ b/index.css
@@ -82,25 +82,4 @@
   to {
     opacity: 1;
   }
-}
-
-/* 小屏处理 0~1000*/
-.mobile-terminal {
-  display: none;
-}
-@media (max-width: 1000px) {
-  #app {
-    display: none;
-  }
-  .mobile-terminal {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    width: 100vw;
-    height: 100vh;
-    text-align: center;
-    font-size: 24px;
-    font-weight: 200;
-    background-image: linear-gradient(to top, #fff1eb 0%, #ace0f9 100%);
-  }
 }
\ No newline at end of file
diff --git a/index.html b/index.html
index 344d19d9..49904d92 100644
--- a/index.html
+++ b/index.html
@@ -24,9 +24,6 @@
         </div>
       </div>
     </div>
-    <div class="mobile-terminal">
-      <p>请使用 Web 端进行查看</p>
-    </div>
     <script type="module" src="/src/main.ts"></script>
   </body>
 </html>
diff --git a/src/store/modules/chartHistoryStore/chartHistoryDefine.ts b/src/store/modules/chartHistoryStore/chartHistoryDefine.ts
index 7c38de1b..edb15a3a 100644
--- a/src/store/modules/chartHistoryStore/chartHistoryDefine.ts
+++ b/src/store/modules/chartHistoryStore/chartHistoryDefine.ts
@@ -1,22 +1,21 @@
 import { HistoryTargetTypeEnum, HistoryActionTypeEnum } from './chartHistoryStore.d'
 
 export const historyActionTypeName = {
-  [HistoryActionTypeEnum.ADD]: '新增图表',
-  [HistoryActionTypeEnum.DELETE]: '删除图表',
-  [HistoryActionTypeEnum.UPDATE]: '修改属性',
-  [HistoryActionTypeEnum.MOVE]: '移动图表',
-  [HistoryActionTypeEnum.PASTE]: '粘贴图表',
-  [HistoryActionTypeEnum.COPY]: '复制图表',
-  [HistoryActionTypeEnum.CUT]: '剪切图表',
-  [HistoryActionTypeEnum.TOP]: '层级置顶',
-  [HistoryActionTypeEnum.BOTTOM]: '层级置底',
-  [HistoryActionTypeEnum.UP]: '层级上移',
-  [HistoryActionTypeEnum.DOWN]: '层级下移',
-  [HistoryActionTypeEnum.GROUP]: '创建分组',
-  [HistoryActionTypeEnum.UN_GROUP]: '解除分组',
-  [HistoryActionTypeEnum.SELECT_HISTORY]: '选择记录',
+  [HistoryActionTypeEnum.ADD]: '新增',
+  [HistoryActionTypeEnum.DELETE]: '删除',
+  [HistoryActionTypeEnum.UPDATE]: '更新',
+  [HistoryActionTypeEnum.MOVE]: '移动',
+  [HistoryActionTypeEnum.PASTE]: '粘贴',
+  [HistoryActionTypeEnum.COPY]: '复制',
+  [HistoryActionTypeEnum.CUT]: '剪切',
+  [HistoryActionTypeEnum.TOP]: '置顶',
+  [HistoryActionTypeEnum.BOTTOM]: '置底',
+  [HistoryActionTypeEnum.UP]: '上移',
+  [HistoryActionTypeEnum.DOWN]: '下移',
+  [HistoryActionTypeEnum.GROUP]: '成组',
+  [HistoryActionTypeEnum.UN_GROUP]: '解组',
   [HistoryActionTypeEnum.LOCK]: '锁定',
-  [HistoryActionTypeEnum.UNLOCK]: '解除锁定',
+  [HistoryActionTypeEnum.UNLOCK]: '解锁',
   [HistoryActionTypeEnum.HIDE]: '隐藏',
   [HistoryActionTypeEnum.SHOW]: '显示',
 

From ef7dbba3ced4c93316e08348295a62b07dbb1e06 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 1 Oct 2022 17:27:06 +0800
Subject: [PATCH 36/56] =?UTF-8?q?style:=20=E5=8E=BB=E9=99=A4=E5=A4=9A?=
 =?UTF-8?q?=E4=BD=99=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/store/modules/chartHistoryStore/chartHistoryStore.d.ts | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/store/modules/chartHistoryStore/chartHistoryStore.d.ts b/src/store/modules/chartHistoryStore/chartHistoryStore.d.ts
index e27240bb..9ec79206 100644
--- a/src/store/modules/chartHistoryStore/chartHistoryStore.d.ts
+++ b/src/store/modules/chartHistoryStore/chartHistoryStore.d.ts
@@ -30,8 +30,6 @@ export enum HistoryActionTypeEnum {
   GROUP = 'group',
   // 解组
   UN_GROUP = 'unGroup',
-  // 选择历史记录
-  SELECT_HISTORY = 'selectHistory',
   // 锁定
   LOCK = 'lock',
   // 解除锁定

From 8d81ed38701547d8061f983c0a8704d9a29a6448 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 1 Oct 2022 19:59:57 +0800
Subject: [PATCH 37/56] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=89=8D?=
 =?UTF-8?q?=E8=BF=9B=E6=92=A4=E5=9B=9E=E4=B8=AD=E9=94=81=E5=AE=9A/?=
 =?UTF-8?q?=E9=9A=90=E8=97=8F=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8=E5=AE=9E?=
 =?UTF-8?q?=E7=8E=B0=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../modules/chartEditStore/chartEditStore.ts  | 74 ++++++++++---------
 .../chartHistoryStore/chartHistoryStore.ts    | 22 +++---
 2 files changed, 53 insertions(+), 43 deletions(-)

diff --git a/src/store/modules/chartEditStore/chartEditStore.ts b/src/store/modules/chartEditStore/chartEditStore.ts
index 131e8763..5b37abfe 100644
--- a/src/store/modules/chartEditStore/chartEditStore.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.ts
@@ -532,6 +532,10 @@ export const useChartEditStore = defineStore({
         return
       }
 
+      // 取消选中
+      this.setTargetSelectChart()
+
+      // 重新选中
       let historyData = HistoryItem.historyData as Array<CreateComponentType | CreateComponentGroupType>
       if (isArray(historyData)) {
         // 选中目标元素,支持多个
@@ -619,30 +623,36 @@ export const useChartEditStore = defineStore({
         return
       }
 
-      switch (HistoryItem.actionType) {
-        // 锁定处理
-        case HistoryActionTypeEnum.LOCK:
-        case HistoryActionTypeEnum.UNLOCK:
-          if (!isForward) {
-            // 恢复原来状态
-            if (HistoryItem.actionType === HistoryActionTypeEnum.LOCK) historyData[0].status.lock = false
-            if (HistoryItem.actionType === HistoryActionTypeEnum.UNLOCK) historyData[0].status.lock = true
-            return
-          }
-          this.setLock(!historyData[0].status.lock, false)
-          break
+      // 处理锁定
+      const isLock = HistoryItem.actionType === HistoryActionTypeEnum.LOCK
+      const isUnLock = HistoryItem.actionType === HistoryActionTypeEnum.UNLOCK
+      if (isLock || isUnLock) {
+        if ((isLock && isForward) || (isUnLock && !isForward)) {
+          historyData.forEach(item => {
+            this.setLock(!item.status.lock, false)
+          })
+          return
+        }
+        historyData.forEach(item => {
+          this.setUnLock(false)
+        })
+        return
+      }
 
-        // 隐藏处理
-        case HistoryActionTypeEnum.HIDE:
-        case HistoryActionTypeEnum.SHOW:
-          if (!isForward) {
-            // 恢复原来状态
-            if (HistoryItem.actionType === HistoryActionTypeEnum.HIDE) historyData[0].status.hide = false
-            if (HistoryItem.actionType === HistoryActionTypeEnum.SHOW) historyData[0].status.hide = true
-            return
-          }
-          this.setHide(!historyData[0].status.hide, false)
-          break
+      // 处理隐藏
+      const isHide = HistoryItem.actionType === HistoryActionTypeEnum.HIDE
+      const isShow = HistoryItem.actionType === HistoryActionTypeEnum.SHOW
+      if (isHide || isShow) {
+        if ((isHide && isForward) || (isShow && !isForward)) {
+          historyData.forEach(item => {
+            this.setHide(!item.status.hide, false)
+          })
+          return
+        }
+        historyData.forEach(item => {
+          this.setShow(false)
+        })
+        return
       }
     },
     // * 撤回
@@ -837,14 +847,13 @@ export const useChartEditStore = defineStore({
 
           // 历史记录
           if (isHistory) {
-            chartHistoryStore.createLockHistory(
-              [targetItem],
-              status ? HistoryActionTypeEnum.LOCK : HistoryActionTypeEnum.UNLOCK
-            )
+            status
+              ? chartHistoryStore.createLockHistory([targetItem])
+              : chartHistoryStore.createUnLockHistory([targetItem])
           }
           this.updateComponentList(index, targetItem)
           // 锁定添加失焦效果
-          if(status) this.setTargetSelectChart(undefined)
+          if (status) this.setTargetSelectChart(undefined)
           loadingFinish()
           return
         }
@@ -869,12 +878,11 @@ export const useChartEditStore = defineStore({
           const targetItem = this.getComponentList[index]
           targetItem.status.hide = status
 
-          // 历史记录
+          // 历史记录 
           if (isHistory) {
-            chartHistoryStore.createHideHistory(
-              [targetItem],
-              status ? HistoryActionTypeEnum.HIDE : HistoryActionTypeEnum.SHOW
-            )
+            status
+              ? chartHistoryStore.createHideHistory([targetItem])
+              : chartHistoryStore.createShowHistory([targetItem])
           }
           this.updateComponentList(index, targetItem)
           loadingFinish()
diff --git a/src/store/modules/chartHistoryStore/chartHistoryStore.ts b/src/store/modules/chartHistoryStore/chartHistoryStore.ts
index b773300b..dc67ca97 100644
--- a/src/store/modules/chartHistoryStore/chartHistoryStore.ts
+++ b/src/store/modules/chartHistoryStore/chartHistoryStore.ts
@@ -169,18 +169,20 @@ export const useChartHistoryStore = defineStore({
       this.createStackItem(item, HistoryActionTypeEnum.UN_GROUP, HistoryTargetTypeEnum.CHART)
     },
     // * 锁定记录
-    createLockHistory(
-      item: Array<CreateComponentType | CreateComponentGroupType>,
-      type: HistoryActionTypeEnum.LOCK | HistoryActionTypeEnum.UNLOCK
-    ) {
-      this.createStackItem(item, type, HistoryTargetTypeEnum.CHART)
+    createLockHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
+      this.createStackItem(item, HistoryActionTypeEnum.LOCK, HistoryTargetTypeEnum.CHART)
+    },
+    // * 解锁记录
+    createUnLockHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
+      this.createStackItem(item, HistoryActionTypeEnum.UNLOCK, HistoryTargetTypeEnum.CHART)
     },
     // * 隐藏记录
-    createHideHistory(
-      item: Array<CreateComponentType | CreateComponentGroupType>,
-      type: HistoryActionTypeEnum.HIDE | HistoryActionTypeEnum.SHOW
-    ) {
-      this.createStackItem(item, type, HistoryTargetTypeEnum.CHART)
+    createHideHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
+      this.createStackItem(item, HistoryActionTypeEnum.HIDE, HistoryTargetTypeEnum.CHART)
+    },
+    // * 展示记录
+    createShowHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
+      this.createStackItem(item, HistoryActionTypeEnum.SHOW, HistoryTargetTypeEnum.CHART)
     }
   }
 })

From 9161374320e900893a528283c58cee3452422743 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 1 Oct 2022 20:34:24 +0800
Subject: [PATCH 38/56] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=E9=A2=9C?=
 =?UTF-8?q?=E8=89=B2=E9=BB=98=E8=AE=A4=E5=B1=95=E7=A4=BA=EF=BC=8C=E6=A0=BC?=
 =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/settings/designColor.json          | 6827 ++++--------------------
 src/settings/designColorRecommend.json |   66 +-
 2 files changed, 1066 insertions(+), 5827 deletions(-)

diff --git a/src/settings/designColor.json b/src/settings/designColor.json
index 5e506ba4..77ddf15d 100644
--- a/src/settings/designColor.json
+++ b/src/settings/designColor.json
@@ -1,8402 +1,3677 @@
 [
   {
-    "CMYK": [
-      4,
-      5,
-      18,
-      0
-    ],
-    "RGB": [
-      249,
-      244,
-      220
-    ],
+    "CMYK": [4, 5, 18, 0],
+    "RGB": [249, 244, 220],
     "hex": "#f9f4dc",
     "name": "乳白",
     "pinyin": "rubai"
   },
   {
-    "CMYK": [
-      3,
-      8,
-      30,
-      0
-    ],
-    "RGB": [
-      249,
-      236,
-      195
-    ],
+    "CMYK": [3, 8, 30, 0],
+    "RGB": [249, 236, 195],
     "hex": "#f7e8aa",
     "name": "杏仁黄",
     "pinyin": "xingrenhuang"
   },
   {
-    "CMYK": [
-      4,
-      13,
-      67,
-      0
-    ],
-    "RGB": [
-      248,
-      223,
-      114
-    ],
+    "CMYK": [4, 13, 67, 0],
+    "RGB": [248, 223, 114],
     "hex": "#f8df72",
     "name": "茉莉黄",
     "pinyin": "molihuang"
   },
   {
-    "CMYK": [
-      5,
-      14,
-      68,
-      1
-    ],
-    "RGB": [
-      248,
-      223,
-      112
-    ],
+    "CMYK": [5, 14, 68, 1],
+    "RGB": [248, 223, 112],
     "hex": "#f8df70",
     "name": "麦秆黄",
     "pinyin": "maiganhuang"
   },
   {
-    "CMYK": [
-      2,
-      16,
-      84,
-      0
-    ],
-    "RGB": [
-      251,
-      218,
-      65
-    ],
+    "CMYK": [2, 16, 84, 0],
+    "RGB": [251, 218, 65],
     "hex": "#fbda41",
     "name": "油菜花黄",
     "pinyin": "youcaihuahuang"
   },
   {
-    "CMYK": [
-      1,
-      18,
-      94,
-      0
-    ],
-    "RGB": [
-      254,
-      215,
-      26
-    ],
+    "CMYK": [1, 18, 94, 0],
+    "RGB": [254, 215, 26],
     "hex": "#fed71a",
     "name": "佛手黄",
     "pinyin": "foshouhuang"
   },
   {
-    "CMYK": [
-      3,
-      16,
-      50,
-      0
-    ],
-    "RGB": [
-      247,
-      222,
-      152
-    ],
+    "CMYK": [3, 16, 50, 0],
+    "RGB": [247, 222, 152],
     "hex": "#f7de98",
     "name": "篾黄",
     "pinyin": "miehuang"
   },
   {
-    "CMYK": [
-      3,
-      17,
-      69,
-      0
-    ],
-    "RGB": [
-      248,
-      216,
-      106
-    ],
+    "CMYK": [3, 17, 69, 0],
+    "RGB": [248, 216, 106],
     "hex": "#f8d86a",
     "name": "葵扇黄",
     "pinyin": "kuishanhuang"
   },
   {
-    "CMYK": [
-      0,
-      20,
-      87,
-      0
-    ],
-    "RGB": [
-      252,
-      211,
-      55
-    ],
+    "CMYK": [0, 20, 87, 0],
+    "RGB": [252, 211, 55],
     "hex": "#fcd337",
     "name": "柠檬黄",
     "pinyin": "ningmenghuang"
   },
   {
-    "CMYK": [
-      0,
-      20,
-      95,
-      0
-    ],
-    "RGB": [
-      252,
-      210,
-      23
-    ],
+    "CMYK": [0, 20, 95, 0],
+    "RGB": [252, 210, 23],
     "hex": "#fcd217",
     "name": "金瓜黄",
     "pinyin": "jinguahuang"
   },
   {
-    "CMYK": [
-      0,
-      21,
-      94,
-      0
-    ],
-    "RGB": [
-      254,
-      209,
-      16
-    ],
+    "CMYK": [0, 21, 94, 0],
+    "RGB": [254, 209, 16],
     "hex": "#ffd111",
     "name": "藤黄",
     "pinyin": "tenghuang"
   },
   {
-    "CMYK": [
-      2,
-      16,
-      39,
-      0
-    ],
-    "RGB": [
-      246,
-      222,
-      173
-    ],
+    "CMYK": [2, 16, 39, 0],
+    "RGB": [246, 222, 173],
     "hex": "#f6dead",
     "name": "酪黄",
     "pinyin": "laohuang"
   },
   {
-    "CMYK": [
-      1,
-      21,
-      70,
-      0
-    ],
-    "RGB": [
-      249,
-      211,
-      103
-    ],
+    "CMYK": [1, 21, 70, 0],
+    "RGB": [249, 211, 103],
     "hex": "#f9d367",
     "name": "淡密黄",
     "pinyin": "danmihuang"
   },
   {
-    "CMYK": [
-      0,
-      23,
-      88,
-      0
-    ],
-    "RGB": [
-      251,
-      205,
-      49
-    ],
+    "CMYK": [0, 23, 88, 0],
+    "RGB": [251, 205, 49],
     "hex": "#fbcd31",
     "name": "大豆黄",
     "pinyin": "dadouhuang"
   },
   {
-    "CMYK": [
-      0,
-      24,
-      94,
-      0
-    ],
-    "RGB": [
-      252,
-      203,
-      22
-    ],
+    "CMYK": [0, 24, 94, 0],
+    "RGB": [252, 203, 22],
     "hex": "#fccb16",
     "name": "素馨黄",
     "pinyin": "suxinhuang"
   },
   {
-    "CMYK": [
-      0,
-      24,
-      94,
-      0
-    ],
-    "RGB": [
-      254,
-      204,
-      17
-    ],
+    "CMYK": [0, 24, 94, 0],
+    "RGB": [254, 204, 17],
     "hex": "#fecc11",
     "name": "向日葵黄",
     "pinyin": "xiangrikuihuang"
   },
   {
-    "CMYK": [
-      0,
-      27,
-      88,
-      0
-    ],
-    "RGB": [
-      251,
-      200,
-      47
-    ],
+    "CMYK": [0, 27, 88, 0],
+    "RGB": [251, 200, 47],
     "hex": "#fbc82f",
     "name": "雅梨黄",
     "pinyin": "yalihuang"
   },
   {
-    "CMYK": [
-      0,
-      28,
-      94,
-      0
-    ],
-    "RGB": [
-      252,
-      197,
-      21
-    ],
+    "CMYK": [0, 28, 94, 0],
+    "RGB": [252, 197, 21],
     "hex": "#fcc515",
     "name": "黄连黄",
     "pinyin": "huanglianhuang"
   },
   {
-    "CMYK": [
-      0,
-      29,
-      95,
-      0
-    ],
-    "RGB": [
-      252,
-      195,
-      7
-    ],
+    "CMYK": [0, 29, 95, 0],
+    "RGB": [252, 195, 7],
     "hex": "#fcc307",
     "name": "金盏黄",
     "pinyin": "jinzhanhuang"
   },
   {
-    "CMYK": [
-      0,
-      32,
-      52,
-      0
-    ],
-    "RGB": [
-      248,
-      195,
-      135
-    ],
+    "CMYK": [0, 32, 52, 0],
+    "RGB": [248, 195, 135],
     "hex": "#f8c387",
     "name": "蛋壳黄",
     "pinyin": "dankehuang"
   },
   {
-    "CMYK": [
-      0,
-      32,
-      52,
-      0
-    ],
-    "RGB": [
-      247,
-      193,
-      115
-    ],
+    "CMYK": [0, 32, 52, 0],
+    "RGB": [247, 193, 115],
     "hex": "#f7c173",
     "name": "肉色",
     "pinyin": "rouse"
   },
   {
-    "CMYK": [
-      0,
-      35,
-      89,
-      0
-    ],
-    "RGB": [
-      251,
-      185,
-      41
-    ],
+    "CMYK": [0, 35, 89, 0],
+    "RGB": [251, 185, 41],
     "hex": "#fbb929",
     "name": "鹅掌黄",
     "pinyin": "ezhanghuang"
   },
   {
-    "CMYK": [
-      0,
-      36,
-      93,
-      0
-    ],
-    "RGB": [
-      251,
-      182,
-      18
-    ],
+    "CMYK": [0, 36, 93, 0],
+    "RGB": [251, 182, 18],
     "hex": "#fbb612",
     "name": "鸡蛋黄",
     "pinyin": "jidanhuang"
   },
   {
-    "CMYK": [
-      0,
-      35,
-      94,
-      0
-    ],
-    "RGB": [
-      252,
-      183,
-      10
-    ],
+    "CMYK": [0, 35, 94, 0],
+    "RGB": [252, 183, 10],
     "hex": "#fcb70a",
     "name": "鼬黄",
     "pinyin": "youhuang"
   },
   {
-    "CMYK": [
-      0,
-      44,
-      84,
-      0
-    ],
-    "RGB": [
-      249,
-      166,
-      51
-    ],
+    "CMYK": [0, 44, 84, 0],
+    "RGB": [249, 166, 51],
     "hex": "#f9a633",
     "name": "榴萼黄",
     "pinyin": "liuehuang"
   },
   {
-    "CMYK": [
-      0,
-      45,
-      92,
-      0
-    ],
-    "RGB": [
-      251,
-      164,
-      20
-    ],
+    "CMYK": [0, 45, 92, 0],
+    "RGB": [251, 164, 20],
     "hex": "#fba414",
     "name": "淡橘橙",
     "pinyin": "danjucheng"
   },
   {
-    "CMYK": [
-      0,
-      47,
-      92,
-      0
-    ],
-    "RGB": [
-      252,
-      161,
-      6
-    ],
+    "CMYK": [0, 47, 92, 0],
+    "RGB": [252, 161, 6],
     "hex": "#fca106",
     "name": "枇杷黄",
     "pinyin": "pipahuang"
   },
   {
-    "CMYK": [
-      0,
-      47,
-      92,
-      0
-    ],
-    "RGB": [
-      252,
-      161,
-      4
-    ],
+    "CMYK": [0, 47, 92, 0],
+    "RGB": [252, 161, 4],
     "hex": "#fca104",
     "name": "橙皮黄",
     "pinyin": "chengpihuang"
   },
   {
-    "CMYK": [
-      0,
-      56,
-      87,
-      0
-    ],
-    "RGB": [
-      252,
-      140,
-      35
-    ],
+    "CMYK": [0, 56, 87, 0],
+    "RGB": [252, 140, 35],
     "hex": "#fc8c23",
     "name": "北瓜黄",
     "pinyin": "beiguahuang"
   },
   {
-    "CMYK": [
-      0,
-      54,
-      92,
-      0
-    ],
-    "RGB": [
-      250,
-      142,
-      22
-    ],
+    "CMYK": [0, 54, 92, 0],
+    "RGB": [250, 142, 22],
     "hex": "#f28e16",
     "name": "杏黄",
     "pinyin": "xinghuang"
   },
   {
-    "CMYK": [
-      0,
-      51,
-      91,
-      0
-    ],
-    "RGB": [
-      255,
-      153,
-      0
-    ],
+    "CMYK": [0, 51, 91, 0],
+    "RGB": [255, 153, 0],
     "hex": "#ff9900",
     "name": "雄黄",
     "pinyin": "xionghuang"
   },
   {
-    "CMYK": [
-      0,
-      56,
-      91,
-      0
-    ],
-    "RGB": [
-      251,
-      139,
-      5
-    ],
+    "CMYK": [0, 56, 91, 0],
+    "RGB": [251, 139, 5],
     "hex": "#fb8b05",
     "name": "万寿菊黄",
     "pinyin": "wanshoujuhuang"
   },
   {
-    "CMYK": [
-      10,
-      13,
-      35,
-      1
-    ],
-    "RGB": [
-      233,
-      221,
-      182
-    ],
+    "CMYK": [10, 13, 35, 1],
+    "RGB": [233, 221, 182],
     "hex": "#e9ddb6",
     "name": "菊蕾白",
     "pinyin": "juleibai"
   },
   {
-    "CMYK": [
-      8,
-      19,
-      84,
-      1
-    ],
-    "RGB": [
-      238,
-      208,
-      69
-    ],
+    "CMYK": [8, 19, 84, 1],
+    "RGB": [238, 208, 69],
     "hex": "#eed045",
     "name": "秋葵黄",
     "pinyin": "qiukuihuang"
   },
   {
-    "CMYK": [
-      6,
-      20,
-      92,
-      1
-    ],
-    "RGB": [
-      242,
-      206,
-      43
-    ],
+    "CMYK": [6, 20, 92, 1],
+    "RGB": [242, 206, 43],
     "hex": "#f2ce2b",
     "name": "硫华黄",
     "pinyin": "liuhuahuang"
   },
   {
-    "CMYK": [
-      6,
-      22,
-      92,
-      0
-    ],
-    "RGB": [
-      241,
-      202,
-      23
-    ],
+    "CMYK": [6, 22, 92, 0],
+    "RGB": [241, 202, 23],
     "hex": "#f1ca17",
     "name": "柚黄",
     "pinyin": "youhuang"
   },
   {
-    "CMYK": [
-      15,
-      20,
-      66,
-      2
-    ],
-    "RGB": [
-      221,
-      200,
-      113
-    ],
+    "CMYK": [15, 20, 66, 2],
+    "RGB": [221, 200, 113],
     "hex": "#ddc871",
     "name": "芒果黄",
     "pinyin": "mangguohuang"
   },
   {
-    "CMYK": [
-      14,
-      22,
-      85,
-      2
-    ],
-    "RGB": [
-      223,
-      194,
-      67
-    ],
+    "CMYK": [14, 22, 85, 2],
+    "RGB": [223, 194, 67],
     "hex": "#dfc243",
     "name": "蒿黄",
     "pinyin": "haohuang"
   },
   {
-    "CMYK": [
-      12,
-      24,
-      95,
-      2
-    ],
-    "RGB": [
-      226,
-      192,
-      39
-    ],
+    "CMYK": [12, 24, 95, 2],
+    "RGB": [226, 192, 39],
     "hex": "#e2c027",
     "name": "姜黄",
     "pinyin": "jianghuang"
   },
   {
-    "CMYK": [
-      11,
-      25,
-      99,
-      1
-    ],
-    "RGB": [
-      228,
-      191,
-      17
-    ],
+    "CMYK": [11, 25, 99, 1],
+    "RGB": [228, 191, 17],
     "hex": "#e4bf11",
     "name": "香蕉黄",
     "pinyin": "xiangjiaohuang"
   },
   {
-    "CMYK": [
-      17,
-      27,
-      94,
-      4
-    ],
-    "RGB": [
-      210,
-      180,
-      44
-    ],
+    "CMYK": [17, 27, 94, 4],
+    "RGB": [210, 180, 44],
     "hex": "#d2b42c",
     "name": "草黄",
     "pinyin": "caohuang"
   },
   {
-    "CMYK": [
-      17,
-      29,
-      100,
-      4
-    ],
-    "RGB": [
-      210,
-      177,
-      22
-    ],
+    "CMYK": [17, 29, 100, 4],
+    "RGB": [210, 177, 22],
     "hex": "#d2b116",
     "name": "新禾绿",
     "pinyin": "xinhelv"
   },
   {
-    "CMYK": [
-      28,
-      26,
-      45,
-      7
-    ],
-    "RGB": [
-      183,
-      174,
-      143
-    ],
+    "CMYK": [28, 26, 45, 7],
+    "RGB": [183, 174, 143],
     "hex": "#b7ae8f",
     "name": "月灰",
     "pinyin": "yuehui"
   },
   {
-    "CMYK": [
-      30,
-      30,
-      70,
-      12
-    ],
-    "RGB": [
-      173,
-      158,
-      85
-    ],
+    "CMYK": [30, 30, 70, 12],
+    "RGB": [173, 158, 85],
     "hex": "#ad9e5f",
     "name": "淡灰绿",
     "pinyin": "danhuilv"
   },
   {
-    "CMYK": [
-      38,
-      38,
-      76,
-      24
-    ],
-    "RGB": [
-      142,
-      128,
-      75
-    ],
+    "CMYK": [38, 38, 76, 24],
+    "RGB": [142, 128, 75],
     "hex": "#8e804b",
     "name": "草灰绿",
     "pinyin": "caohuilv"
   },
   {
-    "CMYK": [
-      36,
-      42,
-      100,
-      29
-    ],
-    "RGB": [
-      136,
-      115,
-      34
-    ],
+    "CMYK": [36, 42, 100, 29],
+    "RGB": [136, 115, 34],
     "hex": "#887322",
     "name": "苔绿",
     "pinyin": "tailv"
   },
   {
-    "CMYK": [
-      36,
-      42,
-      100,
-      30
-    ],
-    "RGB": [
-      134,
-      112,
-      24
-    ],
+    "CMYK": [36, 42, 100, 30],
+    "RGB": [134, 112, 24],
     "hex": "#867018",
     "name": "碧螺春绿",
     "pinyin": "biluochunlv"
   },
   {
-    "CMYK": [
-      47,
-      47,
-      65,
-      42
-    ],
-    "RGB": [
-      104,
-      94,
-      72
-    ],
+    "CMYK": [47, 47, 65, 42],
+    "RGB": [104, 94, 72],
     "hex": "#685e48",
     "name": "燕羽灰",
     "pinyin": "yanyuhui"
   },
   {
-    "CMYK": [
-      46,
-      47,
-      69,
-      42
-    ],
-    "RGB": [
-      105,
-      94,
-      69
-    ],
+    "CMYK": [46, 47, 69, 42],
+    "RGB": [105, 94, 69],
     "hex": "#695e45",
     "name": "蟹壳灰",
     "pinyin": "xiekehui"
   },
   {
-    "CMYK": [
-      48,
-      48,
-      100,
-      45
-    ],
-    "RGB": [
-      100,
-      88,
-      34
-    ],
+    "CMYK": [48, 48, 100, 45],
+    "RGB": [100, 88, 34],
     "hex": "#645822",
     "name": "潭水绿",
     "pinyin": "tanshuilv"
   },
   {
-    "CMYK": [
-      50,
-      50,
-      10,
-      48
-    ],
-    "RGB": [
-      94,
-      83,
-      20
-    ],
+    "CMYK": [50, 50, 10, 48],
+    "RGB": [94, 83, 20],
     "hex": "#5e5314",
     "name": "橄榄绿",
     "pinyin": "ganlanlv"
   },
   {
-    "CMYK": [
-      2,
-      6,
-      18,
-      0
-    ],
-    "RGB": [
-      249,
-      241,
-      219
-    ],
+    "CMYK": [2, 6, 18, 0],
+    "RGB": [249, 241, 219],
     "hex": "#f9f1db",
     "name": "蚌肉白",
     "pinyin": "bangroubai"
   },
   {
-    "CMYK": [
-      3,
-      10,
-      31,
-      0
-    ],
-    "RGB": [
-      248,
-      232,
-      193
-    ],
+    "CMYK": [3, 10, 31, 0],
+    "RGB": [248, 232, 193],
     "hex": "#f8e8c1",
     "name": "豆汁黄",
     "pinyin": "douzhihuang"
   },
   {
-    "CMYK": [
-      1,
-      19,
-      66,
-      0
-    ],
-    "RGB": [
-      249,
-      215,
-      112
-    ],
+    "CMYK": [1, 19, 66, 0],
+    "RGB": [249, 215, 112],
     "hex": "#f9d770",
     "name": "淡茧黄",
     "pinyin": "danjianhuang"
   },
   {
-    "CMYK": [
-      0,
-      26,
-      94,
-      0
-    ],
-    "RGB": [
-      255,
-      201,
-      12
-    ],
+    "CMYK": [0, 26, 94, 0],
+    "RGB": [255, 201, 12],
     "hex": "#ffc90c",
     "name": "乳鸭黄",
     "pinyin": "ruyahuang"
   },
   {
-    "CMYK": [
-      5,
-      11,
-      22,
-      0
-    ],
-    "RGB": [
-      242,
-      230,
-      206
-    ],
+    "CMYK": [5, 11, 22, 0],
+    "RGB": [242, 230, 206],
     "hex": "#f2e6ce",
     "name": "荔肉白",
     "pinyin": "liroubai"
   },
   {
-    "CMYK": [
-      5,
-      19,
-      50,
-      0
-    ],
-    "RGB": [
-      240,
-      214,
-      149
-    ],
+    "CMYK": [5, 19, 50, 0],
+    "RGB": [240, 214, 149],
     "hex": "#f0d695",
     "name": "象牙黄",
     "pinyin": "xiangyahuang"
   },
   {
-    "CMYK": [
-      3,
-      23,
-      69,
-      0
-    ],
-    "RGB": [
-      244,
-      206,
-      105
-    ],
+    "CMYK": [3, 23, 69, 0],
+    "RGB": [244, 206, 105],
     "hex": "#f4ce69",
     "name": "炒米黄",
     "pinyin": "chaomihuang"
   },
   {
-    "CMYK": [
-      1,
-      28,
-      89,
-      0
-    ],
-    "RGB": [
-      246,
-      196,
-      48
-    ],
+    "CMYK": [1, 28, 89, 0],
+    "RGB": [246, 196, 48],
     "hex": "#f6c430",
     "name": "鹦鹉冠黄",
     "pinyin": "yingwuguanhuang"
   },
   {
-    "CMYK": [
-      0,
-      30,
-      95,
-      0
-    ],
-    "RGB": [
-      249,
-      193,
-      22
-    ],
+    "CMYK": [0, 30, 95, 0],
+    "RGB": [249, 193, 22],
     "hex": "#f9c116",
     "name": "木瓜黄",
     "pinyin": "muguahuang"
   },
   {
-    "CMYK": [
-      0,
-      32,
-      95,
-      0
-    ],
-    "RGB": [
-      249,
-      189,
-      16
-    ],
+    "CMYK": [0, 32, 95, 0],
+    "RGB": [249, 189, 16],
     "hex": "#f9bd10",
     "name": "浅烙黄",
     "pinyin": "qianlaohuang"
   },
   {
-    "CMYK": [
-      11,
-      18,
-      39,
-      1
-    ],
-    "RGB": [
-      229,
-      211,
-      170
-    ],
+    "CMYK": [11, 18, 39, 1],
+    "RGB": [229, 211, 170],
     "hex": "#e5d3aa",
     "name": "莲子白",
     "pinyin": "lianzibai"
   },
   {
-    "CMYK": [
-      5,
-      35,
-      99,
-      0
-    ],
-    "RGB": [
-      232,
-      176,
-      4
-    ],
+    "CMYK": [5, 35, 99, 0],
+    "RGB": [232, 176, 4],
     "hex": "#e8b004",
     "name": "谷黄",
     "pinyin": "guhuang"
   },
   {
-    "CMYK": [
-      3,
-      36,
-      99,
-      0
-    ],
-    "RGB": [
-      235,
-      177,
-      13
-    ],
+    "CMYK": [3, 36, 99, 0],
+    "RGB": [235, 177, 13],
     "hex": "#ebb10d",
     "name": "栀子黄",
     "pinyin": "zhizihuang"
   },
   {
-    "CMYK": [
-      11,
-      39,
-      100,
-      2
-    ],
-    "RGB": [
-      217,
-      164,
-      14
-    ],
+    "CMYK": [11, 39, 100, 2],
+    "RGB": [217, 164, 14],
     "hex": "#d9a40e",
     "name": "芥黄",
     "pinyin": "jiehuang"
   },
   {
-    "CMYK": [
-      28,
-      27,
-      43,
-      8
-    ],
-    "RGB": [
-      181,
-      170,
-      144
-    ],
+    "CMYK": [28, 27, 43, 8],
+    "RGB": [181, 170, 144],
     "hex": "#b5aa90",
     "name": "银鼠灰",
     "pinyin": "yinshuhui"
   },
   {
-    "CMYK": [
-      26,
-      31,
-      57,
-      10
-    ],
-    "RGB": [
-      182,
-      164,
-      118
-    ],
+    "CMYK": [26, 31, 57, 10],
+    "RGB": [182, 164, 118],
     "hex": "#b6a476",
     "name": "尘灰",
     "pinyin": "chenhui"
   },
   {
-    "CMYK": [
-      21,
-      43,
-      100,
-      11
-    ],
-    "RGB": [
-      183,
-      141,
-      18
-    ],
+    "CMYK": [21, 43, 100, 11],
+    "RGB": [183, 141, 18],
     "hex": "#b78d12",
     "name": "枯绿",
     "pinyin": "kulv"
   },
   {
-    "CMYK": [
-      35,
-      44,
-      80,
-      30
-    ],
-    "RGB": [
-      135,
-      114,
-      62
-    ],
+    "CMYK": [35, 44, 80, 30],
+    "RGB": [135, 114, 62],
     "hex": "#87723e",
     "name": "鲛青",
     "pinyin": "jiaoqing"
   },
   {
-    "CMYK": [
-      32,
-      50,
-      100,
-      31
-    ],
-    "RGB": [
-      135,
-      104,
-      24
-    ],
+    "CMYK": [32, 50, 100, 31],
+    "RGB": [135, 104, 24],
     "hex": "#876818",
     "name": "粽叶绿",
     "pinyin": "zongyelv"
   },
   {
-    "CMYK": [
-      31,
-      51,
-      100,
-      30
-    ],
-    "RGB": [
-      138,
-      105,
-      19
-    ],
+    "CMYK": [31, 51, 100, 30],
+    "RGB": [138, 105, 19],
     "hex": "#8a6913",
     "name": "灰绿",
     "pinyin": "huilv"
   },
   {
-    "CMYK": [
-      52,
-      56,
-      64,
-      62
-    ],
-    "RGB": [
-      74,
-      64,
-      53
-    ],
+    "CMYK": [52, 56, 64, 62],
+    "RGB": [74, 64, 53],
     "hex": "#4a4035",
     "name": "鹤灰",
     "pinyin": "hehui"
   },
   {
-    "CMYK": [
-      48,
-      58,
-      70,
-      62
-    ],
-    "RGB": [
-      77,
-      64,
-      48
-    ],
+    "CMYK": [48, 58, 70, 62],
+    "RGB": [77, 64, 48],
     "hex": "#4d4030",
     "name": "淡松烟",
     "pinyin": "dansongyan"
   },
   {
-    "CMYK": [
-      45,
-      56,
-      100,
-      56
-    ],
-    "RGB": [
-      88,
-      71,
-      23
-    ],
+    "CMYK": [45, 56, 100, 56],
+    "RGB": [88, 71, 23],
     "hex": "#584717",
     "name": "暗海水绿",
     "pinyin": "anhaishuilv"
   },
   {
-    "CMYK": [
-      45,
-      55,
-      100,
-      54
-    ],
-    "RGB": [
-      91,
-      73,
-      19
-    ],
+    "CMYK": [45, 55, 100, 54],
+    "RGB": [91, 73, 19],
     "hex": "#5b4913",
     "name": "棕榈绿",
     "pinyin": "zonglvlv"
   },
   {
-    "CMYK": [
-      1,
-      11,
-      24,
-      0
-    ],
-    "RGB": [
-      249,
-      223,
-      205
-    ],
+    "CMYK": [1, 11, 24, 0],
+    "RGB": [249, 223, 205],
     "hex": "#f9e9cd",
     "name": "米色",
     "pinyin": "mise"
   },
   {
-    "CMYK": [
-      1,
-      15,
-      38,
-      0
-    ],
-    "RGB": [
-      248,
-      224,
-      176
-    ],
+    "CMYK": [1, 15, 38, 0],
+    "RGB": [248, 224, 176],
     "hex": "#f8e0b0",
     "name": "淡肉色",
     "pinyin": "danrouse"
   },
   {
-    "CMYK": [
-      0,
-      23,
-      59,
-      0
-    ],
-    "RGB": [
-      249,
-      210,
-      125
-    ],
+    "CMYK": [0, 23, 59, 0],
+    "RGB": [249, 210, 125],
     "hex": "#f9d27d",
     "name": "麦芽糖黄",
     "pinyin": "maiyatanghuang"
   },
   {
-    "CMYK": [
-      0,
-      34,
-      93,
-      0
-    ],
-    "RGB": [
-      254,
-      186,
-      7
-    ],
+    "CMYK": [0, 34, 93, 0],
+    "RGB": [254, 186, 7],
     "hex": "#feba07",
     "name": "琥珀黄",
     "pinyin": "hupohuang"
   },
   {
-    "CMYK": [
-      1,
-      31,
-      79,
-      0
-    ],
-    "RGB": [
-      243,
-      191,
-      76
-    ],
+    "CMYK": [1, 31, 79, 0],
+    "RGB": [243, 191, 76],
     "hex": "#f3bf4c",
     "name": "甘草黄",
     "pinyin": "gancaohuang"
   },
   {
-    "CMYK": [
-      0,
-      33,
-      83,
-      0
-    ],
-    "RGB": [
-      248,
-      188,
-      49
-    ],
+    "CMYK": [0, 33, 83, 0],
+    "RGB": [248, 188, 49],
     "hex": "#f8bc31",
     "name": "初熟杏黄",
     "pinyin": "chushuxinghuang"
   },
   {
-    "CMYK": [
-      10,
-      27,
-      59,
-      1
-    ],
-    "RGB": [
-      226,
-      193,
-      124
-    ],
+    "CMYK": [10, 27, 59, 1],
+    "RGB": [226, 193, 124],
     "hex": "#e2c17c",
     "name": "浅驼色",
     "pinyin": "qiantuose"
   },
   {
-    "CMYK": [
-      7,
-      32,
-      78,
-      1
-    ],
-    "RGB": [
-      229,
-      183,
-      81
-    ],
+    "CMYK": [7, 32, 78, 1],
+    "RGB": [229, 183, 81],
     "hex": "#e5b751",
     "name": "沙石黄",
     "pinyin": "shashihuang"
   },
   {
-    "CMYK": [
-      3,
-      38,
-      97,
-      0
-    ],
-    "RGB": [
-      234,
-      173,
-      26
-    ],
+    "CMYK": [3, 38, 97, 0],
+    "RGB": [234, 173, 26],
     "hex": "#eaad1a",
     "name": "虎皮黄",
     "pinyin": "hupihuang"
   },
   {
-    "CMYK": [
-      12,
-      41,
-      98,
-      2
-    ],
-    "RGB": [
-      214,
-      160,
-      29
-    ],
+    "CMYK": [12, 41, 98, 2],
+    "RGB": [214, 160, 29],
     "hex": "#d6a01d",
     "name": "土黄",
     "pinyin": "tuhuang"
   },
   {
-    "CMYK": [
-      28,
-      28,
-      41,
-      9
-    ],
-    "RGB": [
-      180,
-      169,
-      146
-    ],
+    "CMYK": [28, 28, 41, 9],
+    "RGB": [180, 169, 146],
     "hex": "#b4a992",
     "name": "百灵鸟灰",
     "pinyin": "bailingniaohui"
   },
   {
-    "CMYK": [
-      21,
-      44,
-      97,
-      11
-    ],
-    "RGB": [
-      183,
-      139,
-      38
-    ],
+    "CMYK": [21, 44, 97, 11],
+    "RGB": [183, 139, 38],
     "hex": "#b78b26",
     "name": "山鸡黄",
     "pinyin": "shanjihuang"
   },
   {
-    "CMYK": [
-      35,
-      47,
-      71,
-      33
-    ],
-    "RGB": [
-      130,
-      107,
-      72
-    ],
+    "CMYK": [35, 47, 71, 33],
+    "RGB": [130, 107, 72],
     "hex": "#826b48",
     "name": "龟背黄",
     "pinyin": "guibeihuang"
   },
   {
-    "CMYK": [
-      34,
-      52,
-      85,
-      35
-    ],
-    "RGB": [
-      128,
-      99,
-      50
-    ],
+    "CMYK": [34, 52, 85, 35],
+    "RGB": [128, 99, 50],
     "hex": "#806332",
     "name": "苍黄",
     "pinyin": "canghuang"
   },
   {
-    "CMYK": [
-      32,
-      56,
-      96,
-      34
-    ],
-    "RGB": [
-      129,
-      95,
-      37
-    ],
+    "CMYK": [32, 56, 96, 34],
+    "RGB": [129, 95, 37],
     "hex": "#815f25",
     "name": "莱阳梨黄",
     "pinyin": "laiyanglihuang"
   },
   {
-    "CMYK": [
-      31,
-      57,
-      100,
-      33
-    ],
-    "RGB": [
-      131,
-      94,
-      29
-    ],
+    "CMYK": [31, 57, 100, 33],
+    "RGB": [131, 94, 29],
     "hex": "#835e1d",
     "name": "蜴蜊绿",
     "pinyin": "yililv"
   },
   {
-    "CMYK": [
-      46,
-      59,
-      68,
-      61
-    ],
-    "RGB": [
-      79,
-      64,
-      50
-    ],
+    "CMYK": [46, 59, 68, 61],
+    "RGB": [79, 64, 50],
     "hex": "#4f4032",
     "name": "松鼠灰",
     "pinyin": "songshuhui"
   },
   {
-    "CMYK": [
-      44,
-      61,
-      76,
-      62
-    ],
-    "RGB": [
-      80,
-      62,
-      42
-    ],
+    "CMYK": [44, 61, 76, 62],
+    "RGB": [80, 62, 42],
     "hex": "#503e2a",
     "name": "橄榄灰",
     "pinyin": "ganlanhui"
   },
   {
-    "CMYK": [
-      43,
-      63,
-      88,
-      61
-    ],
-    "RGB": [
-      81,
-      60,
-      32
-    ],
+    "CMYK": [43, 63, 88, 61],
+    "RGB": [81, 60, 32],
     "hex": "#513c20",
     "name": "蟹壳绿",
     "pinyin": "xiekelv"
   },
   {
-    "CMYK": [
-      42,
-      64,
-      94,
-      60
-    ],
-    "RGB": [
-      83,
-      60,
-      27
-    ],
+    "CMYK": [42, 64, 94, 60],
+    "RGB": [83, 60, 27],
     "hex": "#533c1b",
     "name": "古铜绿",
     "pinyin": "gutonglv"
   },
   {
-    "CMYK": [
-      41,
-      66,
-      94,
-      60
-    ],
-    "RGB": [
-      85,
-      59,
-      24
-    ],
+    "CMYK": [41, 66, 94, 60],
+    "RGB": [85, 59, 24],
     "hex": "#553b18",
     "name": "焦茶绿",
     "pinyin": "jiaochalv"
   },
   {
-    "CMYK": [
-      1,
-      7,
-      13,
-      0
-    ],
-    "RGB": [
-      251,
-      242,
-      227
-    ],
+    "CMYK": [1, 7, 13, 0],
+    "RGB": [251, 242, 227],
     "hex": "#fbf2e3",
     "name": "粉白",
     "pinyin": "fenbai"
   },
   {
-    "CMYK": [
-      1,
-      12,
-      22,
-      0
-    ],
-    "RGB": [
-      249,
-      232,
-      208
-    ],
+    "CMYK": [1, 12, 22, 0],
+    "RGB": [249, 232, 208],
     "hex": "#f9e8d0",
     "name": "落英淡粉",
     "pinyin": "luoyingdanfen"
   },
   {
-    "CMYK": [
-      0,
-      27,
-      51,
-      0
-    ],
-    "RGB": [
-      249,
-      203,
-      139
-    ],
+    "CMYK": [0, 27, 51, 0],
+    "RGB": [249, 203, 139],
     "hex": "#f9cb8b",
     "name": "瓜瓤粉",
     "pinyin": "guarangfen"
   },
   {
-    "CMYK": [
-      0,
-      36,
-      72,
-      0
-    ],
-    "RGB": [
-      251,
-      185,
-      87
-    ],
+    "CMYK": [0, 36, 72, 0],
+    "RGB": [251, 185, 87],
     "hex": "#fbb957",
     "name": "蜜黄",
     "pinyin": "mihuang"
   },
   {
-    "CMYK": [
-      0,
-      44,
-      91,
-      0
-    ],
-    "RGB": [
-      255,
-      166,
-      15
-    ],
+    "CMYK": [0, 44, 91, 0],
+    "RGB": [255, 166, 15],
     "hex": "#ffa60f",
     "name": "金叶黄",
     "pinyin": "jinyehuang"
   },
   {
-    "CMYK": [
-      0,
-      43,
-      82,
-      0
-    ],
-    "RGB": [
-      244,
-      168,
-      58
-    ],
+    "CMYK": [0, 43, 82, 0],
+    "RGB": [244, 168, 58],
     "hex": "#f4a83a",
     "name": "金莺黄",
     "pinyin": "jinyinghuang"
   },
   {
-    "CMYK": [
-      8,
-      31,
-      50,
-      1
-    ],
-    "RGB": [
-      227,
-      189,
-      141
-    ],
+    "CMYK": [8, 31, 50, 1],
+    "RGB": [227, 189, 141],
     "hex": "#e3bd8d",
     "name": "鹿角棕",
     "pinyin": "lujiaozong"
   },
   {
-    "CMYK": [
-      2,
-      44,
-      83,
-      0
-    ],
-    "RGB": [
-      231,
-      162,
-      63
-    ],
+    "CMYK": [2, 44, 83, 0],
+    "RGB": [231, 162, 63],
     "hex": "#e7a23f",
     "name": "凋叶棕",
     "pinyin": "diaoyezong"
   },
   {
-    "CMYK": [
-      10,
-      41,
-      72,
-      1
-    ],
-    "RGB": [
-      218,
-      164,
-      90
-    ],
+    "CMYK": [10, 41, 72, 1],
+    "RGB": [218, 164, 90],
     "hex": "#daa45a",
     "name": "玳瑁黄",
     "pinyin": "daimaohuang"
   },
   {
-    "CMYK": [
-      7,
-      45,
-      82,
-      1
-    ],
-    "RGB": [
-      222,
-      158,
-      68
-    ],
+    "CMYK": [7, 45, 82, 1],
+    "RGB": [222, 158, 68],
     "hex": "#de9e44",
     "name": "软木黄",
     "pinyin": "ruanmuhuang"
   },
   {
-    "CMYK": [
-      6,
-      51,
-      95,
-      1
-    ],
-    "RGB": [
-      220,
-      145,
-      35
-    ],
+    "CMYK": [6, 51, 95, 1],
+    "RGB": [220, 145, 35],
     "hex": "#dc9123",
     "name": "风帆黄",
     "pinyin": "fengfanhuang"
   },
   {
-    "CMYK": [
-      19,
-      44,
-      75,
-      7
-    ],
-    "RGB": [
-      192,
-      147,
-      81
-    ],
+    "CMYK": [19, 44, 75, 7],
+    "RGB": [192, 147, 81],
     "hex": "#c09351",
     "name": "桂皮淡棕",
     "pinyin": "guipidanzong"
   },
   {
-    "CMYK": [
-      32,
-      40,
-      53,
-      22
-    ],
-    "RGB": [
-      151,
-      132,
-      108
-    ],
+    "CMYK": [32, 40, 53, 22],
+    "RGB": [151, 132, 108],
     "hex": "#97846c",
     "name": "猴毛灰",
     "pinyin": "houmaohui"
   },
   {
-    "CMYK": [
-      27,
-      60,
-      97,
-      21
-    ],
-    "RGB": [
-      152,
-      101,
-      36
-    ],
+    "CMYK": [27, 60, 97, 21],
+    "RGB": [152, 101, 36],
     "hex": "#986524",
     "name": "山鸡褐",
     "pinyin": "shanjihe"
   },
   {
-    "CMYK": [
-      37,
-      65,
-      84,
-      49
-    ],
-    "RGB": [
-      102,
-      70,
-      42
-    ],
+    "CMYK": [37, 65, 84, 49],
+    "RGB": [102, 70, 42],
     "hex": "#66462a",
     "name": "驼色",
     "pinyin": "tuose"
   },
   {
-    "CMYK": [
-      38,
-      69,
-      90,
-      54
-    ],
-    "RGB": [
-      93,
-      61,
-      33
-    ],
+    "CMYK": [38, 69, 90, 54],
+    "RGB": [93, 61, 33],
     "hex": "#5d3d21",
     "name": "茶褐",
     "pinyin": "chahe"
   },
   {
-    "CMYK": [
-      37,
-      74,
-      96,
-      55
-    ],
-    "RGB": [
-      92,
-      55,
-      25
-    ],
+    "CMYK": [37, 74, 96, 55],
+    "RGB": [92, 55, 25],
     "hex": "#5c3719",
     "name": "古铜褐",
     "pinyin": "gutonghe"
   },
   {
-    "CMYK": [
-      0,
-      10,
-      14,
-      0
-    ],
-    "RGB": [
-      251,
-      236,
-      222
-    ],
+    "CMYK": [0, 10, 14, 0],
+    "RGB": [251, 236, 222],
     "hex": "#fbecde",
     "name": "荷花白",
     "pinyin": "hehuabai"
   },
   {
-    "CMYK": [
-      0,
-      40,
-      52,
-      0
-    ],
-    "RGB": [
-      248,
-      179,
-      127
-    ],
+    "CMYK": [0, 40, 52, 0],
+    "RGB": [248, 179, 127],
     "hex": "#f8b37f",
     "name": "玫瑰粉",
     "pinyin": "meiguifen"
   },
   {
-    "CMYK": [
-      0,
-      62,
-      88,
-      0
-    ],
-    "RGB": [
-      249,
-      125,
-      28
-    ],
+    "CMYK": [0, 62, 88, 0],
+    "RGB": [249, 125, 28],
     "hex": "#f97d1c",
     "name": "橘橙",
     "pinyin": "jucheng"
   },
   {
-    "CMYK": [
-      0,
-      62,
-      85,
-      0
-    ],
-    "RGB": [
-      250,
-      126,
-      35
-    ],
+    "CMYK": [0, 62, 85, 0],
+    "RGB": [250, 126, 35],
     "hex": "#fa7e23",
     "name": "美人焦橙",
     "pinyin": "meirenjiaocheng"
   },
   {
-    "CMYK": [
-      0,
-      28,
-      25,
-      0
-    ],
-    "RGB": [
-      247,
-      205,
-      188
-    ],
+    "CMYK": [0, 28, 25, 0],
+    "RGB": [247, 205, 188],
     "hex": "#f7cdbc",
     "name": "润红",
     "pinyin": "runhong"
   },
   {
-    "CMYK": [
-      0,
-      28,
-      22,
-      0
-    ],
-    "RGB": [
-      246,
-      206,
-      193
-    ],
+    "CMYK": [0, 28, 22, 0],
+    "RGB": [246, 206, 193],
     "hex": "#f6cec1",
     "name": "淡桃红",
     "pinyin": "dantaohong"
   },
   {
-    "CMYK": [
-      0,
-      53,
-      65,
-      0
-    ],
-    "RGB": [
-      240,
-      148,
-      93
-    ],
+    "CMYK": [0, 53, 65, 0],
+    "RGB": [240, 148, 93],
     "hex": "#f0945d",
     "name": "海螺橙",
     "pinyin": "hailuocheng"
   },
   {
-    "CMYK": [
-      0,
-      44,
-      32,
-      0
-    ],
-    "RGB": [
-      240,
-      173,
-      160
-    ],
+    "CMYK": [0, 44, 32, 0],
+    "RGB": [240, 173, 160],
     "hex": "#f0ada0",
     "name": "桃红",
     "pinyin": "taohong"
   },
   {
-    "CMYK": [
-      0,
-      45,
-      34,
-      0
-    ],
-    "RGB": [
-      238,
-      170,
-      156
-    ],
+    "CMYK": [0, 45, 34, 0],
+    "RGB": [238, 170, 156],
     "hex": "#eeaa9c",
     "name": "颊红",
     "pinyin": "jiahong"
   },
   {
-    "CMYK": [
-      0,
-      49,
-      41,
-      0
-    ],
-    "RGB": [
-      238,
-      160,
-      140
-    ],
+    "CMYK": [0, 49, 41, 0],
+    "RGB": [238, 160, 140],
     "hex": "#eea08c",
     "name": "淡罂粟红",
     "pinyin": "danyingsuhong"
   },
   {
-    "CMYK": [
-      0,
-      58,
-      67,
-      0
-    ],
-    "RGB": [
-      234,
-      137,
-      88
-    ],
+    "CMYK": [0, 58, 67, 0],
+    "RGB": [234, 137, 88],
     "hex": "#ea8958",
     "name": "晨曦红",
     "pinyin": "chenxihong"
   },
   {
-    "CMYK": [
-      0,
-      65,
-      80,
-      0
-    ],
-    "RGB": [
-      242,
-      118,
-      53
-    ],
+    "CMYK": [0, 65, 80, 0],
+    "RGB": [242, 118, 53],
     "hex": "#f27635",
     "name": "蟹壳红",
     "pinyin": "xiekehong"
   },
   {
-    "CMYK": [
-      0,
-      69,
-      86,
-      0
-    ],
-    "RGB": [
-      248,
-      107,
-      29
-    ],
+    "CMYK": [0, 69, 86, 0],
+    "RGB": [248, 107, 29],
     "hex": "#f86b1d",
     "name": "金莲花橙",
     "pinyin": "jinlianhuacheng"
   },
   {
-    "CMYK": [
-      0,
-      69,
-      70,
-      0
-    ],
-    "RGB": [
-      239,
-      111,
-      72
-    ],
+    "CMYK": [0, 69, 70, 0],
+    "RGB": [239, 111, 72],
     "hex": "#ef6f48",
     "name": "草莓红",
     "pinyin": "caomeihong"
   },
   {
-    "CMYK": [
-      0,
-      72,
-      82,
-      0
-    ],
-    "RGB": [
-      239,
-      99,
-      43
-    ],
+    "CMYK": [0, 72, 82, 0],
+    "RGB": [239, 99, 43],
     "hex": "#ef632b",
     "name": "龙睛鱼红",
     "pinyin": "longjingyuhong"
   },
   {
-    "CMYK": [
-      0,
-      81,
-      84,
-      0
-    ],
-    "RGB": [
-      241,
-      68,
-      29
-    ],
+    "CMYK": [0, 81, 84, 0],
+    "RGB": [241, 68, 29],
     "hex": "#f1441d",
     "name": "蜻蜓红",
     "pinyin": "qingtinghong"
   },
   {
-    "CMYK": [
-      0,
-      80,
-      83,
-      0
-    ],
-    "RGB": [
-      240,
-      75,
-      34
-    ],
+    "CMYK": [0, 80, 83, 0],
+    "RGB": [240, 75, 34],
     "hex": "#f04b22",
     "name": "大红",
     "pinyin": "dahong"
   },
   {
-    "CMYK": [
-      0,
-      80,
-      85,
-      0
-    ],
-    "RGB": [
-      242,
-      72,
-      27
-    ],
+    "CMYK": [0, 80, 85, 0],
+    "RGB": [242, 72, 27],
     "hex": "#f2481b",
     "name": "柿红",
     "pinyin": "shihong"
   },
   {
-    "CMYK": [
-      0,
-      80,
-      85,
-      0
-    ],
-    "RGB": [
-      243,
-      71,
-      24
-    ],
+    "CMYK": [0, 80, 85, 0],
+    "RGB": [243, 71, 24],
     "hex": "#f34718",
     "name": "榴花红",
     "pinyin": "liuhuahong"
   },
   {
-    "CMYK": [
-      0,
-      83,
-      87,
-      0
-    ],
-    "RGB": [
-      244,
-      62,
-      6
-    ],
+    "CMYK": [0, 83, 87, 0],
+    "RGB": [244, 62, 6],
     "hex": "#f43e06",
     "name": "银朱",
     "pinyin": "yinzhu"
   },
   {
-    "CMYK": [
-      0,
-      78,
-      83,
-      0
-    ],
-    "RGB": [
-      237,
-      81,
-      38
-    ],
+    "CMYK": [0, 78, 83, 0],
+    "RGB": [237, 81, 38],
     "hex": "#ed5126",
     "name": "朱红",
     "pinyin": "zhuhong"
   },
   {
-    "CMYK": [
-      0,
-      50,
-      68,
-      0
-    ],
-    "RGB": [
-      240,
-      156,
-      90
-    ],
+    "CMYK": [0, 50, 68, 0],
+    "RGB": [240, 156, 90],
     "hex": "#f09c5a",
     "name": "鲑鱼红",
     "pinyin": "guiyuhong"
   },
   {
-    "CMYK": [
-      5,
-      69,
-      87,
-      0
-    ],
-    "RGB": [
-      242,
-      123,
-      31
-    ],
+    "CMYK": [5, 69, 87, 0],
+    "RGB": [242, 123, 31],
     "hex": "#f26b1f",
     "name": "金黄",
     "pinyin": "jinhuang"
   },
   {
-    "CMYK": [
-      7,
-      52,
-      71,
-      1
-    ],
-    "RGB": [
-      217,
-      145,
-      86
-    ],
+    "CMYK": [7, 52, 71, 1],
+    "RGB": [217, 145, 86],
     "hex": "#d99156",
     "name": "鹿皮褐",
     "pinyin": "lupihe"
   },
   {
-    "CMYK": [
-      4,
-      57,
-      82,
-      1
-    ],
-    "RGB": [
-      219,
-      133,
-      64
-    ],
+    "CMYK": [4, 57, 82, 1],
+    "RGB": [219, 133, 64],
     "hex": "#db8540",
     "name": "醉瓜肉",
     "pinyin": "zuiguarou"
   },
   {
-    "CMYK": [
-      0,
-      64,
-      93,
-      0
-    ],
-    "RGB": [
-      222,
-      118,
-      34
-    ],
+    "CMYK": [0, 64, 93, 0],
+    "RGB": [222, 118, 34],
     "hex": "#de7622",
     "name": "麂棕",
     "pinyin": "jizong"
   },
   {
-    "CMYK": [
-      22,
-      28,
-      34,
-      6
-    ],
-    "RGB": [
-      193,
-      178,
-      163
-    ],
+    "CMYK": [22, 28, 34, 6],
+    "RGB": [193, 178, 163],
     "hex": "#c1b2a3",
     "name": "淡银灰",
     "pinyin": "danyinhui"
   },
   {
-    "CMYK": [
-      18,
-      57,
-      76,
-      6
-    ],
-    "RGB": [
-      190,
-      126,
-      74
-    ],
+    "CMYK": [18, 57, 76, 6],
+    "RGB": [190, 126, 74],
     "hex": "#be7e4a",
     "name": "淡赭",
     "pinyin": "danzhe"
   },
   {
-    "CMYK": [
-      14,
-      69,
-      100,
-      4
-    ],
-    "RGB": [
-      193,
-      101,
-      26
-    ],
+    "CMYK": [14, 69, 100, 4],
+    "RGB": [193, 101, 26],
     "hex": "#c1651a",
     "name": "槟榔综",
     "pinyin": "binglangzong"
   },
   {
-    "CMYK": [
-      34,
-      42,
-      46,
-      23
-    ],
-    "RGB": [
-      145,
-      128,
-      114
-    ],
+    "CMYK": [34, 42, 46, 23],
+    "RGB": [145, 128, 114],
     "hex": "#918072",
     "name": "银灰",
     "pinyin": "yinhui"
   },
   {
-    "CMYK": [
-      42,
-      40,
-      46,
-      20
-    ],
-    "RGB": [
-      154,
-      136,
-      120
-    ],
+    "CMYK": [42, 40, 46, 20],
+    "RGB": [154, 136, 120],
     "hex": "#9a8878",
     "name": "海鸥灰",
     "pinyin": "haiouhui"
   },
   {
-    "CMYK": [
-      27,
-      69,
-      85,
-      22
-    ],
-    "RGB": [
-      148,
-      88,
-      51
-    ],
+    "CMYK": [27, 69, 85, 22],
+    "RGB": [148, 88, 51],
     "hex": "#945833",
     "name": "淡咖啡",
     "pinyin": "dankafei"
   },
   {
-    "CMYK": [
-      26,
-      76,
-      97,
-      20
-    ],
-    "RGB": [
-      150,
-      77,
-      34
-    ],
+    "CMYK": [26, 76, 97, 20],
+    "RGB": [150, 77, 34],
     "hex": "#964d22",
     "name": "岩石棕",
     "pinyin": "yanshizong"
   },
   {
-    "CMYK": [
-      25,
-      80,
-      100,
-      20
-    ],
-    "RGB": [
-      149,
-      68,
-      22
-    ],
+    "CMYK": [25, 80, 100, 20],
+    "RGB": [149, 68, 22],
     "hex": "#954416",
     "name": "芒果棕",
     "pinyin": "mangguozong"
   },
   {
-    "CMYK": [
-      39,
-      60,
-      58,
-      51
-    ],
-    "RGB": [
-      98,
-      73,
-      65
-    ],
+    "CMYK": [39, 60, 58, 51],
+    "RGB": [98, 73, 65],
     "hex": "#624941",
     "name": "石板灰",
     "pinyin": "shibanhui"
   },
   {
-    "CMYK": [
-      38,
-      63,
-      63,
-      50
-    ],
-    "RGB": [
-      100,
-      72,
-      61
-    ],
+    "CMYK": [38, 63, 63, 50],
+    "RGB": [100, 72, 61],
     "hex": "#64483d",
     "name": "珠母灰",
     "pinyin": "zhumuhui"
   },
   {
-    "CMYK": [
-      32,
-      83,
-      96,
-      41
-    ],
-    "RGB": [
-      113,
-      54,
-      29
-    ],
+    "CMYK": [32, 83, 96, 41],
+    "RGB": [113, 54, 29],
     "hex": "#71361d",
     "name": "丁香棕",
     "pinyin": "dingxiangzong"
   },
   {
-    "CMYK": [
-      30,
-      87,
-      100,
-      38
-    ],
-    "RGB": [
-      117,
-      49,
-      23
-    ],
+    "CMYK": [30, 87, 100, 38],
+    "RGB": [117, 49, 23],
     "hex": "#753117",
     "name": "咖啡",
     "pinyin": "kafei"
   },
   {
-    "CMYK": [
-      30,
-      89,
-      100,
-      39
-    ],
-    "RGB": [
-      115,
-      46,
-      18
-    ],
+    "CMYK": [30, 89, 100, 39],
+    "RGB": [115, 46, 18],
     "hex": "#732e12",
     "name": "筍皮棕",
     "pinyin": "sunpizong"
   },
   {
-    "CMYK": [
-      0,
-      72,
-      86,
-      0
-    ],
-    "RGB": [
-      252,
-      99,
-      21
-    ],
+    "CMYK": [0, 72, 86, 0],
+    "RGB": [252, 99, 21],
     "hex": "#fc6315",
     "name": "燕颔红",
     "pinyin": "yanhanhong"
   },
   {
-    "CMYK": [
-      3,
-      38,
-      39,
-      0
-    ],
-    "RGB": [
-      232,
-      180,
-      154
-    ],
+    "CMYK": [3, 38, 39, 0],
+    "RGB": [232, 180, 154],
     "hex": "#e8b49a",
     "name": "玉粉红",
     "pinyin": "yufenhong"
   },
   {
-    "CMYK": [
-      0,
-      70,
-      87,
-      0
-    ],
-    "RGB": [
-      228,
-      104,
-      40
-    ],
+    "CMYK": [0, 70, 87, 0],
+    "RGB": [228, 104, 40],
     "hex": "#e46828",
     "name": "金驼",
     "pinyin": "jintuo"
   },
   {
-    "CMYK": [
-      0,
-      76,
-      97,
-      0
-    ],
-    "RGB": [
-      216,
-      89,
-      22
-    ],
+    "CMYK": [0, 76, 97, 0],
+    "RGB": [216, 89, 22],
     "hex": "#d85916",
     "name": "铁棕",
     "pinyin": "tiezong"
   },
   {
-    "CMYK": [
-      23,
-      35,
-      38,
-      10
-    ],
-    "RGB": [
-      183,
-      160,
-      145
-    ],
+    "CMYK": [23, 35, 38, 10],
+    "RGB": [183, 160, 145],
     "hex": "#b7a091",
     "name": "蛛网灰",
     "pinyin": "zhuwanghui"
   },
   {
-    "CMYK": [
-      16,
-      77,
-      100,
-      6
-    ],
-    "RGB": [
-      183,
-      81,
-      29
-    ],
+    "CMYK": [16, 77, 100, 6],
+    "RGB": [183, 81, 29],
     "hex": "#b7511d",
     "name": "淡可可棕",
     "pinyin": "dankekezong"
   },
   {
-    "CMYK": [
-      31,
-      63,
-      66,
-      31
-    ],
-    "RGB": [
-      139,
-      97,
-      77
-    ],
+    "CMYK": [31, 63, 66, 31],
+    "RGB": [139, 97, 77],
     "hex": "#8b614d",
     "name": "中红灰",
     "pinyin": "zhonghonghui"
   },
   {
-    "CMYK": [
-      28,
-      76,
-      82,
-      26
-    ],
-    "RGB": [
-      140,
-      75,
-      49
-    ],
+    "CMYK": [28, 76, 82, 26],
+    "RGB": [140, 75, 49],
     "hex": "#8c4b31",
     "name": "淡土黄",
     "pinyin": "dantuhuang"
   },
   {
-    "CMYK": [
-      28,
-      83,
-      92,
-      28
-    ],
-    "RGB": [
-      135,
-      61,
-      36
-    ],
+    "CMYK": [28, 83, 92, 28],
+    "RGB": [135, 61, 36],
     "hex": "#873d24",
     "name": "淡豆沙",
     "pinyin": "dandousha"
   },
   {
-    "CMYK": [
-      27,
-      85,
-      98,
-      27
-    ],
-    "RGB": [
-      136,
-      58,
-      30
-    ],
+    "CMYK": [27, 85, 98, 27],
+    "RGB": [136, 58, 30],
     "hex": "#883a1e",
     "name": "椰壳棕",
     "pinyin": "yekezong"
   },
   {
-    "CMYK": [
-      40,
-      64,
-      61,
-      56
-    ],
-    "RGB": [
-      91,
-      66,
-      58
-    ],
+    "CMYK": [40, 64, 61, 56],
+    "RGB": [91, 66, 58],
     "hex": "#5b423a",
     "name": "淡铁灰",
     "pinyin": "dantiehui"
   },
   {
-    "CMYK": [
-      37,
-      72,
-      72,
-      52
-    ],
-    "RGB": [
-      96,
-      61,
-      48
-    ],
+    "CMYK": [37, 72, 72, 52],
+    "RGB": [96, 61, 48],
     "hex": "#603d30",
     "name": "中灰驼",
     "pinyin": "zhonghuituo"
   },
   {
-    "CMYK": [
-      34,
-      82,
-      85,
-      47
-    ],
-    "RGB": [
-      103,
-      52,
-      36
-    ],
+    "CMYK": [34, 82, 85, 47],
+    "RGB": [103, 52, 36],
     "hex": "#673424",
     "name": "淡栗棕",
     "pinyin": "danlizong"
   },
   {
-    "CMYK": [
-      33,
-      89,
-      92,
-      48
-    ],
-    "RGB": [
-      101,
-      43,
-      28
-    ],
+    "CMYK": [33, 89, 92, 48],
+    "RGB": [101, 43, 28],
     "hex": "#652b1c",
     "name": "可可棕",
     "pinyin": "kekezong"
   },
   {
-    "CMYK": [
-      32,
-      90,
-      95,
-      45
-    ],
-    "RGB": [
-      105,
-      42,
-      27
-    ],
+    "CMYK": [32, 90, 95, 45],
+    "RGB": [105, 42, 27],
     "hex": "#692a1b",
     "name": "柞叶棕",
     "pinyin": "zhayezong"
   },
   {
-    "CMYK": [
-      0,
-      53,
-      59,
-      0
-    ],
-    "RGB": [
-      251,
-      153,
-      104
-    ],
+    "CMYK": [0, 53, 59, 0],
+    "RGB": [251, 153, 104],
     "hex": "#fb9968",
     "name": "野蔷薇红",
     "pinyin": "yeqiangweihong"
   },
   {
-    "CMYK": [
-      0,
-      65,
-      79,
-      0
-    ],
-    "RGB": [
-      252,
-      121,
-      48
-    ],
+    "CMYK": [0, 65, 79, 0],
+    "RGB": [252, 121, 48],
     "hex": "#fc7930",
     "name": "菠萝红",
     "pinyin": "boluohong"
   },
   {
-    "CMYK": [
-      2,
-      31,
-      31,
-      0
-    ],
-    "RGB": [
-      237,
-      195,
-      174
-    ],
+    "CMYK": [2, 31, 31, 0],
+    "RGB": [237, 195, 174],
     "hex": "#edc3ae",
     "name": "藕荷",
     "pinyin": "ouhe"
   },
   {
-    "CMYK": [
-      0,
-      70,
-      91,
-      0
-    ],
-    "RGB": [
-      225,
-      103,
-      35
-    ],
+    "CMYK": [0, 70, 91, 0],
+    "RGB": [225, 103, 35],
     "hex": "#e16723",
     "name": "陶瓷红",
     "pinyin": "taocihong"
   },
   {
-    "CMYK": [
-      16,
-      23,
-      27,
-      2
-    ],
-    "RGB": [
-      212,
-      196,
-      183
-    ],
+    "CMYK": [16, 23, 27, 2],
+    "RGB": [212, 196, 183],
     "hex": "#d4c4b7",
     "name": "晓灰",
     "pinyin": "xiaohui"
   },
   {
-    "CMYK": [
-      9,
-      64,
-      78,
-      1
-    ],
-    "RGB": [
-      207,
-      117,
-      67
-    ],
+    "CMYK": [9, 64, 78, 1],
+    "RGB": [207, 117, 67],
     "hex": "#cf7543",
     "name": "余烬红",
     "pinyin": "yujinhong"
   },
   {
-    "CMYK": [
-      8,
-      72,
-      93,
-      1
-    ],
-    "RGB": [
-      205,
-      98,
-      39
-    ],
+    "CMYK": [8, 72, 93, 1],
+    "RGB": [205, 98, 39],
     "hex": "#cd6227",
     "name": "火砖红",
     "pinyin": "huozhuanhong"
   },
   {
-    "CMYK": [
-      22,
-      64,
-      71,
-      12
-    ],
-    "RGB": [
-      170,
-      106,
-      76
-    ],
+    "CMYK": [22, 64, 71, 12],
+    "RGB": [170, 106, 76],
     "hex": "#aa6a4c",
     "name": "火泥棕",
     "pinyin": "huonizong"
   },
   {
-    "CMYK": [
-      20,
-      76,
-      92,
-      9
-    ],
-    "RGB": [
-      166,
-      82,
-      44
-    ],
+    "CMYK": [20, 76, 92, 9],
+    "RGB": [166, 82, 44],
     "hex": "#a6522c",
     "name": "绀红",
     "pinyin": "ganhong"
   },
   {
-    "CMYK": [
-      31,
-      79,
-      77,
-      37
-    ],
-    "RGB": [
-      119,
-      61,
-      49
-    ],
+    "CMYK": [31, 79, 77, 37],
+    "RGB": [119, 61, 49],
     "hex": "#773d31",
     "name": "橡树棕",
     "pinyin": "xiangshuzong"
   },
   {
-    "CMYK": [
-      45,
-      68,
-      57,
-      66
-    ],
-    "RGB": [
-      72,
-      51,
-      50
-    ],
+    "CMYK": [45, 68, 57, 66],
+    "RGB": [72, 51, 50],
     "hex": "#483332",
     "name": "海报灰",
     "pinyin": "haibaohui"
   },
   {
-    "CMYK": [
-      41,
-      76,
-      64,
-      65
-    ],
-    "RGB": [
-      175,
-      46,
-      43
-    ],
+    "CMYK": [41, 76, 64, 65],
+    "RGB": [175, 46, 43],
     "hex": "#4b2e2b",
     "name": "玫瑰灰",
     "pinyin": "meiguihui"
   },
   {
-    "CMYK": [
-      41,
-      84,
-      71,
-      67
-    ],
-    "RGB": [
-      72,
-      37,
-      34
-    ],
+    "CMYK": [41, 84, 71, 67],
+    "RGB": [72, 37, 34],
     "hex": "#482522",
     "name": "火山棕",
     "pinyin": "huoshanzong"
   },
   {
-    "CMYK": [
-      40,
-      92,
-      78,
-      66
-    ],
-    "RGB": [
-      72,
-      30,
-      28
-    ],
+    "CMYK": [40, 92, 78, 66],
+    "RGB": [72, 30, 28],
     "hex": "#481e1c",
     "name": "豆沙",
     "pinyin": "dousha"
   },
   {
-    "CMYK": [
-      0,
-      9,
-      12,
-      0
-    ],
-    "RGB": [
-      251,
-      238,
-      226
-    ],
+    "CMYK": [0, 9, 12, 0],
+    "RGB": [251, 238, 226],
     "hex": "#fbeee2",
     "name": "淡米粉",
     "pinyin": "danmifen"
   },
   {
-    "CMYK": [
-      0,
-      19,
-      19,
-      0
-    ],
-    "RGB": [
-      246,
-      220,
-      206
-    ],
+    "CMYK": [0, 19, 19, 0],
+    "RGB": [246, 220, 206],
     "hex": "#f6dcce",
     "name": "初桃粉红",
     "pinyin": "chutaofenhong"
   },
   {
-    "CMYK": [
-      0,
-      27,
-      27,
-      0
-    ],
-    "RGB": [
-      247,
-      207,
-      186
-    ],
+    "CMYK": [0, 27, 27, 0],
+    "RGB": [247, 207, 186],
     "hex": "#f7cfba",
     "name": "介壳淡粉红",
     "pinyin": "jieqiaodanfenhong"
   },
   {
-    "CMYK": [
-      0,
-      43,
-      43,
-      0
-    ],
-    "RGB": [
-      246,
-      173,
-      143
-    ],
+    "CMYK": [0, 43, 43, 0],
+    "RGB": [246, 173, 143],
     "hex": "#f6ad8f",
     "name": "淡藏花红",
     "pinyin": "dancanghuahong"
   },
   {
-    "CMYK": [
-      0,
-      58,
-      61,
-      0
-    ],
-    "RGB": [
-      246,
-      140,
-      96
-    ],
+    "CMYK": [0, 58, 61, 0],
+    "RGB": [246, 140, 96],
     "hex": "#f68c60",
     "name": "瓜瓤红",
     "pinyin": "guaranghong"
   },
   {
-    "CMYK": [
-      0,
-      67,
-      74,
-      0
-    ],
-    "RGB": [
-      249,
-      114,
-      61
-    ],
+    "CMYK": [0, 67, 74, 0],
+    "RGB": [249, 114, 61],
     "hex": "#f9723d",
     "name": "芙蓉红",
     "pinyin": "furonghong"
   },
   {
-    "CMYK": [
-      0,
-      74,
-      85,
-      0
-    ],
-    "RGB": [
-      250,
-      93,
-      25
-    ],
+    "CMYK": [0, 74, 85, 0],
+    "RGB": [250, 93, 25],
     "hex": "#fa5d19",
     "name": "莓酱红",
     "pinyin": "meijianghong"
   },
   {
-    "CMYK": [
-      0,
-      62,
-      66,
-      0
-    ],
-    "RGB": [
-      238,
-      128,
-      85
-    ],
+    "CMYK": [0, 62, 66, 0],
+    "RGB": [238, 128, 85],
     "hex": "#ee8055",
     "name": "法螺红",
     "pinyin": "faluohong"
   },
   {
-    "CMYK": [
-      4,
-      82,
-      99,
-      0
-    ],
-    "RGB": [
-      207,
-      72,
-      19
-    ],
+    "CMYK": [4, 82, 99, 0],
+    "RGB": [207, 72, 19],
     "hex": "#cf4813",
     "name": "落霞红",
     "pinyin": "luoxiahong"
   },
   {
-    "CMYK": [
-      21,
-      43,
-      43,
-      9
-    ],
-    "RGB": [
-      184,
-      148,
-      133
-    ],
+    "CMYK": [21, 43, 43, 9],
+    "RGB": [184, 148, 133],
     "hex": "#b89485",
     "name": "淡玫瑰灰",
     "pinyin": "danmeiguihui"
   },
   {
-    "CMYK": [
-      18,
-      80,
-      92,
-      7
-    ],
-    "RGB": [
-      177,
-      75,
-      40
-    ],
+    "CMYK": [18, 80, 92, 7],
+    "RGB": [177, 75, 40],
     "hex": "#b14b28",
     "name": "蟹蝥红",
     "pinyin": "xiemaohong"
   },
   {
-    "CMYK": [
-      27,
-      91,
-      95,
-      28
-    ],
-    "RGB": [
-      134,
-      48,
-      32
-    ],
+    "CMYK": [27, 91, 95, 28],
+    "RGB": [134, 48, 32],
     "hex": "#863020",
     "name": "火岩棕",
     "pinyin": "huoyanzong"
   },
   {
-    "CMYK": [
-      27,
-      96,
-      100,
-      27
-    ],
-    "RGB": [
-      134,
-      38,
-      23
-    ],
+    "CMYK": [27, 96, 100, 27],
+    "RGB": [134, 38, 23],
     "hex": "#862617",
     "name": "赭石",
     "pinyin": "zheshi"
   },
   {
-    "CMYK": [
-      36,
-      90,
-      82,
-      56
-    ],
-    "RGB": [
-      89,
-      38,
-      32
-    ],
+    "CMYK": [36, 90, 82, 56],
+    "RGB": [89, 38, 32],
     "hex": "#592620",
     "name": "暗驼棕",
     "pinyin": "antuozong"
   },
   {
-    "CMYK": [
-      35,
-      96,
-      88,
-      55
-    ],
-    "RGB": [
-      90,
-      31,
-      27
-    ],
+    "CMYK": [35, 96, 88, 55],
+    "RGB": [90, 31, 27],
     "hex": "#5a1f1b",
     "name": "酱棕",
     "pinyin": "jiangzong"
   },
   {
-    "CMYK": [
-      34,
-      98,
-      91,
-      53
-    ],
-    "RGB": [
-      92,
-      30,
-      25
-    ],
+    "CMYK": [34, 98, 91, 53],
+    "RGB": [92, 30, 25],
     "hex": "#5c1e19",
     "name": "栗棕",
     "pinyin": "lizong"
   },
   {
-    "CMYK": [
-      0,
-      31,
-      24,
-      0
-    ],
-    "RGB": [
-      244,
-      199,
-      186
-    ],
+    "CMYK": [0, 31, 24, 0],
+    "RGB": [244, 199, 186],
     "hex": "#f4c7ba",
     "name": "洋水仙红",
     "pinyin": "yangshuixianhong"
   },
   {
-    "CMYK": [
-      0,
-      67,
-      55,
-      0
-    ],
-    "RGB": [
-      241,
-      118,
-      102
-    ],
+    "CMYK": [0, 67, 55, 0],
+    "RGB": [241, 118, 102],
     "hex": "#f17666",
     "name": "谷鞘红",
     "pinyin": "guqiaohong"
   },
   {
-    "CMYK": [
-      0,
-      77,
-      69,
-      0
-    ],
-    "RGB": [
-      241,
-      86,
-      66
-    ],
+    "CMYK": [0, 77, 69, 0],
+    "RGB": [241, 86, 66],
     "hex": "#f15642",
     "name": "苹果红",
     "pinyin": "pingguohong"
   },
   {
-    "CMYK": [
-      0,
-      84,
-      82,
-      0
-    ],
-    "RGB": [
-      245,
-      57,
-      28
-    ],
+    "CMYK": [0, 84, 82, 0],
+    "RGB": [245, 57, 28],
     "hex": "#f5391c",
     "name": "铁水红",
     "pinyin": "tieshuihong"
   },
   {
-    "CMYK": [
-      0,
-      76,
-      67,
-      0
-    ],
-    "RGB": [
-      242,
-      90,
-      71
-    ],
+    "CMYK": [0, 76, 67, 0],
+    "RGB": [242, 90, 71],
     "hex": "#f25a47",
     "name": "桂红",
     "pinyin": "guihong"
   },
   {
-    "CMYK": [
-      0,
-      84,
-      82,
-      0
-    ],
-    "RGB": [
-      243,
-      59,
-      31
-    ],
+    "CMYK": [0, 84, 82, 0],
+    "RGB": [243, 59, 31],
     "hex": "#f33b1f",
     "name": "极光红",
     "pinyin": "jiguanghong"
   },
   {
-    "CMYK": [
-      0,
-      38,
-      25,
-      0
-    ],
-    "RGB": [
-      242,
-      185,
-      178
-    ],
+    "CMYK": [0, 38, 25, 0],
+    "RGB": [242, 185, 178],
     "hex": "#f2b9b2",
     "name": "粉红",
     "pinyin": "fenhong"
   },
   {
-    "CMYK": [
-      0,
-      53,
-      36,
-      0
-    ],
-    "RGB": [
-      241,
-      151,
-      144
-    ],
+    "CMYK": [0, 53, 36, 0],
+    "RGB": [241, 151, 144],
     "hex": "#f19790",
     "name": "舌红",
     "pinyin": "shehong"
   },
   {
-    "CMYK": [
-      0,
-      76,
-      68,
-      0
-    ],
-    "RGB": [
-      240,
-      90,
-      70
-    ],
+    "CMYK": [0, 76, 68, 0],
+    "RGB": [240, 90, 70],
     "hex": "#f05a46",
     "name": "曲红",
     "pinyin": "quhong"
   },
   {
-    "CMYK": [
-      0,
-      83,
-      81,
-      0
-    ],
-    "RGB": [
-      242,
-      62,
-      35
-    ],
+    "CMYK": [0, 83, 81, 0],
+    "RGB": [242, 62, 35],
     "hex": "#f23e23",
     "name": "红汞红",
     "pinyin": "honggonghong"
   },
   {
-    "CMYK": [
-      0,
-      29,
-      16,
-      0
-    ],
-    "RGB": [
-      242,
-      202,
-      201
-    ],
+    "CMYK": [0, 29, 16, 0],
+    "RGB": [242, 202, 201],
     "hex": "#f2cac9",
     "name": "淡绯",
     "pinyin": "danfei"
   },
   {
-    "CMYK": [
-      0,
-      43,
-      24,
-      0
-    ],
-    "RGB": [
-      239,
-      175,
-      173
-    ],
+    "CMYK": [0, 43, 24, 0],
+    "RGB": [239, 175, 173],
     "hex": "#efafad",
     "name": "无花果红",
     "pinyin": "wuhuaguohong"
   },
   {
-    "CMYK": [
-      0,
-      57,
-      36,
-      0
-    ],
-    "RGB": [
-      241,
-      144,
-      140
-    ],
+    "CMYK": [0, 57, 36, 0],
+    "RGB": [241, 144, 140],
     "hex": "#f1908c",
     "name": "榴子红",
     "pinyin": "liuzihong"
   },
   {
-    "CMYK": [
-      0,
-      83,
-      81,
-      0
-    ],
-    "RGB": [
-      240,
-      63,
-      36
-    ],
+    "CMYK": [0, 83, 81, 0],
+    "RGB": [240, 63, 36],
     "hex": "#f03f24",
     "name": "胭脂红",
     "pinyin": "yanzhihong"
   },
   {
-    "CMYK": [
-      0,
-      50,
-      23,
-      0
-    ],
-    "RGB": [
-      240,
-      161,
-      168
-    ],
+    "CMYK": [0, 50, 23, 0],
+    "RGB": [240, 161, 168],
     "hex": "#f0a1a8",
     "name": "合欢红",
     "pinyin": "hehuanhong"
   },
   {
-    "CMYK": [
-      0,
-      56,
-      27,
-      0
-    ],
-    "RGB": [
-      241,
-      147,
-      156
-    ],
+    "CMYK": [0, 56, 27, 0],
+    "RGB": [241, 147, 156],
     "hex": "#f1939c",
     "name": "春梅红",
     "pinyin": "chunmeihong"
   },
   {
-    "CMYK": [
-      0,
-      65,
-      38,
-      0
-    ],
-    "RGB": [
-      240,
-      124,
-      130
-    ],
+    "CMYK": [0, 65, 38, 0],
+    "RGB": [240, 124, 130],
     "hex": "#f07c82",
     "name": "香叶红",
     "pinyin": "xiangyehong"
   },
   {
-    "CMYK": [
-      0,
-      80,
-      72,
-      0
-    ],
-    "RGB": [
-      240,
-      74,
-      58
-    ],
+    "CMYK": [0, 80, 72, 0],
+    "RGB": [240, 74, 58],
     "hex": "#f04a3a",
     "name": "珊瑚红",
     "pinyin": "shanhuhong"
   },
   {
-    "CMYK": [
-      0,
-      84,
-      82,
-      0
-    ],
-    "RGB": [
-      241,
-      60,
-      34
-    ],
+    "CMYK": [0, 84, 82, 0],
+    "RGB": [241, 60, 34],
     "hex": "#f13c22",
     "name": "萝卜红",
     "pinyin": "luobohong"
   },
   {
-    "CMYK": [
-      0,
-      65,
-      29,
-      0
-    ],
-    "RGB": [
-      231,
-      124,
-      142
-    ],
+    "CMYK": [0, 65, 29, 0],
+    "RGB": [231, 124, 142],
     "hex": "#e77c8e",
     "name": "淡茜红",
     "pinyin": "danqianhong"
   },
   {
-    "CMYK": [
-      0,
-      77,
-      49,
-      0
-    ],
-    "RGB": [
-      237,
-      90,
-      101
-    ],
+    "CMYK": [0, 77, 49, 0],
+    "RGB": [237, 90, 101],
     "hex": "#ed5a65",
     "name": "艳红",
     "pinyin": "yanhong"
   },
   {
-    "CMYK": [
-      0,
-      81,
-      66,
-      0
-    ],
-    "RGB": [
-      237,
-      72,
-      69
-    ],
+    "CMYK": [0, 81, 66, 0],
+    "RGB": [237, 72, 69],
     "hex": "#ed4845",
     "name": "淡菽红",
     "pinyin": "danshuhong"
   },
   {
-    "CMYK": [
-      0,
-      84,
-      76,
-      0
-    ],
-    "RGB": [
-      237,
-      59,
-      47
-    ],
+    "CMYK": [0, 84, 76, 0],
+    "RGB": [237, 59, 47],
     "hex": "#ed3b2f",
     "name": "鱼鳃红",
     "pinyin": "yusaihong"
   },
   {
-    "CMYK": [
-      0,
-      86,
-      82,
-      0
-    ],
-    "RGB": [
-      237,
-      51,
-      33
-    ],
+    "CMYK": [0, 86, 82, 0],
+    "RGB": [237, 51, 33],
     "hex": "#ed3321",
     "name": "樱桃红",
     "pinyin": "yingtaohong"
   },
   {
-    "CMYK": [
-      0,
-      82,
-      44,
-      0
-    ],
-    "RGB": [
-      238,
-      72,
-      102
-    ],
+    "CMYK": [0, 82, 44, 0],
+    "RGB": [238, 72, 102],
     "hex": "#ee4866",
     "name": "淡蕊香红",
     "pinyin": "danruixianghong"
   },
   {
-    "CMYK": [
-      0,
-      82,
-      46,
-      0
-    ],
-    "RGB": [
-      238,
-      72,
-      99
-    ],
+    "CMYK": [0, 82, 46, 0],
+    "RGB": [238, 72, 99],
     "hex": "#ee4863",
     "name": "石竹红",
     "pinyin": "shizhuhong"
   },
   {
-    "CMYK": [
-      0,
-      82,
-      50,
-      0
-    ],
-    "RGB": [
-      239,
-      71,
-      93
-    ],
+    "CMYK": [0, 82, 50, 0],
+    "RGB": [239, 71, 93],
     "hex": "#ef475d",
     "name": "草茉莉红",
     "pinyin": "caomolihong"
   },
   {
-    "CMYK": [
-      0,
-      84,
-      60,
-      0
-    ],
-    "RGB": [
-      238,
-      63,
-      77
-    ],
+    "CMYK": [0, 84, 60, 0],
+    "RGB": [238, 63, 77],
     "hex": "#ee3f4d",
     "name": "茶花红",
     "pinyin": "chahuahong"
   },
   {
-    "CMYK": [
-      0,
-      86,
-      74,
-      0
-    ],
-    "RGB": [
-      237,
-      51,
-      51
-    ],
+    "CMYK": [0, 86, 74, 0],
+    "RGB": [237, 51, 51],
     "hex": "#ed3333",
     "name": "枸枢红",
     "pinyin": "goushuhong"
   },
   {
-    "CMYK": [
-      0,
-      88,
-      81,
-      0
-    ],
-    "RGB": [
-      236,
-      43,
-      36
-    ],
+    "CMYK": [0, 88, 81, 0],
+    "RGB": [236, 43, 36],
     "hex": "#ec2b24",
     "name": "秋海棠红",
     "pinyin": "qiuhaitanghong"
   },
   {
-    "CMYK": [
-      0,
-      89,
-      84,
-      0
-    ],
-    "RGB": [
-      235,
-      38,
-      26
-    ],
+    "CMYK": [0, 89, 84, 0],
+    "RGB": [235, 38, 26],
     "hex": "#eb261a",
     "name": "丽春红",
     "pinyin": "lichunhong"
   },
   {
-    "CMYK": [
-      0,
-      90,
-      90,
-      0
-    ],
-    "RGB": [
-      222,
-      42,
-      24
-    ],
+    "CMYK": [0, 90, 90, 0],
+    "RGB": [222, 42, 24],
     "hex": "#de2a18",
     "name": "夕阳红",
     "pinyin": "xiyanghong"
   },
   {
-    "CMYK": [
-      0,
-      92,
-      95,
-      0
-    ],
-    "RGB": [
-      212,
-      37,
-      23
-    ],
+    "CMYK": [0, 92, 95, 0],
+    "RGB": [212, 37, 23],
     "hex": "#d42517",
     "name": "鹤顶红",
     "pinyin": "hedinghong"
   },
   {
-    "CMYK": [
-      19,
-      89,
-      85,
-      9
-    ],
-    "RGB": [
-      171,
-      55,
-      47
-    ],
+    "CMYK": [19, 89, 85, 9],
+    "RGB": [171, 55, 47],
     "hex": "#ab372f",
     "name": "鹅血石红",
     "pinyin": "exueshihong"
   },
   {
-    "CMYK": [
-      17,
-      98,
-      100,
-      8
-    ],
-    "RGB": [
-      172,
-      31,
-      24
-    ],
+    "CMYK": [17, 98, 100, 8],
+    "RGB": [172, 31, 24],
     "hex": "#ac1f18",
     "name": "覆盆子红",
     "pinyin": "fupenzihong"
   },
   {
-    "CMYK": [
-      36,
-      81,
-      64,
-      54
-    ],
-    "RGB": [
-      93,
-      49,
-      49
-    ],
+    "CMYK": [36, 81, 64, 54],
+    "RGB": [93, 49, 49],
     "hex": "#5d3131",
     "name": "貂紫",
     "pinyin": "diaozi"
   },
   {
-    "CMYK": [
-      35,
-      94,
-      77,
-      53
-    ],
-    "RGB": [
-      92,
-      34,
-      35
-    ],
+    "CMYK": [35, 94, 77, 53],
+    "RGB": [92, 34, 35],
     "hex": "#5c2223",
     "name": "暗玉紫",
     "pinyin": "anyuzi"
   },
   {
-    "CMYK": [
-      35,
-      100,
-      85,
-      54
-    ],
-    "RGB": [
-      90,
-      25,
-      27
-    ],
+    "CMYK": [35, 100, 85, 54],
+    "RGB": [90, 25, 27],
     "hex": "#5a191b",
     "name": "栗紫",
     "pinyin": "lizi"
   },
   {
-    "CMYK": [
-      35,
-      100,
-      80,
-      54
-    ],
-    "RGB": [
-      90,
-      18,
-      22
-    ],
+    "CMYK": [35, 100, 80, 54],
+    "RGB": [90, 18, 22],
     "hex": "#5a1216",
     "name": "葡萄酱紫",
     "pinyin": "putaojiangzi"
   },
   {
-    "CMYK": [
-      0,
-      49,
-      27,
-      0
-    ],
-    "RGB": [
-      238,
-      162,
-      164
-    ],
+    "CMYK": [0, 49, 27, 0],
+    "RGB": [238, 162, 164],
     "hex": "#eea2a4",
     "name": "牡丹粉红",
     "pinyin": "mudanfenhong"
   },
   {
-    "CMYK": [
-      0,
-      78,
-      44,
-      0
-    ],
-    "RGB": [
-      237,
-      85,
-      106
-    ],
+    "CMYK": [0, 78, 44, 0],
+    "RGB": [237, 85, 106],
     "hex": "#ed556a",
     "name": "山茶红",
     "pinyin": "shanchahong"
   },
   {
-    "CMYK": [
-      0,
-      86,
-      55,
-      0
-    ],
-    "RGB": [
-      240,
-      55,
-      82
-    ],
+    "CMYK": [0, 86, 55, 0],
+    "RGB": [240, 55, 82],
     "hex": "#f03752",
     "name": "海棠红",
     "pinyin": "haitanghong"
   },
   {
-    "CMYK": [
-      13,
-      83,
-      62,
-      3
-    ],
-    "RGB": [
-      192,
-      72,
-      81
-    ],
+    "CMYK": [13, 83, 62, 3],
+    "RGB": [192, 72, 81],
     "hex": "#c04851",
     "name": "玉红",
     "pinyin": "yuhong"
   },
   {
-    "CMYK": [
-      11,
-      93,
-      77,
-      2
-    ],
-    "RGB": [
-      192,
-      44,
-      56
-    ],
+    "CMYK": [11, 93, 77, 2],
+    "RGB": [192, 44, 56],
     "hex": "#c02c38",
     "name": "高粱红",
     "pinyin": "gaolianghong"
   },
   {
-    "CMYK": [
-      22,
-      76,
-      54,
-      12
-    ],
-    "RGB": [
-      167,
-      83,
-      90
-    ],
+    "CMYK": [22, 76, 54, 12],
+    "RGB": [167, 83, 90],
     "hex": "#a7535a",
     "name": "满江红",
     "pinyin": "manjianghong"
   },
   {
-    "CMYK": [
-      28,
-      100,
-      86,
-      33
-    ],
-    "RGB": [
-      124,
-      24,
-      35
-    ],
+    "CMYK": [28, 100, 86, 33],
+    "RGB": [124, 24, 35],
     "hex": "#7c1823",
     "name": "枣红",
     "pinyin": "zaohong"
   },
   {
-    "CMYK": [
-      39,
-      92,
-      67,
-      64
-    ],
-    "RGB": [
-      76,
-      31,
-      36
-    ],
+    "CMYK": [39, 92, 67, 64],
+    "RGB": [76, 31, 36],
     "hex": "#4c1f24",
     "name": "葡萄紫",
     "pinyin": "putaozi"
   },
   {
-    "CMYK": [
-      39,
-      100,
-      79,
-      63
-    ],
-    "RGB": [
-      77,
-      16,
-      24
-    ],
+    "CMYK": [39, 100, 79, 63],
+    "RGB": [77, 16, 24],
     "hex": "#4d1018",
     "name": "酱紫",
     "pinyin": "jiangzi"
   },
   {
-    "CMYK": [
-      0,
-      89,
-      62,
-      0
-    ],
-    "RGB": [
-      238,
-      39,
-      70
-    ],
+    "CMYK": [0, 89, 62, 0],
+    "RGB": [238, 39, 70],
     "hex": "#ee2746",
     "name": "淡曙红",
     "pinyin": "danshuhong"
   },
   {
-    "CMYK": [
-      0,
-      93,
-      76,
-      0
-    ],
-    "RGB": [
-      222,
-      28,
-      49
-    ],
+    "CMYK": [0, 93, 76, 0],
+    "RGB": [222, 28, 49],
     "hex": "#de1c31",
     "name": "唐菖蒲红",
     "pinyin": "tangchangpuhong"
   },
   {
-    "CMYK": [
-      1,
-      95,
-      82,
-      0
-    ],
-    "RGB": [
-      209,
-      26,
-      45
-    ],
+    "CMYK": [1, 95, 82, 0],
+    "RGB": [209, 26, 45],
     "hex": "#d11a2d",
     "name": "鹅冠红",
     "pinyin": "eguanhong"
   },
   {
-    "CMYK": [
-      13,
-      76,
-      50,
-      2
-    ],
-    "RGB": [
-      196,
-      90,
-      101
-    ],
+    "CMYK": [13, 76, 50, 2],
+    "RGB": [196, 90, 101],
     "hex": "#c45a65",
     "name": "莓红",
     "pinyin": "meihong"
   },
   {
-    "CMYK": [
-      10,
-      96,
-      82,
-      2
-    ],
-    "RGB": [
-      194,
-      31,
-      48
-    ],
+    "CMYK": [10, 96, 82, 2],
+    "RGB": [194, 31, 48],
     "hex": "#c21f30",
     "name": "枫叶红",
     "pinyin": "fengyehong"
   },
   {
-    "CMYK": [
-      19,
-      99,
-      86,
-      11
-    ],
-    "RGB": [
-      166,
-      27,
-      41
-    ],
+    "CMYK": [19, 99, 86, 11],
+    "RGB": [166, 27, 41],
     "hex": "#a61b29",
     "name": "苋菜红",
     "pinyin": "xiancaihong"
   },
   {
-    "CMYK": [
-      29,
-      73,
-      51,
-      28
-    ],
-    "RGB": [
-      137,
-      78,
-      84
-    ],
+    "CMYK": [29, 73, 51, 28],
+    "RGB": [137, 78, 84],
     "hex": "#894e54",
     "name": "烟红",
     "pinyin": "yanhong"
   },
   {
-    "CMYK": [
-      27,
-      98,
-      79,
-      30
-    ],
-    "RGB": [
-      130,
-      32,
-      43
-    ],
+    "CMYK": [27, 98, 79, 30],
+    "RGB": [130, 32, 43],
     "hex": "#82202b",
     "name": "暗紫苑红",
     "pinyin": "anziyuanhong"
   },
   {
-    "CMYK": [
-      27,
-      100,
-      90,
-      29
-    ],
-    "RGB": [
-      130,
-      17,
-      31
-    ],
+    "CMYK": [27, 100, 90, 29],
+    "RGB": [130, 17, 31],
     "hex": "#82111f",
     "name": "殷红",
     "pinyin": "yanhong"
   },
   {
-    "CMYK": [
-      36,
-      95,
-      71,
-      59
-    ],
-    "RGB": [
-      84,
-      30,
-      36
-    ],
+    "CMYK": [36, 95, 71, 59],
+    "RGB": [84, 30, 36],
     "hex": "#541e24",
     "name": "猪肝紫",
     "pinyin": "zhuganzi"
   },
   {
-    "CMYK": [
-      38,
-      100,
-      81,
-      61
-    ],
-    "RGB": [
-      80,
-      10,
-      22
-    ],
+    "CMYK": [38, 100, 81, 61],
+    "RGB": [80, 10, 22],
     "hex": "#500a16",
     "name": "金鱼紫",
     "pinyin": "jinyuzi"
   },
   {
-    "CMYK": [
-      1,
-      11,
-      9,
-      0
-    ],
-    "RGB": [
-      248,
-      235,
-      230
-    ],
+    "CMYK": [1, 11, 9, 0],
+    "RGB": [248, 235, 230],
     "hex": "#f8ebe6",
     "name": "草珠红",
     "pinyin": "caozhuhong"
   },
   {
-    "CMYK": [
-      0,
-      68,
-      21,
-      0
-    ],
-    "RGB": [
-      236,
-      118,
-      150
-    ],
+    "CMYK": [0, 68, 21, 0],
+    "RGB": [236, 118, 150],
     "hex": "#ec7696",
     "name": "淡绛红",
     "pinyin": "danjianghong"
   },
   {
-    "CMYK": [
-      0,
-      86,
-      30,
-      0
-    ],
-    "RGB": [
-      239,
-      52,
-      115
-    ],
+    "CMYK": [0, 86, 30, 0],
+    "RGB": [239, 52, 115],
     "hex": "#ef3473",
     "name": "品红",
     "pinyin": "pinhong"
   },
   {
-    "CMYK": [
-      0,
-      69,
-      22,
-      0
-    ],
-    "RGB": [
-      234,
-      114,
-      147
-    ],
+    "CMYK": [0, 69, 22, 0],
+    "RGB": [234, 114, 147],
     "hex": "#ea7293",
     "name": "凤仙花红",
     "pinyin": "fengxianhuahong"
   },
   {
-    "CMYK": [
-      0,
-      52,
-      18,
-      0
-    ],
-    "RGB": [
-      236,
-      155,
-      173
-    ],
+    "CMYK": [0, 52, 18, 0],
+    "RGB": [236, 155, 173],
     "hex": "#ec9bad",
     "name": "粉团花红",
     "pinyin": "fentuanhuahong"
   },
   {
-    "CMYK": [
-      0,
-      80,
-      28,
-      0
-    ],
-    "RGB": [
-      235,
-      80,
-      126
-    ],
+    "CMYK": [0, 80, 28, 0],
+    "RGB": [235, 80, 126],
     "hex": "#eb507e",
     "name": "夹竹桃红",
     "pinyin": "jiazhutaohong"
   },
   {
-    "CMYK": [
-      0,
-      88,
-      36,
-      0
-    ],
-    "RGB": [
-      237,
-      47,
-      106
-    ],
+    "CMYK": [0, 88, 36, 0],
+    "RGB": [237, 47, 106],
     "hex": "#ed2f6a",
     "name": "榲桲红",
     "pinyin": "wenpohong"
   },
   {
-    "CMYK": [
-      0,
-      39,
-      14,
-      0
-    ],
-    "RGB": [
-      238,
-      184,
-      195
-    ],
+    "CMYK": [0, 39, 14, 0],
+    "RGB": [238, 184, 195],
     "hex": "#eeb8c3",
     "name": "姜红",
     "pinyin": "jianghong"
   },
   {
-    "CMYK": [
-      0,
-      80,
-      27,
-      0
-    ],
-    "RGB": [
-      234,
-      81,
-      127
-    ],
+    "CMYK": [0, 80, 27, 0],
+    "RGB": [234, 81, 127],
     "hex": "#ea517f",
     "name": "莲瓣红",
     "pinyin": "lianbanhong"
   },
   {
-    "CMYK": [
-      0,
-      33,
-      11,
-      0
-    ],
-    "RGB": [
-      241,
-      196,
-      205
-    ],
+    "CMYK": [0, 33, 11, 0],
+    "RGB": [241, 196, 205],
     "hex": "#f1c4cd",
     "name": "水红",
     "pinyin": "shuihong"
   },
   {
-    "CMYK": [
-      0,
-      60,
-      18,
-      0
-    ],
-    "RGB": [
-      236,
-      138,
-      164
-    ],
+    "CMYK": [0, 60, 18, 0],
+    "RGB": [236, 138, 164],
     "hex": "#ec8aa4",
     "name": "报春红",
     "pinyin": "baochunhong"
   },
   {
-    "CMYK": [
-      8,
-      78,
-      35,
-      1
-    ],
-    "RGB": [
-      206,
-      87,
-      109
-    ],
+    "CMYK": [8, 78, 35, 1],
+    "RGB": [206, 87, 109],
     "hex": "#ce5777",
     "name": "月季红",
     "pinyin": "yuejihong"
   },
   {
-    "CMYK": [
-      0,
-      52,
-      15,
-      0
-    ],
-    "RGB": [
-      237,
-      157,
-      178
-    ],
+    "CMYK": [0, 52, 15, 0],
+    "RGB": [237, 157, 178],
     "hex": "#ed9db2",
     "name": "豇豆红",
     "pinyin": "jiangdouhong"
   },
   {
-    "CMYK": [
-      0,
-      63,
-      18,
-      0
-    ],
-    "RGB": [
-      239,
-      130,
-      160
-    ],
+    "CMYK": [0, 63, 18, 0],
+    "RGB": [239, 130, 160],
     "hex": "#ef82a0",
     "name": "霞光红",
     "pinyin": "xiaguanghong"
   },
   {
-    "CMYK": [
-      0,
-      85,
-      33,
-      0
-    ],
-    "RGB": [
-      235,
-      60,
-      112
-    ],
+    "CMYK": [0, 85, 33, 0],
+    "RGB": [235, 60, 112],
     "hex": "#eb3c70",
     "name": "松叶牡丹红",
     "pinyin": "songyemudanhong"
   },
   {
-    "CMYK": [
-      0,
-      88,
-      40,
-      0
-    ],
-    "RGB": [
-      236,
-      44,
-      100
-    ],
+    "CMYK": [0, 88, 40, 0],
+    "RGB": [236, 44, 100],
     "hex": "#ec2c64",
     "name": "喜蛋红",
     "pinyin": "xidanhong"
   },
   {
-    "CMYK": [
-      5,
-      38,
-      20,
-      0
-    ],
-    "RGB": [
-      227,
-      180,
-      184
-    ],
+    "CMYK": [5, 38, 20, 0],
+    "RGB": [227, 180, 184],
     "hex": "#e3b4b8",
     "name": "鼠鼻红",
     "pinyin": "shubihong"
   },
   {
-    "CMYK": [
-      5,
-      96,
-      73,
-      1
-    ],
-    "RGB": [
-      204,
-      22,
-      58
-    ],
+    "CMYK": [5, 96, 73, 1],
+    "RGB": [204, 22, 58],
     "hex": "#cc163a",
     "name": "尖晶玉红",
     "pinyin": "jianjingyuhong"
   },
   {
-    "CMYK": [
-      16,
-      61,
-      34,
-      4
-    ],
-    "RGB": [
-      194,
-      124,
-      136
-    ],
+    "CMYK": [16, 61, 34, 4],
+    "RGB": [194, 124, 136],
     "hex": "#c27c88",
     "name": "山黎豆红",
     "pinyin": "shanlidouhong"
   },
   {
-    "CMYK": [
-      13,
-      90,
-      56,
-      3
-    ],
-    "RGB": [
-      191,
-      53,
-      83
-    ],
+    "CMYK": [13, 90, 56, 3],
+    "RGB": [191, 53, 83],
     "hex": "#bf3553",
     "name": "锦葵红",
     "pinyin": "jinkuihong"
   },
   {
-    "CMYK": [
-      41,
-      64,
-      44,
-      36
-    ],
-    "RGB": [
-      115,
-      87,
-      92
-    ],
+    "CMYK": [41, 64, 44, 36],
+    "RGB": [115, 87, 92],
     "hex": "#73575c",
     "name": "鼠背灰",
     "pinyin": "shubeihui"
   },
   {
-    "CMYK": [
-      33,
-      100,
-      75,
-      49
-    ],
-    "RGB": [
-      98,
-      22,
-      36
-    ],
+    "CMYK": [33, 100, 75, 49],
+    "RGB": [98, 22, 36],
     "hex": "#621624",
     "name": "甘蔗紫",
     "pinyin": "ganzhezi"
   },
   {
-    "CMYK": [
-      32,
-      100,
-      84,
-      49
-    ],
-    "RGB": [
-      99,
-      7,
-      28
-    ],
+    "CMYK": [32, 100, 84, 49],
+    "RGB": [99, 7, 28],
     "hex": "#63071c",
     "name": "石竹紫",
     "pinyin": "shizhuzi"
   },
   {
-    "CMYK": [
-      57,
-      72,
-      54,
-      74
-    ],
-    "RGB": [
-      54,
-      40,
-      43
-    ],
+    "CMYK": [57, 72, 54, 74],
+    "RGB": [54, 40, 43],
     "hex": "#36282b",
     "name": "苍蝇灰",
     "pinyin": "cangyinghui"
   },
   {
-    "CMYK": [
-      52,
-      88,
-      58,
-      81
-    ],
-    "RGB": [
-      48,
-      22,
-      28
-    ],
+    "CMYK": [52, 88, 58, 81],
+    "RGB": [48, 22, 28],
     "hex": "#30161c",
     "name": "卵石紫",
     "pinyin": "luanshizi"
   },
   {
-    "CMYK": [
-      56,
-      88,
-      62,
-      84
-    ],
-    "RGB": [
-      43,
-      18,
-      22
-    ],
+    "CMYK": [56, 88, 62, 84],
+    "RGB": [43, 18, 22],
     "hex": "#2b1216",
     "name": "李紫",
     "pinyin": "lizi"
   },
   {
-    "CMYK": [
-      58,
-      90,
-      63,
-      83
-    ],
-    "RGB": [
-      45,
-      12,
-      19
-    ],
+    "CMYK": [58, 90, 63, 83],
+    "RGB": [45, 12, 19],
     "hex": "#2d0c13",
     "name": "茄皮紫",
     "pinyin": "qiepizi"
   },
   {
-    "CMYK": [
-      0,
-      76,
-      16,
-      0
-    ],
-    "RGB": [
-      206,
-      94,
-      138
-    ],
+    "CMYK": [0, 76, 16, 0],
+    "RGB": [206, 94, 138],
     "hex": "#ce5e8a",
     "name": "吊钟花红",
     "pinyin": "diaozhonghuahong"
   },
   {
-    "CMYK": [
-      0,
-      81,
-      18,
-      0
-    ],
-    "RGB": [
-      236,
-      78,
-      138
-    ],
+    "CMYK": [0, 81, 18, 0],
+    "RGB": [236, 78, 138],
     "hex": "#ec4e8a",
     "name": "兔眼红",
     "pinyin": "tuyanhong"
   },
   {
-    "CMYK": [
-      0,
-      87,
-      24,
-      0
-    ],
-    "RGB": [
-      238,
-      44,
-      121
-    ],
+    "CMYK": [0, 87, 24, 0],
+    "RGB": [238, 44, 121],
     "hex": "#ee2c79",
     "name": "紫荆红",
     "pinyin": "zijinghong"
   },
   {
-    "CMYK": [
-      24,
-      99,
-      52,
-      19
-    ],
-    "RGB": [
-      149,
-      28,
-      72
-    ],
+    "CMYK": [24, 99, 52, 19],
+    "RGB": [149, 28, 72],
     "hex": "#951c48",
     "name": "菜头紫",
     "pinyin": "caitouzi"
   },
   {
-    "CMYK": [
-      34,
-      97,
-      54,
-      50
-    ],
-    "RGB": [
-      98,
-      29,
-      52
-    ],
+    "CMYK": [34, 97, 54, 50],
+    "RGB": [98, 29, 52],
     "hex": "#621d34",
     "name": "鹞冠紫",
     "pinyin": "yaoguanzi"
   },
   {
-    "CMYK": [
-      33,
-      100,
-      58,
-      60
-    ],
-    "RGB": [
-      98,
-      16,
-      46
-    ],
+    "CMYK": [33, 100, 58, 60],
+    "RGB": [98, 16, 46],
     "hex": "#62102e",
     "name": "葡萄酒红",
     "pinyin": "putaojiuhong"
   },
   {
-    "CMYK": [
-      53,
-      81,
-      50,
-      74
-    ],
-    "RGB": [
-      56,
-      33,
-      41
-    ],
+    "CMYK": [53, 81, 50, 74],
+    "RGB": [56, 33, 41],
     "hex": "#382129",
     "name": "磨石紫",
     "pinyin": "moshizi"
   },
   {
-    "CMYK": [
-      48,
-      90,
-      50,
-      76
-    ],
-    "RGB": [
-      56,
-      25,
-      36
-    ],
+    "CMYK": [48, 90, 50, 76],
+    "RGB": [56, 25, 36],
     "hex": "#381924",
     "name": "檀紫",
     "pinyin": "tanzi"
   },
   {
-    "CMYK": [
-      50,
-      91,
-      54,
-      79
-    ],
-    "RGB": [
-      51,
-      20,
-      30
-    ],
+    "CMYK": [50, 91, 54, 79],
+    "RGB": [51, 20, 30],
     "hex": "#33141e",
     "name": "火鹅紫",
     "pinyin": "huoezi"
   },
   {
-    "CMYK": [
-      53,
-      92,
-      55,
-      81
-    ],
-    "RGB": [
-      49,
-      15,
-      27
-    ],
+    "CMYK": [53, 92, 55, 81],
+    "RGB": [49, 15, 27],
     "hex": "#310f1b",
     "name": "墨紫",
     "pinyin": "mozi"
   },
   {
-    "CMYK": [
-      0,
-      48,
-      15,
-      0
-    ],
-    "RGB": [
-      238,
-      166,
-      183
-    ],
+    "CMYK": [0, 48, 15, 0],
+    "RGB": [238, 166, 183],
     "hex": "#eea6b7",
     "name": "晶红",
     "pinyin": "jinghong"
   },
   {
-    "CMYK": [
-      0,
-      82,
-      16,
-      0
-    ],
-    "RGB": [
-      239,
-      73,
-      139
-    ],
+    "CMYK": [0, 82, 16, 0],
+    "RGB": [239, 73, 139],
     "hex": "#ef498b",
     "name": "扁豆花红",
     "pinyin": "biandouhuahong"
   },
   {
-    "CMYK": [
-      2,
-      66,
-      22,
-      0
-    ],
-    "RGB": [
-      222,
-      120,
-      151
-    ],
+    "CMYK": [2, 66, 22, 0],
+    "RGB": [222, 120, 151],
     "hex": "#de7897",
     "name": "白芨红",
     "pinyin": "baijihong"
   },
   {
-    "CMYK": [
-      0,
-      85,
-      24,
-      0
-    ],
-    "RGB": [
-      222,
-      63,
-      124
-    ],
+    "CMYK": [0, 85, 24, 0],
+    "RGB": [222, 63, 124],
     "hex": "#de3f7c",
     "name": "嫩菱红",
     "pinyin": "nenlinghong"
   },
   {
-    "CMYK": [
-      5,
-      87,
-      30,
-      1
-    ],
-    "RGB": [
-      209,
-      60,
-      116
-    ],
+    "CMYK": [5, 87, 30, 1],
+    "RGB": [209, 60, 116],
     "hex": "#d13c74",
     "name": "菠根红",
     "pinyin": "bogenhong"
   },
   {
-    "CMYK": [
-      15,
-      68,
-      28,
-      2
-    ],
-    "RGB": [
-      197,
-      112,
-      139
-    ],
+    "CMYK": [15, 68, 28, 2],
+    "RGB": [197, 112, 139],
     "hex": "#c5708b",
     "name": "酢酱草红",
     "pinyin": "cujiangcaohong"
   },
   {
-    "CMYK": [
-      22,
-      83,
-      34,
-      11
-    ],
-    "RGB": [
-      168,
-      69,
-      107
-    ],
+    "CMYK": [22, 83, 34, 11],
+    "RGB": [168, 69, 107],
     "hex": "#a8456b",
     "name": "洋葱紫",
     "pinyin": "yangcongzi"
   },
   {
-    "CMYK": [
-      40,
-      92,
-      47,
-      64
-    ],
-    "RGB": [
-      75,
-      30,
-      47
-    ],
+    "CMYK": [40, 92, 47, 64],
+    "RGB": [75, 30, 47],
     "hex": "#4b1e2f",
     "name": "海象紫",
     "pinyin": "haixiangzi"
   },
   {
-    "CMYK": [
-      41,
-      97,
-      49,
-      68
-    ],
-    "RGB": [
-      70,
-      22,
-      41
-    ],
+    "CMYK": [41, 97, 49, 68],
+    "RGB": [70, 22, 41],
     "hex": "#461629",
     "name": "绀紫",
     "pinyin": "ganzi"
   },
   {
-    "CMYK": [
-      42,
-      99,
-      51,
-      69
-    ],
-    "RGB": [
-      68,
-      14,
-      37
-    ],
+    "CMYK": [42, 99, 51, 69],
+    "RGB": [68, 14, 37],
     "hex": "#440e25",
     "name": "古铜紫",
     "pinyin": "gutongzi"
   },
   {
-    "CMYK": [
-      0,
-      30,
-      12,
-      0
-    ],
-    "RGB": [
-      240,
-      201,
-      207
-    ],
+    "CMYK": [0, 30, 12, 0],
+    "RGB": [240, 201, 207],
     "hex": "#f0c9cf",
     "name": "石蕊红",
     "pinyin": "shiruihong"
   },
   {
-    "CMYK": [
-      0,
-      50,
-      16,
-      0
-    ],
-    "RGB": [
-      235,
-      160,
-      179
-    ],
+    "CMYK": [0, 50, 16, 0],
+    "RGB": [235, 160, 179],
     "hex": "#eba0b3",
     "name": "芍药耕红",
     "pinyin": "shaoyaogenghong"
   },
   {
-    "CMYK": [
-      0,
-      88,
-      23,
-      0
-    ],
-    "RGB": [
-      236,
-      45,
-      122
-    ],
+    "CMYK": [0, 88, 23, 0],
+    "RGB": [236, 45, 122],
     "hex": "#ec2d7a",
     "name": "藏花红",
     "pinyin": "canghuahong"
   },
   {
-    "CMYK": [
-      0,
-      71,
-      18,
-      0
-    ],
-    "RGB": [
-      225,
-      108,
-      150
-    ],
+    "CMYK": [0, 71, 18, 0],
+    "RGB": [225, 108, 150],
     "hex": "#e16c96",
     "name": "初荷红",
     "pinyin": "chuhehong"
   },
   {
-    "CMYK": [
-      6,
-      13,
-      7,
-      0
-    ],
-    "RGB": [
-      237,
-      227,
-      231
-    ],
+    "CMYK": [6, 13, 7, 0],
+    "RGB": [237, 227, 231],
     "hex": "#ede3e7",
     "name": "马鞭草紫",
     "pinyin": "mabiancaozi"
   },
   {
-    "CMYK": [
-      7,
-      20,
-      8,
-      0
-    ],
-    "RGB": [
-      233,
-      215,
-      223
-    ],
+    "CMYK": [7, 20, 8, 0],
+    "RGB": [233, 215, 223],
     "hex": "#e9d7df",
     "name": "丁香淡紫",
     "pinyin": "dingxiangdanzi"
   },
   {
-    "CMYK": [
-      7,
-      79,
-      18,
-      0
-    ],
-    "RGB": [
-      210,
-      86,
-      140
-    ],
+    "CMYK": [7, 79, 18, 0],
+    "RGB": [210, 86, 140],
     "hex": "#d2568c",
     "name": "丹紫红",
     "pinyin": "danzihong"
   },
   {
-    "CMYK": [
-      4,
-      89,
-      21,
-      0
-    ],
-    "RGB": [
-      210,
-      53,
-      125
-    ],
+    "CMYK": [4, 89, 21, 0],
+    "RGB": [210, 53, 125],
     "hex": "#d2357d",
     "name": "玫瑰红",
     "pinyin": "meiguihong"
   },
   {
-    "CMYK": [
-      19,
-      27,
-      9,
-      0
-    ],
-    "RGB": [
-      209,
-      194,
-      211
-    ],
+    "CMYK": [19, 27, 9, 0],
+    "RGB": [209, 194, 211],
     "hex": "#d1c2d3",
     "name": "淡牵牛紫",
     "pinyin": "danqianniuzi"
   },
   {
-    "CMYK": [
-      21,
-      37,
-      12,
-      0
-    ],
-    "RGB": [
-      200,
-      173,
-      196
-    ],
+    "CMYK": [21, 37, 12, 0],
+    "RGB": [200, 173, 196],
     "hex": "#c8adc4",
     "name": "凤信紫",
     "pinyin": "fengxinzi"
   },
   {
-    "CMYK": [
-      23,
-      53,
-      14,
-      1
-    ],
-    "RGB": [
-      192,
-      142,
-      175
-    ],
+    "CMYK": [23, 53, 14, 1],
+    "RGB": [192, 142, 175],
     "hex": "#c08eaf",
     "name": "萝兰紫",
     "pinyin": "luolanzi"
   },
   {
-    "CMYK": [
-      18,
-      91,
-      18,
-      2
-    ],
-    "RGB": [
-      186,
-      47,
-      123
-    ],
+    "CMYK": [18, 91, 18, 2],
+    "RGB": [186, 47, 123],
     "hex": "#ba2f7b",
     "name": "玫瑰紫",
     "pinyin": "meiguizi"
   },
   {
-    "CMYK": [
-      58,
-      56,
-      17,
-      2
-    ],
-    "RGB": [
-      128,
-      118,
-      163
-    ],
+    "CMYK": [58, 56, 17, 2],
+    "RGB": [128, 118, 163],
     "hex": "#8076a3",
     "name": "藤萝紫",
     "pinyin": "tengluozi"
   },
   {
-    "CMYK": [
-      57,
-      62,
-      16,
-      2
-    ],
-    "RGB": [
-      128,
-      109,
-      158
-    ],
+    "CMYK": [57, 62, 16, 2],
+    "RGB": [128, 109, 158],
     "hex": "#806d9e",
     "name": "槿紫",
     "pinyin": "jinzi"
   },
   {
-    "CMYK": [
-      56,
-      72,
-      15,
-      1
-    ],
-    "RGB": [
-      129,
-      92,
-      148
-    ],
+    "CMYK": [56, 72, 15, 1],
+    "RGB": [129, 92, 148],
     "hex": "#815c94",
     "name": "蕈紫",
     "pinyin": "xunzi"
   },
   {
-    "CMYK": [
-      54,
-      89,
-      12,
-      1
-    ],
-    "RGB": [
-      129,
-      60,
-      133
-    ],
+    "CMYK": [54, 89, 12, 1],
+    "RGB": [129, 60, 133],
     "hex": "#813c85",
     "name": "桔梗紫",
     "pinyin": "jiegengzi"
   },
   {
-    "CMYK": [
-      52,
-      100,
-      17,
-      7
-    ],
-    "RGB": [
-      126,
-      22,
-      113
-    ],
+    "CMYK": [52, 100, 17, 7],
+    "RGB": [126, 22, 113],
     "hex": "#7e1671",
     "name": "魏紫",
     "pinyin": "weizi"
   },
   {
-    "CMYK": [
-      3,
-      26,
-      10,
-      0
-    ],
-    "RGB": [
-      233,
-      204,
-      211
-    ],
+    "CMYK": [3, 26, 10, 0],
+    "RGB": [233, 204, 211],
     "hex": "#e9ccd3",
     "name": "芝兰紫",
     "pinyin": "zhilanzi"
   },
   {
-    "CMYK": [
-      10,
-      67,
-      12,
-      0
-    ],
-    "RGB": [
-      210,
-      118,
-      163
-    ],
+    "CMYK": [10, 67, 12, 0],
+    "RGB": [210, 118, 163],
     "hex": "#d276a3",
     "name": "菱锰红",
     "pinyin": "lingmenghong"
   },
   {
-    "CMYK": [
-      11,
-      97,
-      10,
-      0
-    ],
-    "RGB": [
-      204,
-      85,
-      149
-    ],
+    "CMYK": [11, 97, 10, 0],
+    "RGB": [204, 85, 149],
     "hex": "#cc5595",
     "name": "龙须红",
     "pinyin": "longxuhong"
   },
   {
-    "CMYK": [
-      8,
-      22,
-      12,
-      0
-    ],
-    "RGB": [
-      230,
-      210,
-      213
-    ],
+    "CMYK": [8, 22, 12, 0],
+    "RGB": [230, 210, 213],
     "hex": "#e6d2d5",
     "name": "蓟粉红",
     "pinyin": "jifenhong"
   },
   {
-    "CMYK": [
-      16,
-      79,
-      14,
-      1
-    ],
-    "RGB": [
-      195,
-      86,
-      145
-    ],
+    "CMYK": [16, 79, 14, 1],
+    "RGB": [195, 86, 145],
     "hex": "#c35691",
     "name": "电气石红",
     "pinyin": "dianqishihong"
   },
   {
-    "CMYK": [
-      19,
-      68,
-      18,
-      1
-    ],
-    "RGB": [
-      192,
-      111,
-      152
-    ],
+    "CMYK": [19, 68, 18, 1],
+    "RGB": [192, 111, 152],
     "hex": "#c06f98",
     "name": "樱草紫",
     "pinyin": "yingcaozi"
   },
   {
-    "CMYK": [
-      25,
-      31,
-      26,
-      5
-    ],
-    "RGB": [
-      189,
-      174,
-      173
-    ],
+    "CMYK": [25, 31, 26, 5],
+    "RGB": [189, 174, 173],
     "hex": "#bdaead",
     "name": "芦穗灰",
     "pinyin": "lusuihui"
   },
   {
-    "CMYK": [
-      26,
-      43,
-      26,
-      6
-    ],
-    "RGB": [
-      181,
-      152,
-      161
-    ],
+    "CMYK": [26, 43, 26, 6],
+    "RGB": [181, 152, 161],
     "hex": "#b598a1",
     "name": "隐红灰",
     "pinyin": "yinhonghui"
   },
   {
-    "CMYK": [
-      27,
-      97,
-      27,
-      14
-    ],
-    "RGB": [
-      155,
-      30,
-      100
-    ],
+    "CMYK": [27, 97, 27, 14],
+    "RGB": [155, 30, 100],
     "hex": "#9b1e64",
     "name": "苋菜紫",
     "pinyin": "xiancaizi"
   },
   {
-    "CMYK": [
-      39,
-      53,
-      38,
-      25
-    ],
-    "RGB": [
-      133,
-      109,
-      114
-    ],
+    "CMYK": [39, 53, 38, 25],
+    "RGB": [133, 109, 114],
     "hex": "#856d72",
     "name": "芦灰",
     "pinyin": "luhui"
   },
   {
-    "CMYK": [
-      49,
-      71,
-      49,
-      58
-    ],
-    "RGB": [
-      79,
-      56,
-      62
-    ],
+    "CMYK": [49, 71, 49, 58],
+    "RGB": [79, 56, 62],
     "hex": "#4f383e",
     "name": "暮云灰",
     "pinyin": "muyunhui"
   },
   {
-    "CMYK": [
-      49,
-      82,
-      46,
-      63
-    ],
-    "RGB": [
-      72,
-      41,
-      54
-    ],
+    "CMYK": [49, 82, 46, 63],
+    "RGB": [72, 41, 54],
     "hex": "#482936",
     "name": "斑鸠灰",
     "pinyin": "banjiuhui"
   },
   {
-    "CMYK": [
-      4,
-      11,
-      9,
-      0
-    ],
-    "RGB": [
-      242,
-      231,
-      229
-    ],
+    "CMYK": [4, 11, 9, 0],
+    "RGB": [242, 231, 229],
     "hex": "#f2e7e5",
     "name": "淡藤萝紫",
     "pinyin": "dantengluozi"
   },
   {
-    "CMYK": [
-      10,
-      27,
-      11,
-      0
-    ],
-    "RGB": [
-      224,
-      200,
-      209
-    ],
+    "CMYK": [10, 27, 11, 0],
+    "RGB": [224, 200, 209],
     "hex": "#e0c8d1",
     "name": "淡青紫",
     "pinyin": "danqingzi"
   },
   {
-    "CMYK": [
-      24,
-      58,
-      15,
-      1
-    ],
-    "RGB": [
-      188,
-      132,
-      168
-    ],
+    "CMYK": [24, 58, 15, 1],
+    "RGB": [188, 132, 168],
     "hex": "#bc84a8",
     "name": "青蛤壳紫",
     "pinyin": "qinghakezi"
   },
   {
-    "CMYK": [
-      31,
-      71,
-      15,
-      1
-    ],
-    "RGB": [
-      173,
-      101,
-      152
-    ],
+    "CMYK": [31, 71, 15, 1],
+    "RGB": [173, 101, 152],
     "hex": "#ad6598",
     "name": "豆蔻紫",
     "pinyin": "doukouzi"
   },
   {
-    "CMYK": [
-      35,
-      75,
-      18,
-      2
-    ],
-    "RGB": [
-      163,
-      92,
-      143
-    ],
+    "CMYK": [35, 75, 18, 2],
+    "RGB": [163, 92, 143],
     "hex": "#a35c8f",
     "name": "扁豆紫",
     "pinyin": "biandouzi"
   },
   {
-    "CMYK": [
-      39,
-      91,
-      15,
-      3
-    ],
-    "RGB": [
-      152,
-      54,
-      128
-    ],
+    "CMYK": [39, 91, 15, 3],
+    "RGB": [152, 54, 128],
     "hex": "#983680",
     "name": "芥花紫",
     "pinyin": "jiehuazi"
   },
   {
-    "CMYK": [
-      43,
-      97,
-      19,
-      8
-    ],
-    "RGB": [
-      139,
-      38,
-      113
-    ],
+    "CMYK": [43, 97, 19, 8],
+    "RGB": [139, 38, 113],
     "hex": "#8b2671",
     "name": "青莲",
     "pinyin": "qinglian"
   },
   {
-    "CMYK": [
-      44,
-      85,
-      24,
-      10
-    ],
-    "RGB": [
-      137,
-      66,
-      118
-    ],
+    "CMYK": [44, 85, 24, 10],
+    "RGB": [137, 66, 118],
     "hex": "#894276",
     "name": "芓紫",
     "pinyin": "zizi"
   },
   {
-    "CMYK": [
-      45,
-      99,
-      24,
-      16
-    ],
-    "RGB": [
-      126,
-      32,
-      101
-    ],
+    "CMYK": [45, 99, 24, 16],
+    "RGB": [126, 32, 101],
     "hex": "#7e2065",
     "name": "葛巾紫",
     "pinyin": "gejinzi"
   },
   {
-    "CMYK": [
-      49,
-      100,
-      29,
-      32
-    ],
-    "RGB": [
-      104,
-      23,
-      82
-    ],
+    "CMYK": [49, 100, 29, 32],
+    "RGB": [104, 23, 82],
     "hex": "#681752",
     "name": "牵牛紫",
     "pinyin": "qianniuzi"
   },
   {
-    "CMYK": [
-      53,
-      75,
-      41,
-      41
-    ],
-    "RGB": [
-      93,
-      63,
-      81
-    ],
+    "CMYK": [53, 75, 41, 41],
+    "RGB": [93, 63, 81],
     "hex": "#5d3f51",
     "name": "紫灰",
     "pinyin": "zihui"
   },
   {
-    "CMYK": [
-      55,
-      87,
-      41,
-      52
-    ],
-    "RGB": [
-      78,
-      42,
-      64
-    ],
+    "CMYK": [55, 87, 41, 52],
+    "RGB": [78, 42, 64],
     "hex": "#4e2a40",
     "name": "龙睛鱼紫",
     "pinyin": "longjingyuzi"
   },
   {
-    "CMYK": [
-      58,
-      96,
-      40,
-      61
-    ],
-    "RGB": [
-      65,
-      28,
-      53
-    ],
+    "CMYK": [58, 96, 40, 61],
+    "RGB": [65, 28, 53],
     "hex": "#411c35",
     "name": "荸荠紫",
     "pinyin": "biqizi"
   },
   {
-    "CMYK": [
-      63,
-      74,
-      52,
-      70
-    ],
-    "RGB": [
-      54,
-      41,
-      47
-    ],
+    "CMYK": [63, 74, 52, 70],
+    "RGB": [54, 41, 47],
     "hex": "#36292f",
     "name": "古鼎灰",
     "pinyin": "gudinghui"
   },
   {
-    "CMYK": [
-      81,
-      87,
-      54,
-      84
-    ],
-    "RGB": [
-      30,
-      19,
-      29
-    ],
+    "CMYK": [81, 87, 54, 84],
+    "RGB": [30, 19, 29],
     "hex": "#1e131d",
     "name": "乌梅紫",
     "pinyin": "wumeizi"
   },
   {
-    "CMYK": [
-      83,
-      87,
-      55,
-      86
-    ],
-    "RGB": [
-      28,
-      13,
-      26
-    ],
+    "CMYK": [83, 87, 55, 86],
+    "RGB": [28, 13, 26],
     "hex": "#1c0d1a",
     "name": "深牵牛紫",
     "pinyin": "shenqianniuzi"
   },
   {
-    "CMYK": [
-      7,
-      5,
-      7,
-      0
-    ],
-    "RGB": [
-      241,
-      240,
-      237
-    ],
+    "CMYK": [7, 5, 7, 0],
+    "RGB": [241, 240, 237],
     "hex": "#f1f0ed",
     "name": "银白",
     "pinyin": "yinbai"
   },
   {
-    "CMYK": [
-      13,
-      10,
-      9,
-      0
-    ],
-    "RGB": [
-      226,
-      225,
-      228
-    ],
+    "CMYK": [13, 10, 9, 0],
+    "RGB": [226, 225, 228],
     "hex": "#e2e1e4",
     "name": "芡食白",
     "pinyin": "qianshibai"
   },
   {
-    "CMYK": [
-      23,
-      18,
-      12,
-      1
-    ],
-    "RGB": [
-      204,
-      204,
-      214
-    ],
+    "CMYK": [23, 18, 12, 1],
+    "RGB": [204, 204, 214],
     "hex": "#ccccd6",
     "name": "远山紫",
     "pinyin": "yuanshanzi"
   },
   {
-    "CMYK": [
-      39,
-      31,
-      17,
-      2
-    ],
-    "RGB": [
-      167,
-      168,
-      189
-    ],
+    "CMYK": [39, 31, 17, 2],
+    "RGB": [167, 168, 189],
     "hex": "#a7a8bd",
     "name": "淡蓝紫",
     "pinyin": "danlanzi"
   },
   {
-    "CMYK": [
-      74,
-      64,
-      14,
-      1
-    ],
-    "RGB": [
-      97,
-      100,
-      159
-    ],
+    "CMYK": [74, 64, 14, 1],
+    "RGB": [97, 100, 159],
     "hex": "#61649f",
     "name": "山梗紫",
     "pinyin": "shangengzi"
   },
   {
-    "CMYK": [
-      63,
-      53,
-      22,
-      5
-    ],
-    "RGB": [
-      116,
-      117,
-      155
-    ],
+    "CMYK": [63, 53, 22, 5],
+    "RGB": [116, 117, 155],
     "hex": "#74759b",
     "name": "螺甸紫",
     "pinyin": "luodianzi"
   },
   {
-    "CMYK": [
-      21,
-      17,
-      19,
-      1
-    ],
-    "RGB": [
-      207,
-      204,
-      201
-    ],
+    "CMYK": [21, 17, 19, 1],
+    "RGB": [207, 204, 201],
     "hex": "#cfccc9",
     "name": "玛瑙灰",
     "pinyin": "manaohui"
   },
   {
-    "CMYK": [
-      80,
-      73,
-      21,
-      6
-    ],
-    "RGB": [
-      82,
-      82,
-      136
-    ],
+    "CMYK": [80, 73, 21, 6],
+    "RGB": [82, 82, 136],
     "hex": "#525288",
     "name": "野菊紫",
     "pinyin": "yejuzi"
   },
   {
-    "CMYK": [
-      100,
-      93,
-      21,
-      5
-    ],
-    "RGB": [
-      46,
-      49,
-      124
-    ],
+    "CMYK": [100, 93, 21, 5],
+    "RGB": [46, 49, 124],
     "hex": "#2e317c",
     "name": "满天星紫",
     "pinyin": "mantianxingzi"
   },
   {
-    "CMYK": [
-      48,
-      45,
-      40,
-      26
-    ],
-    "RGB": [
-      122,
-      115,
-      116
-    ],
+    "CMYK": [48, 45, 40, 26],
+    "RGB": [122, 115, 116],
     "hex": "#7a7374",
     "name": "锌灰",
     "pinyin": "xinhui"
   },
   {
-    "CMYK": [
-      91,
-      84,
-      40,
-      43
-    ],
-    "RGB": [
-      48,
-      47,
-      75
-    ],
+    "CMYK": [91, 84, 40, 43],
+    "RGB": [48, 47, 75],
     "hex": "#302f4b",
     "name": "野葡萄紫",
     "pinyin": "yeputaozi"
   },
   {
-    "CMYK": [
-      70,
-      69,
-      49,
-      56
-    ],
-    "RGB": [
-      62,
-      56,
-      65
-    ],
+    "CMYK": [70, 69, 49, 56],
+    "RGB": [62, 56, 65],
     "hex": "#3e3841",
     "name": "剑锋紫",
     "pinyin": "jianfengzi"
   },
   {
-    "CMYK": [
-      79,
-      74,
-      49,
-      60
-    ],
-    "RGB": [
-      50,
-      47,
-      59
-    ],
+    "CMYK": [79, 74, 49, 60],
+    "RGB": [50, 47, 59],
     "hex": "#322f3b",
     "name": "龙葵紫",
     "pinyin": "longkuizi"
   },
   {
-    "CMYK": [
-      90,
-      84,
-      50,
-      69
-    ],
-    "RGB": [
-      34,
-      32,
-      46
-    ],
+    "CMYK": [90, 84, 50, 69],
+    "RGB": [34, 32, 46],
     "hex": "#22202e",
     "name": "暗龙胆紫",
     "pinyin": "anlongdanzi"
   },
   {
-    "CMYK": [
-      98,
-      93,
-      48,
-      73
-    ],
-    "RGB": [
-      31,
-      32,
-      64
-    ],
+    "CMYK": [98, 93, 48, 73],
+    "RGB": [31, 32, 64],
     "hex": "#1f2040",
     "name": "晶石紫",
     "pinyin": "jingshizi"
   },
   {
-    "CMYK": [
-      100,
-      94,
-      52,
-      77
-    ],
-    "RGB": [
-      19,
-      17,
-      36
-    ],
+    "CMYK": [100, 94, 52, 77],
+    "RGB": [19, 17, 36],
     "hex": "#131124",
     "name": "暗蓝紫",
     "pinyin": "anlanzi"
   },
   {
-    "CMYK": [
-      95,
-      46,
-      10,
-      1
-    ],
-    "RGB": [
-      39,
-      117,
-      182
-    ],
+    "CMYK": [95, 46, 10, 1],
+    "RGB": [39, 117, 182],
     "hex": "#2775b6",
     "name": "景泰蓝",
     "pinyin": "jingtailan"
   },
   {
-    "CMYK": [
-      96,
-      47,
-      11,
-      1
-    ],
-    "RGB": [
-      36,
-      116,
-      181
-    ],
+    "CMYK": [96, 47, 11, 1],
+    "RGB": [36, 116, 181],
     "hex": "#2474b5",
     "name": "尼罗蓝",
     "pinyin": "niluolan"
   },
   {
-    "CMYK": [
-      25,
-      6,
-      10,
-      0
-    ],
-    "RGB": [
-      208,
-      223,
-      230
-    ],
+    "CMYK": [25, 6, 10, 0],
+    "RGB": [208, 223, 230],
     "hex": "#d0dfe6",
     "name": "远天蓝",
     "pinyin": "yuantianlan"
   },
   {
-    "CMYK": [
-      53,
-      19,
-      15,
-      1
-    ],
-    "RGB": [
-      147,
-      181,
-      207
-    ],
+    "CMYK": [53, 19, 15, 1],
+    "RGB": [147, 181, 207],
     "hex": "#93b5cf",
     "name": "星蓝",
     "pinyin": "xinglan"
   },
   {
-    "CMYK": [
-      74,
-      27,
-      16,
-      2
-    ],
-    "RGB": [
-      97,
-      154,
-      195
-    ],
+    "CMYK": [74, 27, 16, 2],
+    "RGB": [97, 154, 195],
     "hex": "#619ac3",
     "name": "羽扇豆蓝",
     "pinyin": "yushandoulan"
   },
   {
-    "CMYK": [
-      95,
-      45,
-      10,
-      1
-    ],
-    "RGB": [
-      35,
-      118,
-      183
-    ],
+    "CMYK": [95, 45, 10, 1],
+    "RGB": [35, 118, 183],
     "hex": "#2376b7",
     "name": "花青",
     "pinyin": "huaqing"
   },
   {
-    "CMYK": [
-      78,
-      27,
-      17,
-      2
-    ],
-    "RGB": [
-      86,
-      152,
-      195
-    ],
+    "CMYK": [78, 27, 17, 2],
+    "RGB": [86, 152, 195],
     "hex": "#5698c3",
     "name": "睛蓝",
     "pinyin": "jinglan"
   },
   {
-    "CMYK": [
-      99,
-      44,
-      10,
-      1
-    ],
-    "RGB": [
-      33,
-      119,
-      184
-    ],
+    "CMYK": [99, 44, 10, 1],
+    "RGB": [33, 119, 184],
     "hex": "#2177b8",
     "name": "虹蓝",
     "pinyin": "honglan"
   },
   {
-    "CMYK": [
-      43,
-      4,
-      16,
-      0
-    ],
-    "RGB": [
-      176,
-      213,
-      223
-    ],
+    "CMYK": [43, 4, 16, 0],
+    "RGB": [176, 213, 223],
     "hex": "#b0d5df",
     "name": "湖水蓝",
     "pinyin": "hushuilan"
   },
   {
-    "CMYK": [
-      59,
-      12,
-      19,
-      0
-    ],
-    "RGB": [
-      138,
-      188,
-      209
-    ],
+    "CMYK": [59, 12, 19, 0],
+    "RGB": [138, 188, 209],
     "hex": "#8abcd1",
     "name": "秋波蓝",
     "pinyin": "qiubolan"
   },
   {
-    "CMYK": [
-      73,
-      17,
-      20,
-      1
-    ],
-    "RGB": [
-      102,
-      169,
-      201
-    ],
+    "CMYK": [73, 17, 20, 1],
+    "RGB": [102, 169, 201],
     "hex": "#66a9c9",
     "name": "涧石蓝",
     "pinyin": "jianshilan"
   },
   {
-    "CMYK": [
-      93,
-      36,
-      15,
-      2
-    ],
-    "RGB": [
-      41,
-      131,
-      187
-    ],
+    "CMYK": [93, 36, 15, 2],
+    "RGB": [41, 131, 187],
     "hex": "#2983bb",
     "name": "潮蓝",
     "pinyin": "chaolan"
   },
   {
-    "CMYK": [
-      99,
-      48,
-      11,
-      1
-    ],
-    "RGB": [
-      23,
-      114,
-      180
-    ],
+    "CMYK": [99, 48, 11, 1],
+    "RGB": [23, 114, 180],
     "hex": "#1772b4",
     "name": "群青",
     "pinyin": "qunqing"
   },
   {
-    "CMYK": [
-      74,
-      2,
-      24,
-      0
-    ],
-    "RGB": [
-      99,
-      187,
-      208
-    ],
+    "CMYK": [74, 2, 24, 0],
+    "RGB": [99, 187, 208],
     "hex": "#63bbd0",
     "name": "霁青",
     "pinyin": "jiqing"
   },
   {
-    "CMYK": [
-      77,
-      7,
-      24,
-      0
-    ],
-    "RGB": [
-      92,
-      179,
-      204
-    ],
+    "CMYK": [77, 7, 24, 0],
+    "RGB": [92, 179, 204],
     "hex": "#5cb3cc",
     "name": "碧青",
     "pinyin": "biqing"
   },
   {
-    "CMYK": [
-      94,
-      32,
-      17,
-      3
-    ],
-    "RGB": [
-      36,
-      134,
-      185
-    ],
+    "CMYK": [94, 32, 17, 3],
+    "RGB": [36, 134, 185],
     "hex": "#2486b9",
     "name": "宝石蓝",
     "pinyin": "baoshilan"
   },
   {
-    "CMYK": [
-      98,
-      43,
-      14,
-      2
-    ],
-    "RGB": [
-      22,
-      119,
-      179
-    ],
+    "CMYK": [98, 43, 14, 2],
+    "RGB": [22, 119, 179],
     "hex": "#1677b3",
     "name": "天蓝",
     "pinyin": "tianlan"
   },
   {
-    "CMYK": [
-      100,
-      52,
-      11,
-      1
-    ],
-    "RGB": [
-      18,
-      107,
-      174
-    ],
+    "CMYK": [100, 52, 11, 1],
+    "RGB": [18, 107, 174],
     "hex": "#126bae",
     "name": "柏林蓝",
     "pinyin": "bolinlan"
   },
   {
-    "CMYK": [
-      92,
-      10,
-      25,
-      1
-    ],
-    "RGB": [
-      34,
-      162,
-      195
-    ],
+    "CMYK": [92, 10, 25, 1],
+    "RGB": [34, 162, 195],
     "hex": "#22a2c3",
     "name": "海青",
     "pinyin": "haiqing"
   },
   {
-    "CMYK": [
-      94,
-      16,
-      23,
-      3
-    ],
-    "RGB": [
-      26,
-      148,
-      188
-    ],
+    "CMYK": [94, 16, 23, 3],
+    "RGB": [26, 148, 188],
     "hex": "#1a94bc",
     "name": "钴蓝",
     "pinyin": "gulan"
   },
   {
-    "CMYK": [
-      95,
-      25,
-      20,
-      4
-    ],
-    "RGB": [
-      21,
-      139,
-      184
-    ],
+    "CMYK": [95, 25, 20, 4],
+    "RGB": [21, 139, 184],
     "hex": "#158bb8",
     "name": "鸢尾蓝",
     "pinyin": "yuanweilan"
   },
   {
-    "CMYK": [
-      98,
-      42,
-      16,
-      3
-    ],
-    "RGB": [
-      17,
-      119,
-      176
-    ],
+    "CMYK": [98, 42, 16, 3],
+    "RGB": [17, 119, 176],
     "hex": "#1177b0",
     "name": "牵牛花蓝",
     "pinyin": "qianniuhualan"
   },
   {
-    "CMYK": [
-      100,
-      65,
-      11,
-      1
-    ],
-    "RGB": [
-      15,
-      89,
-      164
-    ],
+    "CMYK": [100, 65, 11, 1],
+    "RGB": [15, 89, 164],
     "hex": "#0f59a4",
     "name": "飞燕草蓝",
     "pinyin": "feiyancaolan"
   },
   {
-    "CMYK": [
-      95,
-      47,
-      14,
-      2
-    ],
-    "RGB": [
-      43,
-      115,
-      175
-    ],
+    "CMYK": [95, 47, 14, 2],
+    "RGB": [43, 115, 175],
     "hex": "#2b73af",
     "name": "品蓝",
     "pinyin": "pinlan"
   },
   {
-    "CMYK": [
-      24,
-      14,
-      16,
-      1
-    ],
-    "RGB": [
-      205,
-      209,
-      211
-    ],
+    "CMYK": [24, 14, 16, 1],
+    "RGB": [205, 209, 211],
     "hex": "#cdd1d3",
     "name": "银鱼白",
     "pinyin": "yinyubai"
   },
   {
-    "CMYK": [
-      93,
-      49,
-      17,
-      3
-    ],
-    "RGB": [
-      49,
-      112,
-      167
-    ],
+    "CMYK": [93, 49, 17, 3],
+    "RGB": [49, 112, 167],
     "hex": "#3170a7",
     "name": "安安蓝",
     "pinyin": "ananlan"
   },
   {
-    "CMYK": [
-      64,
-      52,
-      39,
-      28
-    ],
-    "RGB": [
-      94,
-      97,
-      109
-    ],
+    "CMYK": [64, 52, 39, 28],
+    "RGB": [94, 97, 109],
     "hex": "#5e616d",
     "name": "鱼尾灰",
     "pinyin": "yuweihui"
   },
   {
-    "CMYK": [
-      78,
-      60,
-      40,
-      31
-    ],
-    "RGB": [
-      71,
-      81,
-      100
-    ],
+    "CMYK": [78, 60, 40, 31],
+    "RGB": [71, 81, 100],
     "hex": "#475164",
     "name": "鲸鱼灰",
     "pinyin": "jingyuhui"
   },
   {
-    "CMYK": [
-      69,
-      64,
-      52,
-      59
-    ],
-    "RGB": [
-      255,
-      254,
-      250
-    ],
+    "CMYK": [69, 64, 52, 59],
+    "RGB": [255, 254, 250],
     "hex": "#fffefa",
     "name": "海参灰",
     "pinyin": "haishenhui"
   },
   {
-    "CMYK": [
-      76,
-      70,
-      51,
-      60
-    ],
-    "RGB": [
-      53,
-      51,
-      60
-    ],
+    "CMYK": [76, 70, 51, 60],
+    "RGB": [53, 51, 60],
     "hex": "#35333c",
     "name": "沙鱼灰",
     "pinyin": "shayuhui"
   },
   {
-    "CMYK": [
-      100,
-      89,
-      54,
-      79
-    ],
-    "RGB": [
-      15,
-      20,
-      35
-    ],
+    "CMYK": [100, 89, 54, 79],
+    "RGB": [15, 20, 35],
     "hex": "#0f1423",
     "name": "钢蓝",
     "pinyin": "ganglan"
   },
   {
-    "CMYK": [
-      35,
-      13,
-      13,
-      0
-    ],
-    "RGB": [
-      186,
-      204,
-      217
-    ],
+    "CMYK": [35, 13, 13, 0],
+    "RGB": [186, 204, 217],
     "hex": "#baccd9",
     "name": "云水蓝",
     "pinyin": "yunshuilan"
   },
   {
-    "CMYK": [
-      55,
-      20,
-      18,
-      1
-    ],
-    "RGB": [
-      143,
-      178,
-      201
-    ],
+    "CMYK": [55, 20, 18, 1],
+    "RGB": [143, 178, 201],
     "hex": "#8fb2c9",
     "name": "晴山蓝",
     "pinyin": "qingshanlan"
   },
   {
-    "CMYK": [
-      100,
-      60,
-      8,
-      1
-    ],
-    "RGB": [
-      22,
-      97,
-      171
-    ],
+    "CMYK": [100, 60, 8, 1],
+    "RGB": [22, 97, 171],
     "hex": "#1661ab",
     "name": "靛青",
     "pinyin": "dianqing"
   },
   {
-    "CMYK": [
-      29,
-      16,
-      17,
-      1
-    ],
-    "RGB": [
-      196,
-      203,
-      207
-    ],
+    "CMYK": [29, 16, 17, 1],
+    "RGB": [196, 203, 207],
     "hex": "#c4cbcf",
     "name": "大理石灰",
     "pinyin": "dalishihui"
   },
   {
-    "CMYK": [
-      100,
-      67,
-      16,
-      3
-    ],
-    "RGB": [
-      21,
-      85,
-      154
-    ],
+    "CMYK": [100, 67, 16, 3],
+    "RGB": [21, 85, 154],
     "hex": "#15559a",
     "name": "海涛蓝",
     "pinyin": "haitaolan"
   },
   {
-    "CMYK": [
-      81,
-      41,
-      24,
-      8
-    ],
-    "RGB": [
-      78,
-      124,
-      161
-    ],
+    "CMYK": [81, 41, 24, 8],
+    "RGB": [78, 124, 161],
     "hex": "#4e7ca1",
     "name": "蝶翅蓝",
     "pinyin": "diechilan"
   },
   {
-    "CMYK": [
-      93,
-      50,
-      21,
-      6
-    ],
-    "RGB": [
-      52,
-      108,
-      156
-    ],
+    "CMYK": [93, 50, 21, 6],
+    "RGB": [52, 108, 156],
     "hex": "#346c9c",
     "name": "海军蓝",
     "pinyin": "haijunlan"
   },
   {
-    "CMYK": [
-      77,
-      68,
-      54,
-      66
-    ],
-    "RGB": [
-      47,
-      47,
-      53
-    ],
+    "CMYK": [77, 68, 54, 66],
+    "RGB": [47, 47, 53],
     "hex": "#2f2f35",
     "name": "水牛灰",
     "pinyin": "shuiniuhui"
   },
   {
-    "CMYK": [
-      80,
-      70,
-      53,
-      65
-    ],
-    "RGB": [
-      45,
-      46,
-      54
-    ],
+    "CMYK": [80, 70, 53, 65],
+    "RGB": [45, 46, 54],
     "hex": "#2d2e36",
     "name": "牛角灰",
     "pinyin": "niujiaohui"
   },
   {
-    "CMYK": [
-      100,
-      86,
-      54,
-      78
-    ],
-    "RGB": [
-      19,
-      24,
-      36
-    ],
+    "CMYK": [100, 86, 54, 78],
+    "RGB": [19, 24, 36],
     "hex": "#131824",
     "name": "燕颔蓝",
     "pinyin": "yanhanlan"
   },
   {
-    "CMYK": [
-      21,
-      6,
-      10,
-      0
-    ],
-    "RGB": [
-      216,
-      227,
-      231
-    ],
+    "CMYK": [21, 6, 10, 0],
+    "RGB": [216, 227, 231],
     "hex": "#d8e3e7",
     "name": "云峰白",
     "pinyin": "yunfengbai"
   },
   {
-    "CMYK": [
-      32,
-      8,
-      13,
-      0
-    ],
-    "RGB": [
-      195,
-      215,
-      223
-    ],
+    "CMYK": [32, 8, 13, 0],
+    "RGB": [195, 215, 223],
     "hex": "#c3d7df",
     "name": "井天蓝",
     "pinyin": "jingtianlan"
   },
   {
-    "CMYK": [
-      91,
-      24,
-      22,
-      4
-    ],
-    "RGB": [
-      47,
-      144,
-      185
-    ],
+    "CMYK": [91, 24, 22, 4],
+    "RGB": [47, 144, 185],
     "hex": "#2f90b9",
     "name": "云山蓝",
     "pinyin": "yunshanlan"
   },
   {
-    "CMYK": [
-      96,
-      34,
-      18,
-      4
-    ],
-    "RGB": [
-      23,
-      129,
-      181
-    ],
+    "CMYK": [96, 34, 18, 4],
+    "RGB": [23, 129, 181],
     "hex": "#1781b5",
     "name": "釉蓝",
     "pinyin": "youlan"
   },
   {
-    "CMYK": [
-      28,
-      12,
-      17,
-      0
-    ],
-    "RGB": [
-      199,
-      210,
-      212
-    ],
+    "CMYK": [28, 12, 17, 0],
+    "RGB": [199, 210, 212],
     "hex": "#c7d2d4",
     "name": "鸥蓝",
     "pinyin": "oulan"
   },
   {
-    "CMYK": [
-      100,
-      53,
-      21,
-      6
-    ],
-    "RGB": [
-      17,
-      101,
-      154
-    ],
+    "CMYK": [100, 53, 21, 6],
+    "RGB": [17, 101, 154],
     "hex": "#11659a",
     "name": "搪磁蓝",
     "pinyin": "tangcilan"
   },
   {
-    "CMYK": [
-      29,
-      18,
-      21,
-      2
-    ],
-    "RGB": [
-      192,
-      196,
-      195
-    ],
+    "CMYK": [29, 18, 21, 2],
+    "RGB": [192, 196, 195],
     "hex": "#c0c4c3",
     "name": "月影白",
     "pinyin": "yueyingbai"
   },
   {
-    "CMYK": [
-      36,
-      20,
-      23,
-      2
-    ],
-    "RGB": [
-      178,
-      187,
-      190
-    ],
+    "CMYK": [36, 20, 23, 2],
+    "RGB": [178, 187, 190],
     "hex": "#b2bbbe",
     "name": "星灰",
     "pinyin": "xinghui"
   },
   {
-    "CMYK": [
-      70,
-      38,
-      36,
-      18
-    ],
-    "RGB": [
-      94,
-      121,
-      135
-    ],
+    "CMYK": [70, 38, 36, 18],
+    "RGB": [94, 121, 135],
     "hex": "#5e7987",
     "name": "淡蓝灰",
     "pinyin": "danlanhui"
   },
   {
-    "CMYK": [
-      100,
-      68,
-      32,
-      20
-    ],
-    "RGB": [
-      20,
-      74,
-      116
-    ],
+    "CMYK": [100, 68, 32, 20],
+    "RGB": [20, 74, 116],
     "hex": "#144a74",
     "name": "鷃蓝",
     "pinyin": "yanlan"
   },
   {
-    "CMYK": [
-      55,
-      40,
-      40,
-      23
-    ],
-    "RGB": [
-      116,
-      120,
-      122
-    ],
+    "CMYK": [55, 40, 40, 23],
+    "RGB": [116, 120, 122],
     "hex": "#74787a",
     "name": "嫩灰",
     "pinyin": "nenhui"
   },
   {
-    "CMYK": [
-      77,
-      50,
-      41,
-      31
-    ],
-    "RGB": [
-      73,
-      92,
-      105
-    ],
+    "CMYK": [77, 50, 41, 31],
+    "RGB": [73, 92, 105],
     "hex": "#495c69",
     "name": "战舰灰",
     "pinyin": "zhanjianhui"
   },
   {
-    "CMYK": [
-      67,
-      57,
-      49,
-      49
-    ],
-    "RGB": [
-      71,
-      72,
-      76
-    ],
+    "CMYK": [67, 57, 49, 49],
+    "RGB": [71, 72, 76],
     "hex": "#47484c",
     "name": "瓦罐灰",
     "pinyin": "waguanhui"
   },
   {
-    "CMYK": [
-      87,
-      69,
-      51,
-      58
-    ],
-    "RGB": [
-      43,
-      51,
-      62
-    ],
+    "CMYK": [87, 69, 51, 58],
+    "RGB": [43, 51, 62],
     "hex": "#2b333e",
     "name": "青灰",
     "pinyin": "qinghui"
   },
   {
-    "CMYK": [
-      100,
-      77,
-      50,
-      62
-    ],
-    "RGB": [
-      28,
-      41,
-      56
-    ],
+    "CMYK": [100, 77, 50, 62],
+    "RGB": [28, 41, 56],
     "hex": "#1c2938",
     "name": "鸽蓝",
     "pinyin": "gelan"
   },
   {
-    "CMYK": [
-      100,
-      82,
-      51,
-      64
-    ],
-    "RGB": [
-      20,
-      35,
-      52
-    ],
+    "CMYK": [100, 82, 51, 64],
+    "RGB": [20, 35, 52],
     "hex": "#142334",
     "name": "钢青",
     "pinyin": "gangqing"
   },
   {
-    "CMYK": [
-      100,
-      84,
-      51,
-      68
-    ],
-    "RGB": [
-      16,
-      31,
-      48
-    ],
+    "CMYK": [100, 84, 51, 68],
+    "RGB": [16, 31, 48],
     "hex": "#101f30",
     "name": "暗蓝",
     "pinyin": "anlan"
   },
   {
-    "CMYK": [
-      11,
-      0,
-      8,
-      0
-    ],
-    "RGB": [
-      238,
-      247,
-      242
-    ],
+    "CMYK": [11, 0, 8, 0],
+    "RGB": [238, 247, 242],
     "hex": "#eef7f2",
     "name": "月白",
     "pinyin": "yuebai"
   },
   {
-    "CMYK": [
-      33,
-      0,
-      14,
-      0
-    ],
-    "RGB": [
-      198,
-      230,
-      232
-    ],
+    "CMYK": [33, 0, 14, 0],
+    "RGB": [198, 230, 232],
     "hex": "#c6e6e8",
     "name": "海天蓝",
     "pinyin": "haitianlan"
   },
   {
-    "CMYK": [
-      57,
-      0,
-      22,
-      0
-    ],
-    "RGB": [
-      147,
-      213,
-      220
-    ],
+    "CMYK": [57, 0, 22, 0],
+    "RGB": [147, 213, 220],
     "hex": "#93d5dc",
     "name": "清水蓝",
     "pinyin": "qingshuilan"
   },
   {
-    "CMYK": [
-      79,
-      0,
-      27,
-      0
-    ],
-    "RGB": [
-      81,
-      196,
-      211
-    ],
+    "CMYK": [79, 0, 27, 0],
+    "RGB": [81, 196, 211],
     "hex": "#51c4d3",
     "name": "瀑布蓝",
     "pinyin": "pubulan"
   },
   {
-    "CMYK": [
-      89,
-      0,
-      29,
-      0
-    ],
-    "RGB": [
-      41,
-      183,
-      203
-    ],
+    "CMYK": [89, 0, 29, 0],
+    "RGB": [41, 183, 203],
     "hex": "#29b7cb",
     "name": "蔚蓝",
     "pinyin": "weilan"
   },
   {
-    "CMYK": [
-      92,
-      0,
-      28,
-      0
-    ],
-    "RGB": [
-      14,
-      176,
-      201
-    ],
+    "CMYK": [92, 0, 28, 0],
+    "RGB": [14, 176, 201],
     "hex": "#0eb0c9",
     "name": "孔雀蓝",
     "pinyin": "kongquelan"
   },
   {
-    "CMYK": [
-      93,
-      0,
-      31,
-      0
-    ],
-    "RGB": [
-      16,
-      174,
-      194
-    ],
+    "CMYK": [93, 0, 31, 0],
+    "RGB": [16, 174, 194],
     "hex": "#10aec2",
     "name": "甸子蓝",
     "pinyin": "dianzilan"
   },
   {
-    "CMYK": [
-      78,
-      36,
-      0,
-      0
-    ],
-    "RGB": [
-      87,
-      195,
-      194
-    ],
+    "CMYK": [78, 36, 0, 0],
+    "RGB": [87, 195, 194],
     "hex": "#57c3c2",
     "name": "石绿",
     "pinyin": "shilv"
   },
   {
-    "CMYK": [
-      40,
-      0,
-      30,
-      0
-    ],
-    "RGB": [
-      185,
-      222,
-      201
-    ],
+    "CMYK": [40, 0, 30, 0],
+    "RGB": [185, 222, 201],
     "hex": "#b9dec9",
     "name": "竹篁绿",
     "pinyin": "zhuhuanglv"
   },
   {
-    "CMYK": [
-      64,
-      0,
-      46,
-      0
-    ],
-    "RGB": [
-      131,
-      203,
-      172
-    ],
+    "CMYK": [64, 0, 46, 0],
+    "RGB": [131, 203, 172],
     "hex": "#83cbac",
     "name": "粉绿",
     "pinyin": "fenlv"
   },
   {
-    "CMYK": [
-      95,
-      0,
-      52,
-      0
-    ],
-    "RGB": [
-      18,
-      170,
-      156
-    ],
+    "CMYK": [95, 0, 52, 0],
+    "RGB": [18, 170, 156],
     "hex": "#12aa9c",
     "name": "美蝶绿",
     "pinyin": "meidielv"
   },
   {
-    "CMYK": [
-      75,
-      0,
-      61,
-      0
-    ],
-    "RGB": [
-      102,
-      193,
-      140
-    ],
+    "CMYK": [75, 0, 61, 0],
+    "RGB": [102, 193, 140],
     "hex": "#66c18c",
     "name": "毛绿",
     "pinyin": "maolv"
   },
   {
-    "CMYK": [
-      78,
-      0,
-      62,
-      0
-    ],
-    "RGB": [
-      93,
-      190,
-      138
-    ],
+    "CMYK": [78, 0, 62, 0],
+    "RGB": [93, 190, 138],
     "hex": "#5dbe8a",
     "name": "蔻梢绿",
     "pinyin": "koushaolv"
   },
   {
-    "CMYK": [
-      81,
-      0,
-      62,
-      0
-    ],
-    "RGB": [
-      85,
-      187,
-      138
-    ],
+    "CMYK": [81, 0, 62, 0],
+    "RGB": [85, 187, 138],
     "hex": "#55bb8a",
     "name": "麦苗绿",
     "pinyin": "maimiaolv"
   },
   {
-    "CMYK": [
-      86,
-      0,
-      63,
-      0
-    ],
-    "RGB": [
-      69,
-      183,
-      135
-    ],
+    "CMYK": [86, 0, 63, 0],
+    "RGB": [69, 183, 135],
     "hex": "#45b787",
     "name": "蛙绿",
     "pinyin": "walv"
   },
   {
-    "CMYK": [
-      92,
-      0,
-      64,
-      0
-    ],
-    "RGB": [
-      43,
-      174,
-      133
-    ],
+    "CMYK": [92, 0, 64, 0],
+    "RGB": [43, 174, 133],
     "hex": "#2bae85",
     "name": "铜绿",
     "pinyin": "tonglv"
   },
   {
-    "CMYK": [
-      96,
-      0,
-      64,
-      0
-    ],
-    "RGB": [
-      27,
-      167,
-      132
-    ],
+    "CMYK": [96, 0, 64, 0],
+    "RGB": [27, 167, 132],
     "hex": "#1ba784",
     "name": "竹绿",
     "pinyin": "zhulv"
   },
   {
-    "CMYK": [
-      98,
-      2,
-      64,
-      0
-    ],
-    "RGB": [
-      18,
-      161,
-      130
-    ],
+    "CMYK": [98, 2, 64, 0],
+    "RGB": [18, 161, 130],
     "hex": "#12a182",
     "name": "蓝绿",
     "pinyin": "lanlv"
   },
   {
-    "CMYK": [
-      32,
-      7,
-      18,
-      0
-    ],
-    "RGB": [
-      196,
-      215,
-      214
-    ],
+    "CMYK": [32, 7, 18, 0],
+    "RGB": [196, 215, 214],
     "hex": "#c4d7d6",
     "name": "穹灰",
     "pinyin": "qionghui"
   },
   {
-    "CMYK": [
-      94,
-      11,
-      33,
-      1
-    ],
-    "RGB": [
-      30,
-      158,
-      179
-    ],
+    "CMYK": [94, 11, 33, 1],
+    "RGB": [30, 158, 179],
     "hex": "#1e9eb3",
     "name": "翠蓝",
     "pinyin": "cuilan"
   },
   {
-    "CMYK": [
-      96,
-      16,
-      31,
-      3
-    ],
-    "RGB": [
-      15,
-      149,
-      176
-    ],
+    "CMYK": [96, 16, 31, 3],
+    "RGB": [15, 149, 176],
     "hex": "#0f95b0",
     "name": "胆矾蓝",
     "pinyin": "danfanlan"
   },
   {
-    "CMYK": [
-      96,
-      18,
-      34,
-      4
-    ],
-    "RGB": [
-      20,
-      145,
-      168
-    ],
+    "CMYK": [96, 18, 34, 4],
+    "RGB": [20, 145, 168],
     "hex": "#1491a8",
     "name": "樫鸟蓝",
     "pinyin": "jianniaolan"
   },
   {
-    "CMYK": [
-      64,
-      18,
-      32,
-      2
-    ],
-    "RGB": [
-      124,
-      171,
-      177
-    ],
+    "CMYK": [64, 18, 32, 2],
+    "RGB": [124, 171, 177],
     "hex": "#7cabb1",
     "name": "闪蓝",
     "pinyin": "shanlan"
   },
   {
-    "CMYK": [
-      40,
-      24,
-      32,
-      6
-    ],
-    "RGB": [
-      164,
-      172,
-      167
-    ],
+    "CMYK": [40, 24, 32, 6],
+    "RGB": [164, 172, 167],
     "hex": "#a4aca7",
     "name": "冰山蓝",
     "pinyin": "bingshanlan"
   },
   {
-    "CMYK": [
-      56,
-      26,
-      36,
-      7
-    ],
-    "RGB": [
-      134,
-      157,
-      157
-    ],
+    "CMYK": [56, 26, 36, 7],
+    "RGB": [134, 157, 157],
     "hex": "#869d9d",
     "name": "虾壳青",
     "pinyin": "xiakeqing"
   },
   {
-    "CMYK": [
-      71,
-      28,
-      39,
-      10
-    ],
-    "RGB": [
-      100,
-      142,
-      147
-    ],
+    "CMYK": [71, 28, 39, 10],
+    "RGB": [100, 142, 147],
     "hex": "#648e93",
     "name": "晚波蓝",
     "pinyin": "wanbolan"
   },
   {
-    "CMYK": [
-      89,
-      27,
-      41,
-      13
-    ],
-    "RGB": [
-      59,
-      129,
-      140
-    ],
+    "CMYK": [89, 27, 41, 13],
+    "RGB": [59, 129, 140],
     "hex": "#3b818c",
     "name": "蜻蜓蓝",
     "pinyin": "qingtinglan"
   },
   {
-    "CMYK": [
-      99,
-      33,
-      38,
-      21
-    ],
-    "RGB": [
-      18,
-      110,
-      130
-    ],
+    "CMYK": [99, 33, 38, 21],
+    "RGB": [18, 110, 130],
     "hex": "#126e82",
     "name": "玉鈫蓝",
     "pinyin": "yuqinlan"
   },
   {
-    "CMYK": [
-      57,
-      37,
-      42,
-      21
-    ],
-    "RGB": [
-      115,
-      124,
-      123
-    ],
+    "CMYK": [57, 37, 42, 21],
+    "RGB": [115, 124, 123],
     "hex": "#737c7b",
     "name": "垩灰",
     "pinyin": "ehui"
   },
   {
-    "CMYK": [
-      65,
-      40,
-      44,
-      26
-    ],
-    "RGB": [
-      97,
-      113,
-      114
-    ],
+    "CMYK": [65, 40, 44, 26],
+    "RGB": [97, 113, 114],
     "hex": "#617172",
     "name": "夏云灰",
     "pinyin": "xiayunhui"
   },
   {
-    "CMYK": [
-      100,
-      52,
-      46,
-      43
-    ],
-    "RGB": [
-      19,
-      72,
-      87
-    ],
+    "CMYK": [100, 52, 46, 43],
+    "RGB": [19, 72, 87],
     "hex": "#134857",
     "name": "苍蓝",
     "pinyin": "canglan"
   },
   {
-    "CMYK": [
-      67,
-      53,
-      51,
-      50
-    ],
-    "RGB": [
-      71,
-      75,
-      76
-    ],
+    "CMYK": [67, 53, 51, 50],
+    "RGB": [71, 75, 76],
     "hex": "#474b4c",
     "name": "黄昏灰",
     "pinyin": "huanghunhui"
   },
   {
-    "CMYK": [
-      94,
-      58,
-      54,
-      60
-    ],
-    "RGB": [
-      33,
-      55,
-      61
-    ],
+    "CMYK": [94, 58, 54, 60],
+    "RGB": [33, 55, 61],
     "hex": "#21373d",
     "name": "灰蓝",
     "pinyin": "huilan"
   },
   {
-    "CMYK": [
-      100,
-      64,
-      56,
-      68
-    ],
-    "RGB": [
-      19,
-      44,
-      51
-    ],
+    "CMYK": [100, 64, 56, 68],
+    "RGB": [19, 44, 51],
     "hex": "#132c33",
     "name": "深灰蓝",
     "pinyin": "shenhuilan"
   },
   {
-    "CMYK": [
-      49,
-      5,
-      37,
-      0
-    ],
-    "RGB": [
-      164,
-      202,
-      182
-    ],
+    "CMYK": [49, 5, 37, 0],
+    "RGB": [164, 202, 182],
     "hex": "#a4cab6",
     "name": "玉簪绿",
     "pinyin": "yuzanlv"
   },
   {
-    "CMYK": [
-      96,
-      12,
-      66,
-      2
-    ],
-    "RGB": [
-      44,
-      150,
-      120
-    ],
+    "CMYK": [96, 12, 66, 2],
+    "RGB": [44, 150, 120],
     "hex": "#2c9678",
     "name": "青矾绿",
     "pinyin": "qingfanlv"
   },
   {
-    "CMYK": [
-      52,
-      11,
-      37,
-      0
-    ],
-    "RGB": [
-      154,
-      190,
-      175
-    ],
+    "CMYK": [52, 11, 37, 0],
+    "RGB": [154, 190, 175],
     "hex": "#9abeaf",
     "name": "草原远绿",
     "pinyin": "caoyuanyuanlv"
   },
   {
-    "CMYK": [
-      74,
-      14,
-      51,
-      1
-    ],
-    "RGB": [
-      105,
-      167,
-      148
-    ],
+    "CMYK": [74, 14, 51, 1],
+    "RGB": [105, 167, 148],
     "hex": "#69a794",
     "name": "梧枝绿",
     "pinyin": "wuzhilv"
   },
   {
-    "CMYK": [
-      55,
-      16,
-      40,
-      1
-    ],
-    "RGB": [
-      146,
-      179,
-      165
-    ],
+    "CMYK": [55, 16, 40, 1],
+    "RGB": [146, 179, 165],
     "hex": "#92b3a5",
     "name": "浪花绿",
     "pinyin": "langhualv"
   },
   {
-    "CMYK": [
-      99,
-      23,
-      70,
-      10
-    ],
-    "RGB": [
-      36,
-      128,
-      103
-    ],
+    "CMYK": [99, 23, 70, 10],
+    "RGB": [36, 128, 103],
     "hex": "#248067",
     "name": "海王绿",
     "pinyin": "haiwanglv"
   },
   {
-    "CMYK": [
-      88,
-      24,
-      61,
-      9
-    ],
-    "RGB": [
-      66,
-      134,
-      117
-    ],
+    "CMYK": [88, 24, 61, 9],
+    "RGB": [66, 134, 117],
     "hex": "#428675",
     "name": "亚丁绿",
     "pinyin": "yadinglv"
   },
   {
-    "CMYK": [
-      40,
-      27,
-      36,
-      8
-    ],
-    "RGB": [
-      159,
-      163,
-      154
-    ],
+    "CMYK": [40, 27, 36, 8],
+    "RGB": [159, 163, 154],
     "hex": "#9fa39a",
     "name": "镍灰",
     "pinyin": "niehui"
   },
   {
-    "CMYK": [
-      52,
-      28,
-      42,
-      10
-    ],
-    "RGB": [
-      138,
-      152,
-      142
-    ],
+    "CMYK": [52, 28, 42, 10],
+    "RGB": [138, 152, 142],
     "hex": "#8a988e",
     "name": "明灰",
     "pinyin": "minghui"
   },
   {
-    "CMYK": [
-      63,
-      31,
-      50,
-      14
-    ],
-    "RGB": [
-      112,
-      136,
-      125
-    ],
+    "CMYK": [63, 31, 50, 14],
+    "RGB": [112, 136, 125],
     "hex": "#70887d",
     "name": "淡绿灰",
     "pinyin": "danlvhui"
   },
   {
-    "CMYK": [
-      82,
-      32,
-      60,
-      20
-    ],
-    "RGB": [
-      73,
-      117,
-      104
-    ],
+    "CMYK": [82, 32, 60, 20],
+    "RGB": [73, 117, 104],
     "hex": "#497568",
     "name": "飞泉绿",
     "pinyin": "feiquanlv"
   },
   {
-    "CMYK": [
-      62,
-      43,
-      52,
-      34
-    ],
-    "RGB": [
-      93,
-      101,
-      95
-    ],
+    "CMYK": [62, 43, 52, 34],
+    "RGB": [93, 101, 95],
     "hex": "#5d655f",
     "name": "狼烟灰",
     "pinyin": "langyanhui"
   },
   {
-    "CMYK": [
-      85,
-      44,
-      64,
-      52
-    ],
-    "RGB": [
-      49,
-      74,
-      67
-    ],
+    "CMYK": [85, 44, 64, 52],
+    "RGB": [49, 74, 67],
     "hex": "#314a43",
     "name": "绿灰",
     "pinyin": "lvhui"
   },
   {
-    "CMYK": [
-      93,
-      46,
-      70,
-      61
-    ],
-    "RGB": [
-      34,
-      62,
-      54
-    ],
+    "CMYK": [93, 46, 70, 61],
+    "RGB": [34, 62, 54],
     "hex": "#223e36",
     "name": "苍绿",
     "pinyin": "canglv"
   },
   {
-    "CMYK": [
-      98,
-      46,
-      73,
-      63
-    ],
-    "RGB": [
-      26,
-      59,
-      50
-    ],
+    "CMYK": [98, 46, 73, 63],
+    "RGB": [26, 59, 50],
     "hex": "#1a3b32",
     "name": "深海绿",
     "pinyin": "shenhailv"
   },
   {
-    "CMYK": [
-      67,
-      60,
-      57,
-      68
-    ],
-    "RGB": [
-      54,
-      52,
-      51
-    ],
+    "CMYK": [67, 60, 57, 68],
+    "RGB": [54, 52, 51],
     "hex": "#363433",
     "name": "长石灰",
     "pinyin": "changshihui"
   },
   {
-    "CMYK": [
-      82,
-      60,
-      65,
-      80
-    ],
-    "RGB": [
-      31,
-      38,
-      35
-    ],
+    "CMYK": [82, 60, 65, 80],
+    "RGB": [31, 38, 35],
     "hex": "#1f2623",
     "name": "苷蓝绿",
     "pinyin": "ganlanlv"
   },
   {
-    "CMYK": [
-      90,
-      62,
-      67,
-      86
-    ],
-    "RGB": [
-      20,
-      30,
-      27
-    ],
+    "CMYK": [90, 62, 67, 86],
+    "RGB": [20, 30, 27],
     "hex": "#141e1b",
     "name": "莽丛绿",
     "pinyin": "mangconglv"
   },
   {
-    "CMYK": [
-      33,
-      1,
-      29,
-      0
-    ],
-    "RGB": [
-      198,
-      223,
-      200
-    ],
+    "CMYK": [33, 1, 29, 0],
+    "RGB": [198, 223, 200],
     "hex": "#c6dfc8",
     "name": "淡翠绿",
     "pinyin": "dancuilv"
   },
   {
-    "CMYK": [
-      53,
-      1,
-      44,
-      0
-    ],
-    "RGB": [
-      158,
-      204,
-      171
-    ],
+    "CMYK": [53, 1, 44, 0],
+    "RGB": [158, 204, 171],
     "hex": "#9eccab",
     "name": "明绿",
     "pinyin": "minglv"
   },
   {
-    "CMYK": [
-      75,
-      0,
-      59,
-      0
-    ],
-    "RGB": [
-      104,
-      184,
-      142
-    ],
+    "CMYK": [75, 0, 59, 0],
+    "RGB": [104, 184, 142],
     "hex": "#68b88e",
     "name": "田园绿",
     "pinyin": "tianyuanlv"
   },
   {
-    "CMYK": [
-      98,
-      0,
-      82,
-      0
-    ],
-    "RGB": [
-      32,
-      161,
-      98
-    ],
+    "CMYK": [98, 0, 82, 0],
+    "RGB": [32, 161, 98],
     "hex": "#20a162",
     "name": "翠绿",
     "pinyin": "cuilv"
   },
   {
-    "CMYK": [
-      78,
-      6,
-      62,
-      0
-    ],
-    "RGB": [
-      97,
-      172,
-      133
-    ],
+    "CMYK": [78, 6, 62, 0],
+    "RGB": [97, 172, 133],
     "hex": "#61ac85",
     "name": "淡绿",
     "pinyin": "danlv"
   },
   {
-    "CMYK": [
-      90,
-      7,
-      73,
-      0
-    ],
-    "RGB": [
-      64,
-      160,
-      112
-    ],
+    "CMYK": [90, 7, 73, 0],
+    "RGB": [64, 160, 112],
     "hex": "#40a070",
     "name": "葱绿",
     "pinyin": "conglv"
   },
   {
-    "CMYK": [
-      99,
-      10,
-      91,
-      2
-    ],
-    "RGB": [
-      34,
-      148,
-      83
-    ],
+    "CMYK": [99, 10, 91, 2],
+    "RGB": [34, 148, 83],
     "hex": "#229453",
     "name": "孔雀绿",
     "pinyin": "kongquelv"
   },
   {
-    "CMYK": [
-      27,
-      11,
-      27,
-      1
-    ],
-    "RGB": [
-      202,
-      211,
-      195
-    ],
+    "CMYK": [27, 11, 27, 1],
+    "RGB": [202, 211, 195],
     "hex": "#cad3c3",
     "name": "艾绿",
     "pinyin": "ailv"
   },
   {
-    "CMYK": [
-      92,
-      14,
-      76,
-      2
-    ],
-    "RGB": [
-      60,
-      149,
-      102
-    ],
+    "CMYK": [92, 14, 76, 2],
+    "RGB": [60, 149, 102],
     "hex": "#3c9566",
     "name": "蟾绿",
     "pinyin": "chanlv"
   },
   {
-    "CMYK": [
-      100,
-      17,
-      92,
-      5
-    ],
-    "RGB": [
-      32,
-      137,
-      77
-    ],
+    "CMYK": [100, 17, 92, 5],
+    "RGB": [32, 137, 77],
     "hex": "#20894d",
     "name": "宫殿绿",
     "pinyin": "gongdianlv"
   },
   {
-    "CMYK": [
-      61,
-      19,
-      52,
-      3
-    ],
-    "RGB": [
-      131,
-      167,
-      141
-    ],
+    "CMYK": [61, 19, 52, 3],
+    "RGB": [131, 167, 141],
     "hex": "#83a78d",
     "name": "松霜绿",
     "pinyin": "songshuanglv"
   },
   {
-    "CMYK": [
-      81,
-      19,
-      67,
-      4
-    ],
-    "RGB": [
-      87,
-      149,
-      114
-    ],
+    "CMYK": [81, 19, 67, 4],
+    "RGB": [87, 149, 114],
     "hex": "#579572",
     "name": "蛋白石绿",
     "pinyin": "danbaishilv"
   },
   {
-    "CMYK": [
-      100,
-      22,
-      90,
-      10
-    ],
-    "RGB": [
-      32,
-      127,
-      76
-    ],
+    "CMYK": [100, 22, 90, 10],
+    "RGB": [32, 127, 76],
     "hex": "#207f4c",
     "name": "薄荷绿",
     "pinyin": "bohelv"
   },
   {
-    "CMYK": [
-      66,
-      29,
-      58,
-      12
-    ],
-    "RGB": [
-      110,
-      139,
-      116
-    ],
+    "CMYK": [66, 29, 58, 12],
+    "RGB": [110, 139, 116],
     "hex": "#6e8b74",
     "name": "瓦松绿",
     "pinyin": "wasonglv"
   },
   {
-    "CMYK": [
-      100,
-      31,
-      91,
-      25
-    ],
-    "RGB": [
-      26,
-      104,
-      64
-    ],
+    "CMYK": [100, 31, 91, 25],
+    "RGB": [26, 104, 64],
     "hex": "#1a6840",
     "name": "荷叶绿",
     "pinyin": "heyelv"
   },
   {
-    "CMYK": [
-      62,
-      42,
-      56,
-      34
-    ],
-    "RGB": [
-      94,
-      102,
-      91
-    ],
+    "CMYK": [62, 42, 56, 34],
+    "RGB": [94, 102, 91],
     "hex": "#5e665b",
     "name": "田螺绿",
     "pinyin": "tianluolv"
   },
   {
-    "CMYK": [
-      74,
-      42,
-      65,
-      40
-    ],
-    "RGB": [
-      72,
-      91,
-      77
-    ],
+    "CMYK": [74, 42, 65, 40],
+    "RGB": [72, 91, 77],
     "hex": "#485b4d",
     "name": "白屈菜绿",
     "pinyin": "baiqucailv"
   },
   {
-    "CMYK": [
-      64,
-      57,
-      60,
-      67
-    ],
-    "RGB": [
-      57,
-      55,
-      51
-    ],
+    "CMYK": [64, 57, 60, 67],
+    "RGB": [57, 55, 51],
     "hex": "#393733",
     "name": "河豚灰",
     "pinyin": "hetunhui"
   },
   {
-    "CMYK": [
-      68,
-      56,
-      60,
-      66
-    ],
-    "RGB": [
-      55,
-      56,
-      52
-    ],
+    "CMYK": [68, 56, 60, 66],
+    "RGB": [55, 56, 52],
     "hex": "#373834",
     "name": "蒽油绿",
     "pinyin": "enyoulv"
   },
   {
-    "CMYK": [
-      76,
-      56,
-      75,
-      72
-    ],
-    "RGB": [
-      43,
-      49,
-      44
-    ],
+    "CMYK": [76, 56, 75, 72],
+    "RGB": [43, 49, 44],
     "hex": "#2b312c",
     "name": "槲寄生绿",
     "pinyin": "hujishenglv"
   },
   {
-    "CMYK": [
-      91,
-      60,
-      76,
-      83
-    ],
-    "RGB": [
-      21,
-      35,
-      27
-    ],
+    "CMYK": [91, 60, 76, 83],
+    "RGB": [21, 35, 27],
     "hex": "#15231b",
     "name": "云杉绿",
     "pinyin": "yunshanlv"
   },
   {
-    "CMYK": [
-      9,
-      1,
-      14,
-      0
-    ],
-    "RGB": [
-      240,
-      245,
-      229
-    ],
+    "CMYK": [9, 1, 14, 0],
+    "RGB": [240, 245, 229],
     "hex": "#f0f5e5",
     "name": "嫩菊绿",
     "pinyin": "nenjulv"
   },
   {
-    "CMYK": [
-      20,
-      1,
-      23,
-      0
-    ],
-    "RGB": [
-      223,
-      236,
-      213
-    ],
+    "CMYK": [20, 1, 23, 0],
+    "RGB": [223, 236, 213],
     "hex": "#dfecd5",
     "name": "艾背绿",
     "pinyin": "aibeilv"
   },
   {
-    "CMYK": [
-      47,
-      0,
-      49,
-      0
-    ],
-    "RGB": [
-      173,
-      213,
-      162
-    ],
+    "CMYK": [47, 0, 49, 0],
+    "RGB": [173, 213, 162],
     "hex": "#add5a2",
     "name": "嘉陵水绿",
     "pinyin": "jialingshuilv"
   },
   {
-    "CMYK": [
-      89,
-      0,
-      96,
-      0
-    ],
-    "RGB": [
-      65,
-      179,
-      73
-    ],
+    "CMYK": [89, 0, 96, 0],
+    "RGB": [65, 179, 73],
     "hex": "#41b349",
     "name": "玉髓绿",
     "pinyin": "yusuilv"
   },
   {
-    "CMYK": [
-      88,
-      0,
-      99,
-      0
-    ],
-    "RGB": [
-      67,
-      178,
-      68
-    ],
+    "CMYK": [88, 0, 99, 0],
+    "RGB": [67, 178, 68],
     "hex": "#43b244",
     "name": "鲜绿",
     "pinyin": "xianlv"
   },
   {
-    "CMYK": [
-      90,
-      0,
-      100,
-      0
-    ],
-    "RGB": [
-      65,
-      174,
-      60
-    ],
+    "CMYK": [90, 0, 100, 0],
+    "RGB": [65, 174, 60],
     "hex": "#41ae3c",
     "name": "宝石绿",
     "pinyin": "baoshilv"
   },
   {
-    "CMYK": [
-      18,
-      4,
-      33,
-      0
-    ],
-    "RGB": [
-      226,
-      231,
-      191
-    ],
+    "CMYK": [18, 4, 33, 0],
+    "RGB": [226, 231, 191],
     "hex": "#e2e7bf",
     "name": "海沬绿",
     "pinyin": "haimeilv"
   },
   {
-    "CMYK": [
-      28,
-      4,
-      44,
-      0
-    ],
-    "RGB": [
-      208,
-      222,
-      170
-    ],
+    "CMYK": [28, 4, 44, 0],
+    "RGB": [208, 222, 170],
     "hex": "#d0deaa",
     "name": "姚黄",
     "pinyin": "yaohuang"
   },
   {
-    "CMYK": [
-      44,
-      3,
-      61,
-      0
-    ],
-    "RGB": [
-      178,
-      207,
-      135
-    ],
+    "CMYK": [44, 3, 61, 0],
+    "RGB": [178, 207, 135],
     "hex": "#b2cf87",
     "name": "橄榄石绿",
     "pinyin": "ganlanshilv"
   },
   {
-    "CMYK": [
-      62,
-      0,
-      76,
-      0
-    ],
-    "RGB": [
-      140,
-      194,
-      105
-    ],
+    "CMYK": [62, 0, 76, 0],
+    "RGB": [140, 194, 105],
     "hex": "#8cc269",
     "name": "水绿",
     "pinyin": "shuilv"
   },
   {
-    "CMYK": [
-      42,
-      3,
-      67,
-      0
-    ],
-    "RGB": [
-      183,
-      208,
-      122
-    ],
+    "CMYK": [42, 3, 67, 0],
+    "RGB": [183, 208, 122],
     "hex": "#b7d07a",
     "name": "芦苇绿",
     "pinyin": "luweilv"
   },
   {
-    "CMYK": [
-      28,
-      6,
-      66,
-      0
-    ],
-    "RGB": [
-      210,
-      217,
-      122
-    ],
+    "CMYK": [28, 6, 66, 0],
+    "RGB": [210, 217, 122],
     "hex": "#d2d97a",
     "name": "槐花黄绿",
     "pinyin": "huaihuahuanglv"
   },
   {
-    "CMYK": [
-      41,
-      4,
-      76,
-      0
-    ],
-    "RGB": [
-      186,
-      207,
-      101
-    ],
+    "CMYK": [41, 4, 76, 0],
+    "RGB": [186, 207, 101],
     "hex": "#bacf65",
     "name": "苹果绿",
     "pinyin": "pingguolv"
   },
   {
-    "CMYK": [
-      58,
-      1,
-      88,
-      0
-    ],
-    "RGB": [
-      150,
-      194,
-      78
-    ],
+    "CMYK": [58, 1, 88, 0],
+    "RGB": [150, 194, 78],
     "hex": "#96c24e",
     "name": "芽绿",
     "pinyin": "yalv"
   },
   {
-    "CMYK": [
-      19,
-      9,
-      84,
-      1
-    ],
-    "RGB": [
-      226,
-      216,
-      73
-    ],
+    "CMYK": [19, 9, 84, 1],
+    "RGB": [226, 216, 73],
     "hex": "#e2d849",
     "name": "蝶黄",
     "pinyin": "diehuang"
   },
   {
-    "CMYK": [
-      38,
-      8,
-      94,
-      1
-    ],
-    "RGB": [
-      190,
-      201,
-      54
-    ],
+    "CMYK": [38, 8, 94, 1],
+    "RGB": [190, 201, 54],
     "hex": "#bec936",
     "name": "橄榄黄绿",
     "pinyin": "ganlanhuanglv"
   },
   {
-    "CMYK": [
-      81,
-      0,
-      100,
-      0
-    ],
-    "RGB": [
-      91,
-      174,
-      35
-    ],
+    "CMYK": [81, 0, 100, 0],
+    "RGB": [91, 174, 35],
     "hex": "#5bae23",
     "name": "鹦鹉绿",
     "pinyin": "yingwulv"
   },
   {
-    "CMYK": [
-      84,
-      64,
-      94,
-      45
-    ],
-    "RGB": [
-      37,
-      61,
-      36
-    ],
+    "CMYK": [84, 64, 94, 45],
+    "RGB": [37, 61, 36],
     "hex": "#253d24",
     "name": "油绿",
     "pinyin": "youlv"
   },
   {
-    "CMYK": [
-      0,
-      1,
-      4,
-      0
-    ],
-    "RGB": [
-      255,
-      254,
-      248
-    ],
+    "CMYK": [0, 1, 4, 0],
+    "RGB": [255, 254, 248],
     "hex": "#fffef8",
     "name": "象牙白",
     "pinyin": "xiangyabai"
   },
   {
-    "CMYK": [
-      3,
-      5,
-      8,
-      0
-    ],
-    "RGB": [
-      248,
-      244,
-      237
-    ],
+    "CMYK": [3, 5, 8, 0],
+    "RGB": [248, 244, 237],
     "hex": "#f8f4ed",
     "name": "汉白玉",
     "pinyin": "hanbaiyu"
   },
   {
-    "CMYK": [
-      0,
-      1,
-      3,
-      0
-    ],
-    "RGB": [
-      255,
-      254,
-      249
-    ],
+    "CMYK": [0, 1, 3, 0],
+    "RGB": [255, 254, 249],
     "hex": "#fffef9",
     "name": "雪白",
     "pinyin": "xuebai"
   },
   {
-    "CMYK": [
-      4,
-      4,
-      8,
-      0
-    ],
-    "RGB": [
-      247,
-      244,
-      237
-    ],
+    "CMYK": [4, 4, 8, 0],
+    "RGB": [247, 244, 237],
     "hex": "#f7f4ed",
     "name": "鱼肚白",
     "pinyin": "yudubai"
   },
   {
-    "CMYK": [
-      12,
-      12,
-      16,
-      0
-    ],
-    "RGB": [
-      228,
-      223,
-      215
-    ],
+    "CMYK": [12, 12, 16, 0],
+    "RGB": [228, 223, 215],
     "hex": "#e4dfd7",
     "name": "珍珠灰",
     "pinyin": "zhenzhuhui"
   },
   {
-    "CMYK": [
-      16,
-      15,
-      20,
-      1
-    ],
-    "RGB": [
-      218,
-      212,
-      203
-    ],
+    "CMYK": [16, 15, 20, 1],
+    "RGB": [218, 212, 203],
     "hex": "#dad4cb",
     "name": "浅灰",
     "pinyin": "qianhui"
   },
   {
-    "CMYK": [
-      28,
-      5,
-      30,
-      5
-    ],
-    "RGB": [
-      187,
-      181,
-      172
-    ],
+    "CMYK": [28, 5, 30, 5],
+    "RGB": [187, 181, 172],
     "hex": "#bbb5ac",
     "name": "铅灰",
     "pinyin": "qianhui"
   },
   {
-    "CMYK": [
-      28,
-      25,
-      30,
-      5
-    ],
-    "RGB": [
-      187,
-      181,
-      172
-    ],
+    "CMYK": [28, 25, 30, 5],
+    "RGB": [187, 181, 172],
     "hex": "#bbb5ac",
     "name": "中灰",
     "pinyin": "zhonghui"
   },
   {
-    "CMYK": [
-      42,
-      40,
-      43,
-      23
-    ],
-    "RGB": [
-      134,
-      126,
-      118
-    ],
+    "CMYK": [42, 40, 43, 23],
+    "RGB": [134, 126, 118],
     "hex": "#867e76",
     "name": "瓦灰",
     "pinyin": "wahui"
   },
   {
-    "CMYK": [
-      43,
-      40,
-      44,
-      42
-    ],
-    "RGB": [
-      132,
-      124,
-      116
-    ],
+    "CMYK": [43, 40, 44, 42],
+    "RGB": [132, 124, 116],
     "hex": "#847c74",
     "name": "夜灰",
     "pinyin": "yehui"
   },
   {
-    "CMYK": [
-      42,
-      42,
-      45,
-      27
-    ],
-    "RGB": [
-      128,
-      118,
-      110
-    ],
+    "CMYK": [42, 42, 45, 27],
+    "RGB": [128, 118, 110],
     "hex": "#80766e",
     "name": "雁灰",
     "pinyin": "yanhui"
   },
   {
-    "CMYK": [
-      42,
-      42,
-      46,
-      27
-    ],
-    "RGB": [
-      129,
-      119,
-      110
-    ],
+    "CMYK": [42, 42, 46, 27],
+    "RGB": [129, 119, 110],
     "hex": "#81776e",
     "name": "深灰",
     "pinyin": "shenhui"
   }
-]
\ No newline at end of file
+]
diff --git a/src/settings/designColorRecommend.json b/src/settings/designColorRecommend.json
index 75df5407..79420979 100644
--- a/src/settings/designColorRecommend.json
+++ b/src/settings/designColorRecommend.json
@@ -1,66 +1,30 @@
 [
   {
-    "CMYK": [
-      62,
-      0,
-      21,
-      16
-    ],
-    "RGB": [
-      81,
-      214,
-      169
-    ],
+    "CMYK": [62, 0, 21, 16],
+    "RGB": [81, 214, 169],
     "hex": "#51d6a9",
     "name": "碧空绿",
     "pinyin": "bikonlv"
   },
   {
-    "CMYK": [
-      93,
-      0,
-      31,
-      0
-    ],
-    "RGB": [
-      16,
-      174,
-      194
-    ],
-    "hex": "#10aec2",
-    "name": "甸子蓝",
-    "pinyin": "dianzilan"
+    "CMYK": [4, 13, 67, 0],
+    "RGB": [248, 223, 114],
+    "hex": "#f8df72",
+    "name": "茉莉黄",
+    "pinyin": "molihuang"
   },
   {
-    "CMYK": [
-      76,
-      51,
-      0,
-      0
-    ],
-    "RGB": [
-      60,
-      126,
-      255
-    ],
+    "CMYK": [76, 51, 0, 0],
+    "RGB": [60, 126, 255],
     "hex": "#3c7eff",
     "name": "深海蓝",
     "pinyin": "shenhailan"
   },
   {
-    "CMYK": [
-      4,
-      13,
-      67,
-      0
-    ],
-    "RGB": [
-      248,
-      223,
-      114
-    ],
-    "hex": "#f8df72",
-    "name": "茉莉黄",
-    "pinyin": "molihuang"
+    "CMYK": [59, 12, 19, 0],
+    "RGB": [138, 188, 209],
+    "hex": "#8abcd1",
+    "name": "秋波蓝",
+    "pinyin": "qiubolan"
   }
-]
\ No newline at end of file
+]

From 9707e4af0faa38e3eac47d4150a87065c5ae1d8d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 1 Oct 2022 21:10:06 +0800
Subject: [PATCH 39/56] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=9B=BE?=
 =?UTF-8?q?=E5=B1=82=E5=B1=95=E7=A4=BA=E7=B1=BB=E5=9E=8B=E6=8C=81=E4=B9=85?=
 =?UTF-8?q?=E5=8C=96=E5=AD=98=E5=82=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/packages/index.d.ts                       | 11 +++++---
 .../chartLayoutStore/chartLayoutStore.d.ts    |  8 ++++++
 .../chartLayoutStore/chartLayoutStore.ts      |  9 +++++--
 .../components/LayersGroupListItem/index.vue  |  2 +-
 .../components/LayersListItem/index.vue       |  2 +-
 .../components/LayersStatus/index.vue         |  5 ++--
 src/views/chart/ContentLayers/index.d.ts      |  4 ---
 src/views/chart/ContentLayers/index.vue       | 26 ++++++++++++-------
 8 files changed, 43 insertions(+), 24 deletions(-)
 delete mode 100644 src/views/chart/ContentLayers/index.d.ts

diff --git a/src/packages/index.d.ts b/src/packages/index.d.ts
index e7d8cdf4..a565b12b 100644
--- a/src/packages/index.d.ts
+++ b/src/packages/index.d.ts
@@ -36,6 +36,12 @@ interface EchartsDataType {
   source: any[]
 }
 
+// 组件状态
+export interface StatusType {
+  lock: boolean,
+  hide: boolean,
+}
+
 // 滤镜/变换枚举
 export enum FilterEnum {
   // 是否启用
@@ -84,11 +90,8 @@ export interface PublicConfigType {
     // 动画
     animations: string[]
   },
-  status: {
-    lock: boolean,
-    hide: boolean,
-  },
   filter?: string
+  status: StatusType,
   setPosition: Function
 }
 
diff --git a/src/store/modules/chartLayoutStore/chartLayoutStore.d.ts b/src/store/modules/chartLayoutStore/chartLayoutStore.d.ts
index fecae02b..135f155a 100644
--- a/src/store/modules/chartLayoutStore/chartLayoutStore.d.ts
+++ b/src/store/modules/chartLayoutStore/chartLayoutStore.d.ts
@@ -1,7 +1,13 @@
+export enum LayerModeEnum {
+  THUMBNAIL = 'thumbnail',
+  TEXT = 'text'
+}
+
 export enum ChartLayoutStoreEnum {
   LAYERS = 'layers',
   CHARTS = 'charts',
   DETAILS = 'details',
+  LAYER_TYPE = 'layerType'
 }
 
 export interface ChartLayoutType {
@@ -11,4 +17,6 @@ export interface ChartLayoutType {
   [ChartLayoutStoreEnum.CHARTS]: boolean
   // 详情设置
   [ChartLayoutStoreEnum.DETAILS]: boolean
+  // 层级展示方式
+  [ChartLayoutStoreEnum.LAYER_TYPE]: LayerModeEnum
 }
diff --git a/src/store/modules/chartLayoutStore/chartLayoutStore.ts b/src/store/modules/chartLayoutStore/chartLayoutStore.ts
index e2c4ac9b..6a8bcc1a 100644
--- a/src/store/modules/chartLayoutStore/chartLayoutStore.ts
+++ b/src/store/modules/chartLayoutStore/chartLayoutStore.ts
@@ -1,5 +1,5 @@
 import { defineStore } from 'pinia'
-import { ChartLayoutType } from './chartLayoutStore.d'
+import { ChartLayoutType, LayerModeEnum } from './chartLayoutStore.d'
 import { setLocalStorage, getLocalStorage } from '@/utils'
 import { StorageEnum } from '@/enums/storageEnum'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
@@ -20,7 +20,9 @@ export const useChartLayoutStore = defineStore({
       // 图表组件
       charts: true,
       // 详情设置(收缩为true)
-      details: false
+      details: false,
+      // 图层类型(默认图片)
+      layerType: LayerModeEnum.THUMBNAIL
     },
   getters: {
     getLayers(): boolean {
@@ -31,6 +33,9 @@ export const useChartLayoutStore = defineStore({
     },
     getDetails(): boolean {
       return this.details
+    },
+    getLayerType(): LayerModeEnum {
+      return this.layerType
     }
   },
   actions: {
diff --git a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
index d9156753..587eb85b 100644
--- a/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersGroupListItem/index.vue
@@ -51,10 +51,10 @@ import { useDesignStore } from '@/store/modules/designStore/designStore'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook'
 import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
+import { LayerModeEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
 import { LayersListItem } from '../LayersListItem'
 import { LayersStatus } from '../LayersStatus/index'
-import { LayerModeEnum } from '../../index.d'
 import { icon } from '@/plugins'
 
 const props = defineProps({
diff --git a/src/views/chart/ContentLayers/components/LayersListItem/index.vue b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
index 8562b55f..2e72cff0 100644
--- a/src/views/chart/ContentLayers/components/LayersListItem/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersListItem/index.vue
@@ -24,8 +24,8 @@ import { computed, PropType } from 'vue'
 import { requireErrorImg } from '@/utils'
 import { useDesignStore } from '@/store/modules/designStore/designStore'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
+import { LayerModeEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
 import { LayersStatus } from '../LayersStatus/index'
-import { LayerModeEnum } from '../../index.d'
 
 const props = defineProps({
   componentData: {
diff --git a/src/views/chart/ContentLayers/components/LayersStatus/index.vue b/src/views/chart/ContentLayers/components/LayersStatus/index.vue
index e0cc2547..a43d8aa0 100644
--- a/src/views/chart/ContentLayers/components/LayersStatus/index.vue
+++ b/src/views/chart/ContentLayers/components/LayersStatus/index.vue
@@ -20,9 +20,8 @@
 <script setup lang="ts">
 import { computed, PropType } from 'vue'
 import { useDesignStore } from '@/store/modules/designStore/designStore'
-import { PublicConfigType } from '@/packages/index.d'
+import { StatusType } from '@/packages/index.d'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
-import { LayerModeEnum } from '../../index.d'
 import { icon } from '@/plugins'
 
 const props = defineProps({
@@ -35,7 +34,7 @@ const props = defineProps({
     default: false
   },
   status: {
-    type: Object as PropType<Pick<PublicConfigType, 'status'>>,
+    type: Object as PropType<StatusType>,
     default: () => ({
       lock: false,
       hide: false
diff --git a/src/views/chart/ContentLayers/index.d.ts b/src/views/chart/ContentLayers/index.d.ts
deleted file mode 100644
index 06596dee..00000000
--- a/src/views/chart/ContentLayers/index.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export enum LayerModeEnum {
-  THUMBNAIL = 'thumbnail',
-  TEXT = 'text'
-}
diff --git a/src/views/chart/ContentLayers/index.vue b/src/views/chart/ContentLayers/index.vue
index c3323410..d1a89269 100644
--- a/src/views/chart/ContentLayers/index.vue
+++ b/src/views/chart/ContentLayers/index.vue
@@ -14,12 +14,12 @@
     <template #top-right>
       <n-button-group style="display: flex">
         <n-button
-          v-for="(item, index) in layerModeEnumList"
+          v-for="(item, index) in layerModeList"
           :key="index"
           ghost
           size="small"
           :type="layerMode === item.value ? 'primary' : 'tertiary'"
-          @click="layerMode = item.value as LayerModeEnum"
+          @click="changeLayerType(item.value)"
         >
           <n-tooltip :show-arrow="false" trigger="hover">
             <template #trigger>
@@ -68,7 +68,7 @@ import Draggable from 'vuedraggable'
 import cloneDeep from 'lodash/cloneDeep'
 import { ContentBox } from '../ContentBox/index'
 import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore'
-import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
+import { ChartLayoutStoreEnum, LayerModeEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
 import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
@@ -77,7 +77,6 @@ import { MenuEnum, MouseEventButton, WinKeyboard, MacKeyboard } from '@/enums/ed
 
 import { LayersListItem } from './components/LayersListItem/index'
 import { LayersGroupListItem } from './components/LayersGroupListItem/index'
-import { LayerModeEnum } from './index.d'
 
 import { icon } from '@/plugins'
 
@@ -86,12 +85,13 @@ const chartLayoutStore = useChartLayoutStore()
 const chartEditStore = useChartEditStore()
 const { handleContextMenu, onClickOutSide } = useContextMenu()
 
-const layerList = ref<any>([])
-const layerModeEnumList = [
-  { label: '缩略图', icon: ImagesIcon, value: 'thumbnail' },
-  { label: '文本列表', icon: ListIcon, value: 'text' }
+const layerModeList = [
+  { label: '缩略图', icon: ImagesIcon, value: LayerModeEnum.THUMBNAIL },
+  { label: '文本列表', icon: ListIcon, value: LayerModeEnum.TEXT }
 ]
-const layerMode = ref<LayerModeEnum>('thumbnail')
+
+const layerList = ref<any>([])
+const layerMode = ref<LayerModeEnum>(chartLayoutStore.getLayerType)
 
 // 逆序展示
 const reverseList = computed(() => {
@@ -117,6 +117,7 @@ const optionsHandle = (
     return targetList.filter(i => i.key === MenuEnum.GROUP)
   }
   const statusMenuEnums: MenuEnum[] = []
+  // 处理锁定与隐藏
   if (targetInstance.status.lock) {
     statusMenuEnums.push(MenuEnum.LOCK)
   } else {
@@ -191,6 +192,13 @@ const mouseenterHandle = (item: CreateComponentType) => {
 const mouseleaveHandle = (item: CreateComponentType) => {
   chartEditStore.setTargetHoverChart(undefined)
 }
+
+// 修改图层展示方式
+const changeLayerType = (value: LayerModeEnum) => {
+  layerMode.value = value
+  chartLayoutStore.setItem(ChartLayoutStoreEnum.LAYER_TYPE, value)
+}
+
 </script>
 
 <style lang="scss" scoped>

From 4c290d64ba8f783d988c0ae76baaed7adfa0a522 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Sat, 1 Oct 2022 22:49:27 +0800
Subject: [PATCH 40/56] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20naive-ui=20?=
 =?UTF-8?q?=E5=BC=95=E7=94=A8=E7=89=88=E6=9C=AC=E9=80=A0=E6=88=90=E5=80=92?=
 =?UTF-8?q?=E8=AE=A1=E6=97=B6=E5=BC=82=E5=B8=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json   |   2 +-
 pnpm-lock.yaml | 440 +++++++++++++++++++++++++------------------------
 2 files changed, 228 insertions(+), 214 deletions(-)

diff --git a/package.json b/package.json
index 41d285bc..a9af7246 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
     "html2canvas": "^1.4.1",
     "keymaster": "^1.6.2",
     "monaco-editor": "^0.33.0",
-    "naive-ui": "2.30.3",
+    "naive-ui": "2.33.3",
     "pinia": "^2.0.13",
     "screenfull": "^6.0.1",
     "vue": "^3.2.31",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e0eb5f28..07381313 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -38,7 +38,7 @@ specifiers:
   lodash: ~4.17.21
   mockjs: ^1.1.0
   monaco-editor: ^0.33.0
-  naive-ui: 2.30.3
+  naive-ui: 2.33.3
   pinia: ^2.0.13
   plop: ^3.0.5
   prettier: ^2.6.2
@@ -77,7 +77,7 @@ dependencies:
   html2canvas: 1.4.1
   keymaster: 1.6.2
   monaco-editor: 0.33.0
-  naive-ui: 2.30.3_vue@3.2.37
+  naive-ui: registry.npmmirror.com/naive-ui/2.33.3_vue@3.2.37
   pinia: 2.0.14_ub5l46u3nefphax5x2tezui4oq
   screenfull: 6.0.1
   vue: 3.2.37
@@ -458,7 +458,7 @@ packages:
     engines: {node: '>=v14'}
     dependencies:
       '@commitlint/types': 17.0.0
-      lodash: 4.17.21
+      lodash: registry.npmmirror.com/lodash/4.17.21
     dev: true
 
   /@commitlint/execute-rule/17.0.0:
@@ -500,11 +500,11 @@ packages:
       '@commitlint/execute-rule': 17.0.0
       '@commitlint/resolve-extends': 17.0.0
       '@commitlint/types': 17.0.0
-      '@types/node': 17.0.43
+      '@types/node': registry.npmmirror.com/@types/node/17.0.43
       chalk: 4.1.2
       cosmiconfig: 7.0.1
       cosmiconfig-typescript-loader: 2.0.1_sg2ukyc6p547g74ru6fclbyzsu
-      lodash: 4.17.21
+      lodash: registry.npmmirror.com/lodash/4.17.21
       resolve-from: 5.0.0
       typescript: 4.7.3
     transitivePeerDependencies:
@@ -543,7 +543,7 @@ packages:
       '@commitlint/config-validator': 17.0.0
       '@commitlint/types': 17.0.0
       import-fresh: 3.3.0
-      lodash: 4.17.21
+      lodash: registry.npmmirror.com/lodash/4.17.21
       resolve-from: 5.0.0
       resolve-global: 1.0.0
     dev: true
@@ -585,22 +585,6 @@ packages:
       '@jridgewell/trace-mapping': 0.3.9
     dev: true
 
-  /@css-render/plugin-bem/0.15.10_css-render@0.15.10:
-    resolution: {integrity: sha512-V7b08sM2PWJlXI7BJiVIa0Sg30H3u/jHay4AclNXfF2yRFwwb4ZJjggsMfzwj3WSihAdNf2WTqvOU5qsOD80Dg==}
-    peerDependencies:
-      css-render: ~0.15.10
-    dependencies:
-      css-render: 0.15.10
-    dev: false
-
-  /@css-render/vue3-ssr/0.15.10_vue@3.2.37:
-    resolution: {integrity: sha512-keGKnkB2nyVGoA8GezMKNsmvTGXEzgLOGGlgshwOTSEzd1dsROyZ2m/khJ9jV5zbzDM4rWeAWbWF0zwHemsJcw==}
-    peerDependencies:
-      vue: ^3.0.11
-    dependencies:
-      vue: 3.2.37
-    dev: false
-
   /@emmetio/abbreviation/2.2.3:
     resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==}
     dependencies:
@@ -617,10 +601,6 @@ packages:
     resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==}
     dev: true
 
-  /@emotion/hash/0.8.0:
-    resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
-    dev: false
-
   /@eslint/eslintrc/1.3.0:
     resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -754,10 +734,6 @@ packages:
       '@jridgewell/sourcemap-codec': 1.4.13
     dev: true
 
-  /@juggle/resize-observer/3.3.1:
-    resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==}
-    dev: false
-
   /@nodelib/fs.scandir/2.1.5:
     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
     engines: {node: '>= 8'}
@@ -863,13 +839,6 @@ packages:
       rxjs: 7.5.5
     dev: true
 
-  /@types/jest/27.5.2:
-    resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==}
-    dependencies:
-      jest-matcher-utils: 27.5.1
-      pretty-format: 27.5.1
-    dev: false
-
   /@types/json-schema/7.0.11:
     resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
     dev: true
@@ -886,15 +855,9 @@ packages:
     resolution: {integrity: sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==}
     dependencies:
       '@types/fined': 1.1.3
-      '@types/node': 16.11.40
+      '@types/node': registry.npmmirror.com/@types/node/17.0.43
     dev: true
 
-  /@types/lodash-es/4.17.6:
-    resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==}
-    dependencies:
-      '@types/lodash': 4.14.185
-    dev: false
-
   /@types/lodash/4.14.185:
     resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==}
     dev: false
@@ -911,9 +874,6 @@ packages:
     resolution: {integrity: sha512-7bOWglXUO6f21NG3YDI7hIpeMX3M59GG+DzZuzX2EkFKYUnRoxq3EOg4R0KNv2hxryY9M3UUqG5akwwsifrukw==}
     dev: true
 
-  /@types/node/17.0.43:
-    resolution: {integrity: sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==}
-
   /@types/normalize-package-data/2.4.1:
     resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
     dev: true
@@ -925,13 +885,13 @@ packages:
   /@types/resolve/1.17.1:
     resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
     dependencies:
-      '@types/node': 17.0.43
+      '@types/node': registry.npmmirror.com/@types/node/17.0.43
     dev: true
 
   /@types/through/0.0.30:
     resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
     dependencies:
-      '@types/node': 17.0.43
+      '@types/node': registry.npmmirror.com/@types/node/17.0.43
     dev: true
 
   /@typescript-eslint/eslint-plugin/5.28.0_evi7yu7wunhzwb24olrfvzynny:
@@ -1223,7 +1183,7 @@ packages:
     dependencies:
       '@vue/runtime-core': 3.2.37
       '@vue/shared': 3.2.37
-      csstype: 2.6.20
+      csstype: registry.npmmirror.com/csstype/2.6.20
 
   /@vue/server-renderer/3.2.37_vue@3.2.37:
     resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==}
@@ -1332,6 +1292,7 @@ packages:
   /ansi-regex/5.0.1:
     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
     engines: {node: '>=8'}
+    dev: true
 
   /ansi-regex/6.0.1:
     resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
@@ -1350,11 +1311,7 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       color-convert: 2.0.1
-
-  /ansi-styles/5.2.0:
-    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
-    engines: {node: '>=10'}
-    dev: false
+    dev: true
 
   /anymatch/3.1.2:
     resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
@@ -1425,10 +1382,6 @@ packages:
     resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
     dev: true
 
-  /async-validator/4.1.1:
-    resolution: {integrity: sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==}
-    dev: false
-
   /asynckit/0.4.0:
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
     dev: false
@@ -1603,6 +1556,7 @@ packages:
     dependencies:
       ansi-styles: 4.3.0
       supports-color: 7.2.0
+    dev: true
 
   /chalk/5.0.1:
     resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
@@ -1802,7 +1756,7 @@ packages:
     engines: {node: '>=10'}
     dependencies:
       compare-func: 2.0.0
-      lodash: 4.17.21
+      lodash: registry.npmmirror.com/lodash/4.17.21
       q: 1.5.1
     dev: true
 
@@ -1813,7 +1767,7 @@ packages:
     dependencies:
       JSONStream: 1.3.5
       is-text-path: 1.0.1
-      lodash: 4.17.21
+      lodash: registry.npmmirror.com/lodash/4.17.21
       meow: 8.1.2
       split2: 3.2.2
       through2: 4.0.2
@@ -1832,7 +1786,7 @@ packages:
       '@types/node': '*'
       typescript: '>=3'
     dependencies:
-      '@types/node': 17.0.43
+      '@types/node': registry.npmmirror.com/@types/node/17.0.43
       cosmiconfig: 7.0.1
       ts-node: 10.8.1_sg2ukyc6p547g74ru6fclbyzsu
       typescript: 4.7.3
@@ -1875,45 +1829,17 @@ packages:
       utrie: 1.0.2
     dev: false
 
-  /css-render/0.15.10:
-    resolution: {integrity: sha512-6j5acvm81sXTHJiF47FNNICtDpF74YoWk1xEK3qQvdqgW6vc+OXrPqflL6m8f5GE6XuFYrbACNEd17kraCSBAQ==}
-    dependencies:
-      '@emotion/hash': 0.8.0
-      '@types/node': 17.0.43
-      csstype: 3.0.11
-    dev: false
-
   /cssesc/3.0.0:
     resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
     engines: {node: '>=4'}
     hasBin: true
     dev: true
 
-  /csstype/2.6.20:
-    resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==}
-
-  /csstype/3.0.11:
-    resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
-    dev: false
-
   /dargs/7.0.0:
     resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
     engines: {node: '>=8'}
     dev: true
 
-  /date-fns-tz/1.3.4_date-fns@2.28.0:
-    resolution: {integrity: sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==}
-    peerDependencies:
-      date-fns: '>=2.0.0'
-    dependencies:
-      date-fns: 2.28.0
-    dev: false
-
-  /date-fns/2.28.0:
-    resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==}
-    engines: {node: '>=0.11'}
-    dev: false
-
   /debug/2.6.9:
     resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
     peerDependencies:
@@ -2012,11 +1938,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /diff-sequences/27.5.1:
-    resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==}
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dev: false
-
   /diff/4.0.2:
     resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
     engines: {node: '>=0.3.1'}
@@ -2476,10 +2397,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /evtd/0.2.3:
-    resolution: {integrity: sha512-tmiT1YUVqFjTY+BSBOAskL83xNx41iUfpvKP6Gcd/xMHjg3mnER98jXGXJyKnxCG19uPc6EhZiUC+MUyvoqCtw==}
-    dev: false
-
   /execa/5.1.1:
     resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
     engines: {node: '>=10'}
@@ -2748,7 +2665,7 @@ packages:
     hasBin: true
     dependencies:
       dargs: 7.0.0
-      lodash: 4.17.21
+      lodash: registry.npmmirror.com/lodash/4.17.21
       meow: 8.1.2
       split2: 3.2.2
       through2: 4.0.2
@@ -2875,6 +2792,7 @@ packages:
   /has-flag/4.0.0:
     resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
     engines: {node: '>=8'}
+    dev: true
 
   /has-property-descriptors/1.0.0:
     resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
@@ -3031,7 +2949,7 @@ packages:
       cli-width: 3.0.0
       external-editor: 3.1.0
       figures: 3.2.0
-      lodash: 4.17.21
+      lodash: registry.npmmirror.com/lodash/4.17.21
       mute-stream: 0.0.8
       ora: 5.4.1
       run-async: 2.4.1
@@ -3291,31 +3209,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /jest-diff/27.5.1:
-    resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==}
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      chalk: 4.1.2
-      diff-sequences: 27.5.1
-      jest-get-type: 27.5.1
-      pretty-format: 27.5.1
-    dev: false
-
-  /jest-get-type/27.5.1:
-    resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==}
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dev: false
-
-  /jest-matcher-utils/27.5.1:
-    resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==}
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      chalk: 4.1.2
-      jest-diff: 27.5.1
-      jest-get-type: 27.5.1
-      pretty-format: 27.5.1
-    dev: false
-
   /js-stringify/1.0.2:
     resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==}
     dev: true
@@ -3452,10 +3345,6 @@ packages:
       p-locate: 5.0.0
     dev: true
 
-  /lodash-es/4.17.21:
-    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
-    dev: false
-
   /lodash.get/4.4.2:
     resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
     dev: true
@@ -3466,6 +3355,7 @@ packages:
 
   /lodash/4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+    dev: true
 
   /log-symbols/4.1.0:
     resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
@@ -3634,31 +3524,6 @@ packages:
     resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
     dev: true
 
-  /naive-ui/2.30.3_vue@3.2.37:
-    resolution: {integrity: sha512-s6iphodOfLklhgAGtzhzoE0oPi6eY72UufUDRySBbfV+r+64vw9omYUOqk3Z1M/t/Mh8KwqW6z+ex8bYftFKPA==}
-    peerDependencies:
-      vue: ^3.0.0
-    dependencies:
-      '@css-render/plugin-bem': 0.15.10_css-render@0.15.10
-      '@css-render/vue3-ssr': 0.15.10_vue@3.2.37
-      '@types/lodash': 4.14.185
-      '@types/lodash-es': 4.17.6
-      async-validator: 4.1.1
-      css-render: 0.15.10
-      date-fns: 2.28.0
-      date-fns-tz: 1.3.4_date-fns@2.28.0
-      evtd: 0.2.3
-      highlight.js: 11.5.1
-      lodash: 4.17.21
-      lodash-es: 4.17.21
-      seemly: 0.3.4
-      treemate: 0.3.11
-      vdirs: 0.1.8_vue@3.2.37
-      vooks: 0.2.12_vue@3.2.37
-      vue: 3.2.37
-      vueuc: 0.4.44_vue@3.2.37
-    dev: false
-
   /nanoid/3.3.4:
     resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -4100,15 +3965,6 @@ packages:
     hasBin: true
     dev: true
 
-  /pretty-format/27.5.1:
-    resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      ansi-regex: 5.0.1
-      ansi-styles: 5.2.0
-      react-is: 17.0.2
-    dev: false
-
   /promise/7.3.1:
     resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
     dependencies:
@@ -4225,10 +4081,6 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
-  /react-is/17.0.2:
-    resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
-    dev: false
-
   /read-pkg-up/7.0.1:
     resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
     engines: {node: '>=8'}
@@ -4444,12 +4296,6 @@ packages:
     engines: {node: ^14.13.1 || >=16.0.0}
     dev: false
 
-  /seemly/0.3.4:
-    resolution: {integrity: sha512-/crL+UfbtYd6NdLdnf58xaABfeSRt5uKE4N1SFQAW7nIznOrJQchAaslJHxV8/iAfV0LWInrmxJBFdDb0c2/sw==}
-    dependencies:
-      '@types/jest': 27.5.2
-    dev: false
-
   /semver/5.7.1:
     resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
     hasBin: true
@@ -4650,6 +4496,7 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       has-flag: 4.0.0
+    dev: true
 
   /supports-preserve-symlinks-flag/1.0.0:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
@@ -4713,10 +4560,6 @@ packages:
     resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
     dev: true
 
-  /treemate/0.3.11:
-    resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
-    dev: false
-
   /trim-newlines/3.0.1:
     resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
     engines: {node: '>=8'}
@@ -4741,7 +4584,7 @@ packages:
       '@tsconfig/node12': 1.0.10
       '@tsconfig/node14': 1.0.2
       '@tsconfig/node16': 1.0.3
-      '@types/node': 17.0.43
+      '@types/node': registry.npmmirror.com/@types/node/17.0.43
       acorn: 8.7.1
       acorn-walk: 8.2.0
       arg: 4.1.3
@@ -4908,15 +4751,6 @@ packages:
       spdx-expression-parse: 3.0.1
     dev: true
 
-  /vdirs/0.1.8_vue@3.2.37:
-    resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
-    peerDependencies:
-      vue: ^3.0.11
-    dependencies:
-      evtd: 0.2.3
-      vue: 3.2.37
-    dev: false
-
   /vite-plugin-compression/0.5.1_vite@2.9.9:
     resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
     peerDependencies:
@@ -5001,15 +4835,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /vooks/0.2.12_vue@3.2.37:
-    resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
-    peerDependencies:
-      vue: ^3.0.0
-    dependencies:
-      evtd: 0.2.3
-      vue: 3.2.37
-    dev: false
-
   /vscode-css-languageservice/5.4.2:
     resolution: {integrity: sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==}
     dependencies:
@@ -5183,7 +5008,7 @@ packages:
       eslint-visitor-keys: 3.3.0
       espree: 9.3.2
       esquery: 1.4.0
-      lodash: 4.17.21
+      lodash: registry.npmmirror.com/lodash/4.17.21
       semver: 7.3.7
     transitivePeerDependencies:
       - supports-color
@@ -5266,21 +5091,6 @@ packages:
       vue: 3.2.37
     dev: false
 
-  /vueuc/0.4.44_vue@3.2.37:
-    resolution: {integrity: sha512-2sLWo1Ow3DRKTDvGVlaWlf0KL+LOqeO6zlvb6nUxWxqj4VjUpg7sMtH+xtvBK+oOXH4goGt1RyLMaBVgPFpqHw==}
-    peerDependencies:
-      vue: ^3.0.11
-    dependencies:
-      '@css-render/vue3-ssr': 0.15.10_vue@3.2.37
-      '@juggle/resize-observer': 3.3.1
-      css-render: 0.15.10
-      evtd: 0.2.3
-      seemly: 0.3.4
-      vdirs: 0.1.8_vue@3.2.37
-      vooks: 0.2.12_vue@3.2.37
-      vue: 3.2.37
-    dev: false
-
   /wcwidth/1.0.1:
     resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
     dependencies:
@@ -5396,6 +5206,104 @@ packages:
     dependencies:
       tslib: 2.3.0
 
+  registry.npmmirror.com/@css-render/plugin-bem/0.15.10_css-render@0.15.10:
+    resolution: {integrity: sha512-V7b08sM2PWJlXI7BJiVIa0Sg30H3u/jHay4AclNXfF2yRFwwb4ZJjggsMfzwj3WSihAdNf2WTqvOU5qsOD80Dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@css-render/plugin-bem/-/plugin-bem-0.15.10.tgz}
+    id: registry.npmmirror.com/@css-render/plugin-bem/0.15.10
+    name: '@css-render/plugin-bem'
+    version: 0.15.10
+    peerDependencies:
+      css-render: ~0.15.10
+    dependencies:
+      css-render: registry.npmmirror.com/css-render/0.15.10
+    dev: false
+
+  registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37:
+    resolution: {integrity: sha512-keGKnkB2nyVGoA8GezMKNsmvTGXEzgLOGGlgshwOTSEzd1dsROyZ2m/khJ9jV5zbzDM4rWeAWbWF0zwHemsJcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.10.tgz}
+    id: registry.npmmirror.com/@css-render/vue3-ssr/0.15.10
+    name: '@css-render/vue3-ssr'
+    version: 0.15.10
+    peerDependencies:
+      vue: ^3.0.11
+    dependencies:
+      vue: 3.2.37
+    dev: false
+
+  registry.npmmirror.com/@emotion/hash/0.8.0:
+    resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz}
+    name: '@emotion/hash'
+    version: 0.8.0
+    dev: false
+
+  registry.npmmirror.com/@juggle/resize-observer/3.3.1:
+    resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.3.1.tgz}
+    name: '@juggle/resize-observer'
+    version: 3.3.1
+    dev: false
+
+  registry.npmmirror.com/@types/lodash-es/4.17.6:
+    resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz}
+    name: '@types/lodash-es'
+    version: 4.17.6
+    dependencies:
+      '@types/lodash': registry.npmmirror.com/@types/lodash/4.14.185
+    dev: false
+
+  registry.npmmirror.com/@types/lodash/4.14.185:
+    resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.185.tgz}
+    name: '@types/lodash'
+    version: 4.14.185
+    dev: false
+
+  registry.npmmirror.com/@types/node/17.0.43:
+    resolution: {integrity: sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-17.0.43.tgz}
+    name: '@types/node'
+    version: 17.0.43
+
+  registry.npmmirror.com/async-validator/4.1.1:
+    resolution: {integrity: sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.1.1.tgz}
+    name: async-validator
+    version: 4.1.1
+    dev: false
+
+  registry.npmmirror.com/css-render/0.15.10:
+    resolution: {integrity: sha512-6j5acvm81sXTHJiF47FNNICtDpF74YoWk1xEK3qQvdqgW6vc+OXrPqflL6m8f5GE6XuFYrbACNEd17kraCSBAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-render/-/css-render-0.15.10.tgz}
+    name: css-render
+    version: 0.15.10
+    dependencies:
+      '@emotion/hash': registry.npmmirror.com/@emotion/hash/0.8.0
+      '@types/node': registry.npmmirror.com/@types/node/17.0.43
+      csstype: registry.npmmirror.com/csstype/3.0.11
+    dev: false
+
+  registry.npmmirror.com/csstype/2.6.20:
+    resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz}
+    name: csstype
+    version: 2.6.20
+
+  registry.npmmirror.com/csstype/3.0.11:
+    resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.0.11.tgz}
+    name: csstype
+    version: 3.0.11
+    dev: false
+
+  registry.npmmirror.com/date-fns-tz/1.3.4_date-fns@2.28.0:
+    resolution: {integrity: sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/date-fns-tz/-/date-fns-tz-1.3.4.tgz}
+    id: registry.npmmirror.com/date-fns-tz/1.3.4
+    name: date-fns-tz
+    version: 1.3.4
+    peerDependencies:
+      date-fns: '>=2.0.0'
+    dependencies:
+      date-fns: registry.npmmirror.com/date-fns/2.28.0
+    dev: false
+
+  registry.npmmirror.com/date-fns/2.28.0:
+    resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/date-fns/-/date-fns-2.28.0.tgz}
+    name: date-fns
+    version: 2.28.0
+    engines: {node: '>=0.11'}
+    dev: false
+
   registry.npmmirror.com/echarts-wordcloud/2.0.0_echarts@5.3.3:
     resolution: {integrity: sha512-K7l6pTklqdW7ZWzT/1CS0KhBSINr/cd7c5N1fVMzZMwLQHEwT7x+nivK7g5hkVh7WNcAv4Dn6/ZS5zMKRozC1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts-wordcloud/-/echarts-wordcloud-2.0.0.tgz}
     id: registry.npmmirror.com/echarts-wordcloud/2.0.0
@@ -5627,6 +5535,12 @@ packages:
     dev: true
     optional: true
 
+  registry.npmmirror.com/evtd/0.2.4:
+    resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz}
+    name: evtd
+    version: 0.2.4
+    dev: false
+
   registry.npmmirror.com/fsevents/2.3.2:
     resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
     name: fsevents
@@ -5645,6 +5559,64 @@ packages:
     dev: true
     optional: true
 
+  registry.npmmirror.com/highlight.js/11.5.1:
+    resolution: {integrity: sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/highlight.js/-/highlight.js-11.5.1.tgz}
+    name: highlight.js
+    version: 11.5.1
+    engines: {node: '>=12.0.0'}
+    dev: false
+
+  registry.npmmirror.com/lodash-es/4.17.21:
+    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz}
+    name: lodash-es
+    version: 4.17.21
+    dev: false
+
+  registry.npmmirror.com/lodash/4.17.21:
+    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz}
+    name: lodash
+    version: 4.17.21
+
+  registry.npmmirror.com/naive-ui/2.33.3_vue@3.2.37:
+    resolution: {integrity: sha512-yz2aKdghMVadtvCSBXyjU2bAuGmwLEUcbzmXdUhSdtcbI6mT+mT8vRy43FnbJangPQ87v080q453vtnydNcnhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/naive-ui/-/naive-ui-2.33.3.tgz}
+    id: registry.npmmirror.com/naive-ui/2.33.3
+    name: naive-ui
+    version: 2.33.3
+    peerDependencies:
+      vue: ^3.0.0
+    dependencies:
+      '@css-render/plugin-bem': registry.npmmirror.com/@css-render/plugin-bem/0.15.10_css-render@0.15.10
+      '@css-render/vue3-ssr': registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37
+      '@types/lodash': registry.npmmirror.com/@types/lodash/4.14.185
+      '@types/lodash-es': registry.npmmirror.com/@types/lodash-es/4.17.6
+      async-validator: registry.npmmirror.com/async-validator/4.1.1
+      css-render: registry.npmmirror.com/css-render/0.15.10
+      date-fns: registry.npmmirror.com/date-fns/2.28.0
+      date-fns-tz: registry.npmmirror.com/date-fns-tz/1.3.4_date-fns@2.28.0
+      evtd: registry.npmmirror.com/evtd/0.2.4
+      highlight.js: registry.npmmirror.com/highlight.js/11.5.1
+      lodash: registry.npmmirror.com/lodash/4.17.21
+      lodash-es: registry.npmmirror.com/lodash-es/4.17.21
+      seemly: registry.npmmirror.com/seemly/0.3.6
+      treemate: registry.npmmirror.com/treemate/0.3.11
+      vdirs: registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37
+      vooks: registry.npmmirror.com/vooks/0.2.12_vue@3.2.37
+      vue: 3.2.37
+      vueuc: registry.npmmirror.com/vueuc/0.4.49_vue@3.2.37
+    dev: false
+
+  registry.npmmirror.com/seemly/0.3.6:
+    resolution: {integrity: sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/seemly/-/seemly-0.3.6.tgz}
+    name: seemly
+    version: 0.3.6
+    dev: false
+
+  registry.npmmirror.com/treemate/0.3.11:
+    resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/treemate/-/treemate-0.3.11.tgz}
+    name: treemate
+    version: 0.3.11
+    dev: false
+
   registry.npmmirror.com/uglify-js/3.16.0:
     resolution: {integrity: sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.16.0.tgz}
     name: uglify-js
@@ -5654,3 +5626,45 @@ packages:
     requiresBuild: true
     dev: true
     optional: true
+
+  registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37:
+    resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz}
+    id: registry.npmmirror.com/vdirs/0.1.8
+    name: vdirs
+    version: 0.1.8
+    peerDependencies:
+      vue: ^3.0.11
+    dependencies:
+      evtd: registry.npmmirror.com/evtd/0.2.4
+      vue: 3.2.37
+    dev: false
+
+  registry.npmmirror.com/vooks/0.2.12_vue@3.2.37:
+    resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz}
+    id: registry.npmmirror.com/vooks/0.2.12
+    name: vooks
+    version: 0.2.12
+    peerDependencies:
+      vue: ^3.0.0
+    dependencies:
+      evtd: registry.npmmirror.com/evtd/0.2.4
+      vue: 3.2.37
+    dev: false
+
+  registry.npmmirror.com/vueuc/0.4.49_vue@3.2.37:
+    resolution: {integrity: sha512-WarAC44a/Yx78CxkAgROYLq+LkAeCGA/6wHidVoFmHLbzyF3SiP2nzRNGD/8zJeJInXv18EnWK6A//eGgMMq8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vueuc/-/vueuc-0.4.49.tgz}
+    id: registry.npmmirror.com/vueuc/0.4.49
+    name: vueuc
+    version: 0.4.49
+    peerDependencies:
+      vue: ^3.0.11
+    dependencies:
+      '@css-render/vue3-ssr': registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37
+      '@juggle/resize-observer': registry.npmmirror.com/@juggle/resize-observer/3.3.1
+      css-render: registry.npmmirror.com/css-render/0.15.10
+      evtd: registry.npmmirror.com/evtd/0.2.4
+      seemly: registry.npmmirror.com/seemly/0.3.6
+      vdirs: registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37
+      vooks: registry.npmmirror.com/vooks/0.2.12_vue@3.2.37
+      vue: 3.2.37
+    dev: false

From 7cf39a0e5840a2901709669c56b0a6196413f09b Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Sat, 1 Oct 2022 22:50:17 +0800
Subject: [PATCH 41/56] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E5=A4=9A?=
 =?UTF-8?q?=E4=BD=99=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/packages/components/Decorates/Mores/FlipperNumber/index.vue | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/packages/components/Decorates/Mores/FlipperNumber/index.vue b/src/packages/components/Decorates/Mores/FlipperNumber/index.vue
index d831c4ed..c9e8d666 100644
--- a/src/packages/components/Decorates/Mores/FlipperNumber/index.vue
+++ b/src/packages/components/Decorates/Mores/FlipperNumber/index.vue
@@ -1,5 +1,4 @@
 <template>
-  <!-- <n-countdown :duration="50000" :active="true" /> -->
   <n-space class="go-decorates-flipper-number" :size="flipperGap" align="center" justify="center">
     <flipper
       :count="item"

From f97112f1172ddedd51ead8eb36de97a64c01e351 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sun, 2 Oct 2022 20:28:21 +0800
Subject: [PATCH 42/56] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=E5=9B=BE?=
 =?UTF-8?q?=E5=B1=82=E7=B1=BB=E5=9E=8B=E5=9B=BE=E6=A0=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/chart/ContentLayers/index.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/views/chart/ContentLayers/index.vue b/src/views/chart/ContentLayers/index.vue
index d1a89269..ec1c4820 100644
--- a/src/views/chart/ContentLayers/index.vue
+++ b/src/views/chart/ContentLayers/index.vue
@@ -80,13 +80,13 @@ import { LayersGroupListItem } from './components/LayersGroupListItem/index'
 
 import { icon } from '@/plugins'
 
-const { LayersIcon, ImageIcon, ImagesIcon, ListIcon } = icon.ionicons5
+const { LayersIcon, GridIcon, ListIcon } = icon.ionicons5
 const chartLayoutStore = useChartLayoutStore()
 const chartEditStore = useChartEditStore()
 const { handleContextMenu, onClickOutSide } = useContextMenu()
 
 const layerModeList = [
-  { label: '缩略图', icon: ImagesIcon, value: LayerModeEnum.THUMBNAIL },
+  { label: '缩略图', icon: GridIcon, value: LayerModeEnum.THUMBNAIL },
   { label: '文本列表', icon: ListIcon, value: LayerModeEnum.TEXT }
 ]
 

From 2c0658ce5051188250a929aa05ced759665111f0 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Sun, 2 Oct 2022 23:06:23 +0800
Subject: [PATCH 43/56] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=80=92?=
 =?UTF-8?q?=E8=AE=A1=E6=97=B6=E7=BB=84=E4=BB=B6=20Extraneous=20non-props?=
 =?UTF-8?q?=20attributes=20=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Decorates/Mores/CountDown/index.vue       | 116 +++++++++---------
 1 file changed, 59 insertions(+), 57 deletions(-)

diff --git a/src/packages/components/Decorates/Mores/CountDown/index.vue b/src/packages/components/Decorates/Mores/CountDown/index.vue
index 8dde8706..263d6187 100644
--- a/src/packages/components/Decorates/Mores/CountDown/index.vue
+++ b/src/packages/components/Decorates/Mores/CountDown/index.vue
@@ -1,13 +1,30 @@
 <template>
-  <n-countdown
-    ref="countdownRef"
-    :duration="totalDuration"
-    :render="renderCountdown"
-    :active="countdownActive"
-    v-show="false"
-  />
-  <n-space class="go-decorates-more-countdown" :size="flipperGap" align="center" justify="center">
-    <template v-if="showDay">
+  <div>
+    <n-countdown
+      ref="countdownRef"
+      :duration="totalDuration"
+      :render="renderCountdown"
+      :active="countdownActive"
+      v-show="false"
+    />
+    <n-space class="go-decorates-more-countdown" :size="flipperGap" align="center" justify="center">
+      <template v-if="showDay">
+        <flipper
+          :count="item"
+          :width="flipperWidth"
+          :height="flipperHeight"
+          :front-color="flipperTextColor"
+          :back-color="flipperBgColor"
+          :radius="flipperRadius"
+          :flip-type="flipperType"
+          :duration="flipperSpeed"
+          v-for="(item, index) in daysFlipperData"
+          :key="index"
+          class="go-d-block"
+        />
+        <div v-if="style === '时分秒'">天</div>
+        <div v-else>:</div>
+      </template>
       <flipper
         :count="item"
         :width="flipperWidth"
@@ -17,58 +34,43 @@
         :radius="flipperRadius"
         :flip-type="flipperType"
         :duration="flipperSpeed"
-        v-for="(item, index) in daysFlipperData"
+        v-for="(item, index) in hoursFlipperData"
         :key="index"
         class="go-d-block"
       />
-      <div v-if="style === '时分秒'">天</div>
+      <div v-if="style === '时分秒'">时</div>
       <div v-else>:</div>
-    </template>
-    <flipper
-      :count="item"
-      :width="flipperWidth"
-      :height="flipperHeight"
-      :front-color="flipperTextColor"
-      :back-color="flipperBgColor"
-      :radius="flipperRadius"
-      :flip-type="flipperType"
-      :duration="flipperSpeed"
-      v-for="(item, index) in hoursFlipperData"
-      :key="index"
-      class="go-d-block"
-    />
-    <div v-if="style === '时分秒'">时</div>
-    <div v-else>:</div>
-    <flipper
-      :count="item"
-      :width="flipperWidth"
-      :height="flipperHeight"
-      :front-color="flipperTextColor"
-      :back-color="flipperBgColor"
-      :radius="flipperRadius"
-      :flip-type="flipperType"
-      :duration="flipperSpeed"
-      v-for="(item, index) in minutesFlipperData"
-      :key="index"
-      class="go-d-block"
-    />
-    <div v-if="style === '时分秒'">分</div>
-    <div v-else>:</div>
-    <flipper
-      :count="item"
-      :width="flipperWidth"
-      :height="flipperHeight"
-      :front-color="flipperTextColor"
-      :back-color="flipperBgColor"
-      :radius="flipperRadius"
-      :flip-type="flipperType"
-      :duration="flipperSpeed"
-      v-for="(item, index) in secondsFlipperData"
-      :key="index"
-      class="go-d-block"
-    />
-    <div v-if="style === '时分秒'">秒</div>
-  </n-space>
+      <flipper
+        :count="item"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :flip-type="flipperType"
+        :duration="flipperSpeed"
+        v-for="(item, index) in minutesFlipperData"
+        :key="index"
+        class="go-d-block"
+      />
+      <div v-if="style === '时分秒'">分</div>
+      <div v-else>:</div>
+      <flipper
+        :count="item"
+        :width="flipperWidth"
+        :height="flipperHeight"
+        :front-color="flipperTextColor"
+        :back-color="flipperBgColor"
+        :radius="flipperRadius"
+        :flip-type="flipperType"
+        :duration="flipperSpeed"
+        v-for="(item, index) in secondsFlipperData"
+        :key="index"
+        class="go-d-block"
+      />
+      <div v-if="style === '时分秒'">秒</div>
+    </n-space>
+  </div>
 </template>
 
 <script setup lang="ts">

From 2a9983047a5ae3dbd611f83b8826f4c7d75a822a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Wed, 5 Oct 2022 17:08:52 +0800
Subject: [PATCH 44/56] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E5=88=87?=
 =?UTF-8?q?=E6=8D=A2=E8=BD=AE=E6=92=AD=E8=A1=A8=E6=A0=BC=E9=85=8D=E7=BD=AE?=
 =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E5=8F=98=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Tables/Tables/TableScrollBoard/config.vue | 79 +++++++------------
 .../components/ChartSetting/index.vue         |  3 +-
 2 files changed, 30 insertions(+), 52 deletions(-)

diff --git a/src/packages/components/Tables/Tables/TableScrollBoard/config.vue b/src/packages/components/Tables/Tables/TableScrollBoard/config.vue
index 9dd1e12d..834cfb5b 100644
--- a/src/packages/components/Tables/Tables/TableScrollBoard/config.vue
+++ b/src/packages/components/Tables/Tables/TableScrollBoard/config.vue
@@ -28,57 +28,29 @@
       <SettingItem name="显示行号">
         <n-switch size="small" v-model:value="optionData.index" />
       </SettingItem>
-      
     </SettingItemBox>
 
     <SettingItemBox name="配置" :alone="true">
       <SettingItem name="表头数据">
-        <n-input
-          v-model:value="header"
-          :min="1"
-          size="small"
-          placeholder="表头数据(英文','分割)"
-        ></n-input>
+        <n-input v-model:value="header" :min="1" size="small" placeholder="表头数据(英文','分割)"></n-input>
       </SettingItem>
       <SettingItem name="列对齐方式">
-        <n-input
-          v-model:value="align"
-          :min="1"
-          size="small"
-          placeholder="对齐方式(英文','分割)"
-        ></n-input>
+        <n-input v-model:value="align" :min="1" size="small" placeholder="对齐方式(英文','分割)"></n-input>
       </SettingItem>
       <SettingItem name="列宽度">
-        <n-input
-          v-model:value="columnWidth"
-          :min="1"
-          size="small"
-          placeholder="列宽度(英文','分割)"
-        ></n-input>
+        <n-input v-model:value="columnWidth" :min="1" size="small" placeholder="列宽度(英文','分割)"></n-input>
       </SettingItem>
     </SettingItemBox>
 
     <SettingItemBox name="样式">
       <SettingItem name="表头背景色">
-        <n-color-picker
-          size="small"
-          :modes="['hex']"
-          v-model:value="optionData.headerBGC"
-        ></n-color-picker>
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.headerBGC"></n-color-picker>
       </SettingItem>
       <SettingItem name="奇数行背景色">
-        <n-color-picker
-          size="small"
-          :modes="['hex']"
-          v-model:value="optionData.oddRowBGC"
-        ></n-color-picker>
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.oddRowBGC"></n-color-picker>
       </SettingItem>
       <SettingItem name="偶数行背景色">
-        <n-color-picker
-          size="small"
-          :modes="['hex']"
-          v-model:value="optionData.evenRowBGC"
-        ></n-color-picker>
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.evenRowBGC"></n-color-picker>
       </SettingItem>
     </SettingItemBox>
   </CollapseItem>
@@ -86,36 +58,43 @@
 
 <script setup lang="ts">
 import { PropType, ref, watch } from 'vue'
-import {
-  CollapseItem,
-  SettingItemBox,
-  SettingItem,
-} from '@/components/Pages/ChartItemSetting'
+import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
 import { option } from './config'
 
 const props = defineProps({
   optionData: {
     type: Object as PropType<typeof option>,
-    required: true,
-  },
+    required: true
+  }
 })
 
-const header = ref(props.optionData.header.toString())
-const align = ref(props.optionData.align.toString())
-const columnWidth = ref(props.optionData.columnWidth.toString())
+const header = ref()
+const align = ref()
+const columnWidth = ref()
 
-watch([header, align, columnWidth],([headerNew,alignNew,columnWidthNew],[headerOld,alignOld,columnWidthOld])=>{
-  if(headerNew !== headerOld){
+watch(
+  () => props.optionData,
+  newData => {
+    header.value = props.optionData.header.toString()
+    align.value = props.optionData.align.toString()
+    columnWidth.value = props.optionData.columnWidth.toString()
+  },
+  {
+    deep: false,
+    immediate: true
+  }
+)
+
+watch([header, align, columnWidth], ([headerNew, alignNew, columnWidthNew], [headerOld, alignOld, columnWidthOld]) => {
+  if (headerNew !== headerOld) {
     props.optionData.header = headerNew.split(',')
   }
-  if(alignNew !== alignOld){
+  if (alignNew !== alignOld) {
     props.optionData.align = alignNew.split(',')
   }
-  if(columnWidthNew !== columnWidthOld){
+  if (columnWidthNew !== columnWidthOld) {
     // @ts-ignore
     props.optionData.columnWidth = columnWidthNew.split(',')
   }
 })
-
-
 </script>
diff --git a/src/views/chart/ContentConfigurations/components/ChartSetting/index.vue b/src/views/chart/ContentConfigurations/components/ChartSetting/index.vue
index 6718e34f..21c7d96a 100644
--- a/src/views/chart/ContentConfigurations/components/ChartSetting/index.vue
+++ b/src/views/chart/ContentConfigurations/components/ChartSetting/index.vue
@@ -5,7 +5,7 @@
     <!-- 尺寸 -->
     <size-setting :isGroup="targetData.isGroup" :chartAttr="targetData.attr"></size-setting>
     <!-- 位置 -->
-    <position-setting :chartAttr="targetData.attr" :canvasConfig="chartEditStore.getEditCanvasConfig"/>
+    <position-setting :chartAttr="targetData.attr" :canvasConfig="chartEditStore.getEditCanvasConfig" />
     <!-- 滤镜 -->
     <styles-setting :isGroup="targetData.isGroup" :chartStyles="targetData.styles"></styles-setting>
     <!-- 自定义配置项 -->
@@ -17,7 +17,6 @@
 import { NameSetting, PositionSetting, SizeSetting, StylesSetting } from '@/components/Pages/ChartItemSetting'
 import { useTargetData } from '../hooks/useTargetData.hook'
 const { targetData, chartEditStore } = useTargetData()
-
 </script>
 
 <style lang="scss" scoped>

From 6f93b1f599b7c81334a93cd218d6aa2b83466fb5 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Wed, 5 Oct 2022 21:56:43 +0800
Subject: [PATCH 45/56] =?UTF-8?q?feat:=20=E7=BB=84=E4=BB=B6=E5=85=AC?=
 =?UTF-8?q?=E5=85=B1=E5=B1=9E=E6=80=A7=E6=BB=A4=E9=95=9C=E4=B8=AD=E5=A2=9E?=
 =?UTF-8?q?=E6=B7=BB=E6=B7=B7=E5=90=88=E6=A8=A1=E5=BC=8F=E8=AE=BE=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Pages/ChartItemSetting/StylesSetting.vue  | 13 +++++--
 src/packages/index.d.ts                       | 35 +++++++++++++++----
 src/packages/public/publicConfig.ts           |  3 ++
 .../chartEditStore/chartEditStore.d.ts        |  1 +
 .../modules/chartEditStore/chartEditStore.ts  |  4 ++-
 src/utils/style.ts                            | 31 ++++++++++------
 src/views/chart/ContentEdit/index.vue         |  4 +--
 .../components/PreviewRenderGroup/index.vue   |  5 +--
 .../components/PreviewRenderList/index.vue    |  5 +--
 9 files changed, 75 insertions(+), 26 deletions(-)

diff --git a/src/components/Pages/ChartItemSetting/StylesSetting.vue b/src/components/Pages/ChartItemSetting/StylesSetting.vue
index 424efb70..184421c6 100644
--- a/src/components/Pages/ChartItemSetting/StylesSetting.vue
+++ b/src/components/Pages/ChartItemSetting/StylesSetting.vue
@@ -1,7 +1,7 @@
 <template>
   <div v-show="isGroup">
     <n-divider n-divider style="margin: 10px 0"></n-divider>
-    <n-tag type="warning"> 解散分组「  {{ isCanvas ? '滤镜' : '滤镜 / 变换' }} 」也将消失!</n-tag>
+    <n-tag type="warning"> 解散分组「 {{ isCanvas ? '滤镜' : '滤镜 / 变换' }} 」也将消失!</n-tag>
   </div>
 
   <collapse-item :name="isCanvas ? '滤镜' : '滤镜 / 变换'">
@@ -69,8 +69,15 @@
       </setting-item>
     </setting-item-box>
 
+    <!-- 混合模式 -->
+    <setting-item-box v-if="!isCanvas" name="混合模式" :alone="true">
+      <setting-item name="视频组件需要底色透明一般选中滤色">
+        <n-select size="small" v-model:value="chartStyles.blendMode" :options="BlendModeEnumList"></n-select>
+      </setting-item>
+    </setting-item-box>
+
     <!-- 变换 -->
-    <setting-item-box v-if="!isCanvas" name="旋转°">
+    <setting-item-box name="旋转°">
       <setting-item name="Z轴(平面) - 旋转">
         <!-- 透明度 -->
         <n-input-number
@@ -132,7 +139,7 @@
 
 <script setup lang="ts">
 import { PropType } from 'vue'
-import { PickCreateComponentType } from '@/packages/index.d'
+import { PickCreateComponentType, BlendModeEnumList } from '@/packages/index.d'
 import { SettingItemBox, SettingItem, CollapseItem } from '@/components/Pages/ChartItemSetting'
 
 const props = defineProps({
diff --git a/src/packages/index.d.ts b/src/packages/index.d.ts
index a565b12b..7b529588 100644
--- a/src/packages/index.d.ts
+++ b/src/packages/index.d.ts
@@ -38,8 +38,8 @@ interface EchartsDataType {
 
 // 组件状态
 export interface StatusType {
-  lock: boolean,
-  hide: boolean,
+  lock: boolean
+  hide: boolean
 }
 
 // 滤镜/变换枚举
@@ -65,14 +65,36 @@ export enum FilterEnum {
 
   // 倾斜
   SKEW_X = 'skewX',
-  SKEW_Y = 'skewY'
+  SKEW_Y = 'skewY',
+
+  // 混合模式
+  BLENDMODE = 'blendMode'
 }
 
+export const BlendModeEnumList = [
+  { label: '正常', value: 'normal' },
+  { label: '正片叠底', value: 'multiply' },
+  { label: '叠加', value: 'overlay' },
+  { label: '滤色', value: 'screen' },
+  { label: '变暗', value: 'darken' },
+  { label: '变亮', value: 'lighten' },
+  { label: '颜色减淡', value: 'color-dodge' },
+  { label: '颜色加深', value: 'color-burn;' },
+  { label: '强光', value: 'hard-light' },
+  { label: '柔光', value: 'soft-light' },
+  { label: '差值', value: 'difference' },
+  { label: '排除', value: 'exclusion' },
+  { label: '色相', value: 'hue' },
+  { label: '饱和度', value: 'saturation' },
+  { label: '颜色', value: 'color' },
+  { label: '亮度', value: 'luminosity' }
+]
+
 // 组件实例类
 export interface PublicConfigType {
   id: string
   isGroup: boolean
-  attr: { x: number; y: number; w: number; h: number; zIndex: number; offsetX: number; offsetY: number; }
+  attr: { x: number; y: number; w: number; h: number; zIndex: number; offsetX: number; offsetY: number }
   styles: {
     [FilterEnum.FILTERS_SHOW]: boolean
     [FilterEnum.OPACITY]: number
@@ -87,11 +109,12 @@ export interface PublicConfigType {
 
     [FilterEnum.SKEW_X]: number
     [FilterEnum.SKEW_Y]: number
+    [FilterEnum.BLENDMODE]: string
     // 动画
     animations: string[]
-  },
+  }
   filter?: string
-  status: StatusType,
+  status: StatusType
   setPosition: Function
 }
 
diff --git a/src/packages/public/publicConfig.ts b/src/packages/public/publicConfig.ts
index 2657c600..7bf4ae75 100644
--- a/src/packages/public/publicConfig.ts
+++ b/src/packages/public/publicConfig.ts
@@ -66,6 +66,9 @@ export class PublicConfigClass implements PublicConfigType {
     skewX: 0,
     skewY: 0,
 
+    // 混合模式
+    blendMode: 'normal',
+
     // 动画
     animations: []
   }
diff --git a/src/store/modules/chartEditStore/chartEditStore.d.ts b/src/store/modules/chartEditStore/chartEditStore.d.ts
index f4a438e2..98e13668 100644
--- a/src/store/modules/chartEditStore/chartEditStore.d.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.d.ts
@@ -77,6 +77,7 @@ export interface EditCanvasConfigType {
   [FilterEnum.ROTATE_Y]: number
   [FilterEnum.SKEW_X]: number
   [FilterEnum.SKEW_Y]: number
+  [FilterEnum.BLENDMODE]: string
   // 大屏宽度
   [EditCanvasConfigEnum.WIDTH]: number
   // 大屏高度
diff --git a/src/store/modules/chartEditStore/chartEditStore.ts b/src/store/modules/chartEditStore/chartEditStore.ts
index 5b37abfe..505c56f3 100644
--- a/src/store/modules/chartEditStore/chartEditStore.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.ts
@@ -97,6 +97,8 @@ export const useChartEditStore = defineStore({
       rotateY: 0,
       skewX: 0,
       skewY: 0,
+      // 混合模式
+      blendMode: 'normal',
       // 默认背景色
       background: undefined,
       backgroundImage: undefined,
@@ -878,7 +880,7 @@ export const useChartEditStore = defineStore({
           const targetItem = this.getComponentList[index]
           targetItem.status.hide = status
 
-          // 历史记录 
+          // 历史记录
           if (isHistory) {
             status
               ? chartHistoryStore.createHideHistory([targetItem])
diff --git a/src/utils/style.ts b/src/utils/style.ts
index be74ef00..8e8605d3 100644
--- a/src/utils/style.ts
+++ b/src/utils/style.ts
@@ -16,11 +16,11 @@ export const animationsClass = (animations: string[]) => {
 
 // * 滤镜
 export const getFilterStyle = (styles?: StylesType | EditCanvasConfigType) => {
-  if(!styles || !styles.filterShow) return {}
+  if (!styles || !styles.filterShow) return {}
   const { opacity, saturate, contrast, hueRotate, brightness } = styles
   return {
     opacity: opacity,
-    filter: `saturate(${saturate}) contrast(${contrast}) hue-rotate(${hueRotate}deg) brightness(${brightness})`,
+    filter: `saturate(${saturate}) contrast(${contrast}) hue-rotate(${hueRotate}deg) brightness(${brightness})`
   }
 }
 
@@ -28,17 +28,28 @@ export const getFilterStyle = (styles?: StylesType | EditCanvasConfigType) => {
 export const getTransformStyle = (styles: StylesType) => {
   const { rotateZ, rotateX, rotateY, skewX, skewY } = styles
   return {
-    transform: `rotateZ(${rotateZ || 0}deg) rotateX(${rotateX || 0}deg) rotateY(${rotateY || 0}deg) skewX(${skewX || 0}deg) skewY(${skewY || 0}deg)`,
+    transform: `rotateZ(${rotateZ || 0}deg) rotateX(${rotateX || 0}deg) rotateY(${rotateY || 0}deg) skewX(${
+      skewX || 0
+    }deg) skewY(${skewY || 0}deg)`
+  }
+}
+
+// * 混合模式
+export const getBlendModeStyle = (styles: StylesType) => {
+  if (!styles || !styles.filterShow) return {}
+  const { blendMode } = styles
+  return {
+    'mix-blend-mode': blendMode
   }
 }
 
 /**
- * * hsla 转换 
+ * * hsla 转换
  * @param color 颜色
  * @param alpha 默认1
- * @returns 
+ * @returns
  */
-export function alpha(color: string, alpha = 1 ) {
+export function alpha(color: string, alpha = 1) {
   return Color(color).alpha(alpha).toString()
 }
 
@@ -47,7 +58,7 @@ export function alpha(color: string, alpha = 1 ) {
  * rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 0.4)
  * @param color 颜色
  * @param concentration 0~1 浓度
- * @returns 
+ * @returns
  */
 export function fade(color: string, fade: number) {
   return Color(color).fade(fade).toString()
@@ -58,7 +69,7 @@ export function fade(color: string, fade: number) {
  * hsl(100, 50%, 10%) -> hsl(100, 50%, 50%)
  * @param color 颜色
  * @param concentration 0~1 浓度
- * @returns 
+ * @returns
  */
 export function lighten(color: string, concentration: number) {
   return Color(color).lighten(concentration).toString()
@@ -69,7 +80,7 @@ export function lighten(color: string, concentration: number) {
  * hsl(100, 50%, 50%) -> hsl(100, 50%, 25%)
  * @param color 颜色
  * @param concentration 0~1 浓度
- * @returns 
+ * @returns
  */
 export function darken(color: string, concentration: number) {
   return Color(color).darken(concentration).toString()
@@ -88,4 +99,4 @@ export const setHtmlTheme = (themeName?: string) => {
   }
   const designStore = useDesignStore()
   e.setAttribute('data-theme', designStore.themeName)
-}
\ No newline at end of file
+}
diff --git a/src/views/chart/ContentEdit/index.vue b/src/views/chart/ContentEdit/index.vue
index 02242ab5..51c449b5 100644
--- a/src/views/chart/ContentEdit/index.vue
+++ b/src/views/chart/ContentEdit/index.vue
@@ -37,7 +37,7 @@
               v-else
               :data-id="item.id"
               :index="index"
-              :style="useComponentStyle(item.attr, index)"
+              :style="{ ...useComponentStyle(item.attr, index), ...getBlendModeStyle(item.styles) }"
               :item="item"
               @click="mouseClickHandle($event, item)"
               @mousedown="mousedownHandle($event, item)"
@@ -81,7 +81,7 @@ import { onMounted, computed } from 'vue'
 import { chartColors } from '@/settings/chartThemes/index'
 import { MenuEnum } from '@/enums/editPageEnum'
 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
-import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
+import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils'
 import { useContextMenu } from '@/views/chart/hooks/useContextMenu.hook'
 import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
diff --git a/src/views/preview/components/PreviewRenderGroup/index.vue b/src/views/preview/components/PreviewRenderGroup/index.vue
index 62b9b22a..a866fb7a 100644
--- a/src/views/preview/components/PreviewRenderGroup/index.vue
+++ b/src/views/preview/components/PreviewRenderGroup/index.vue
@@ -8,8 +8,9 @@
       ...getComponentAttrStyle(item.attr, groupIndex),
       ...getFilterStyle(item.styles),
       ...getTransformStyle(item.styles),
+      ...getBlendModeStyle(item.styles),
       ...getStatusStyle(item.status)
-    }"
+    } as any"
   >
     <component
       :is="item.chartConfig.chartKey"
@@ -24,7 +25,7 @@
 <script setup lang="ts">
 import { PropType } from 'vue'
 import { CreateComponentGroupType } from '@/packages/index.d'
-import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
+import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils'
 import { getSizeStyle, getComponentAttrStyle, getStatusStyle } from '../../utils'
 
 const props = defineProps({
diff --git a/src/views/preview/components/PreviewRenderList/index.vue b/src/views/preview/components/PreviewRenderList/index.vue
index 00e359ff..af0850a5 100644
--- a/src/views/preview/components/PreviewRenderList/index.vue
+++ b/src/views/preview/components/PreviewRenderList/index.vue
@@ -8,8 +8,9 @@
       ...getComponentAttrStyle(item.attr, index),
       ...getFilterStyle(item.styles),
       ...getTransformStyle(item.styles),
+      ...getBlendModeStyle(item.styles),
       ...getStatusStyle(item.status)
-    }"
+    } as any"
   >
     <!-- 分组 -->
     <preview-render-group
@@ -38,7 +39,7 @@ import { ChartEditStorageType } from '../../index.d'
 import { PreviewRenderGroup } from '../PreviewRenderGroup/index'
 import { CreateComponentGroupType } from '@/packages/index.d'
 import { chartColors } from '@/settings/chartThemes/index'
-import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
+import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils'
 import { getSizeStyle, getComponentAttrStyle, getStatusStyle } from '../../utils'
 
 const props = defineProps({

From a7d433b62d6996b844391029b57f9c20194fc8f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Fri, 7 Oct 2022 18:56:31 +0800
Subject: [PATCH 46/56] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96Naive=E7=BC=96?=
 =?UTF-8?q?=E8=AF=91=E4=B9=8B=E5=90=8E=E9=A1=B5=E9=9D=A2=E4=B8=8D=E5=AF=B9?=
 =?UTF-8?q?=E7=9A=84bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/GoSystemSet/index.vue                       | 7 +++++--
 src/views/chart/ContentEdit/components/EditTools/index.vue | 3 ++-
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/components/GoSystemSet/index.vue b/src/components/GoSystemSet/index.vue
index 282fe84a..83df5a15 100644
--- a/src/components/GoSystemSet/index.vue
+++ b/src/components/GoSystemSet/index.vue
@@ -193,8 +193,11 @@ const handleChange = (e: MouseEvent, item: ListType) => {
     width: 110px;
   }
   @include deep() {
-    .n-list-item:not(:last-child) {
-      border-bottom: 0;
+    .n-list-item {
+      border-bottom: 0!important;
+    }
+    .n-list-item__divider {
+      display: none!important;
     }
   }
 }
diff --git a/src/views/chart/ContentEdit/components/EditTools/index.vue b/src/views/chart/ContentEdit/components/EditTools/index.vue
index a510d4e9..4c66016f 100644
--- a/src/views/chart/ContentEdit/components/EditTools/index.vue
+++ b/src/views/chart/ContentEdit/components/EditTools/index.vue
@@ -179,7 +179,8 @@ $asideBottom: 70px;
       }
       @include deep() {
         .n-button__icon {
-          margin-right: 4px;
+          margin-right: 0;
+          margin-left: 0;
           margin-bottom: 12px;
         }
       }

From 0138db1b4f372bfd48d2fa2b0b54ec192421d911 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 8 Oct 2022 09:17:42 +0800
Subject: [PATCH 47/56] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E8=B6=85?=
 =?UTF-8?q?=E6=97=B6=E6=97=B6=E9=97=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/enums/httpEnum.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/enums/httpEnum.ts b/src/enums/httpEnum.ts
index ffc98893..c51d7e29 100644
--- a/src/enums/httpEnum.ts
+++ b/src/enums/httpEnum.ts
@@ -7,7 +7,7 @@ export enum ResultEnum {
   SERVER_ERROR = 500,
   SERVER_FORBIDDEN = 403,
   NOT_FOUND = 404,
-  TIMEOUT = 10042
+  TIMEOUT = 60000
 }
 
 // 数据相关

From f0f8c86b0daff5b63269e7c04fe7e9e93a9ed4c0 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Sat, 8 Oct 2022 11:43:38 +0800
Subject: [PATCH 48/56] =?UTF-8?q?fix:=20=E6=9B=BF=E6=8D=A2=20BLEND=5FMODE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/packages/index.d.ts                              | 4 ++--
 src/store/modules/chartEditStore/chartEditStore.d.ts | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/packages/index.d.ts b/src/packages/index.d.ts
index 7b529588..1f95d50f 100644
--- a/src/packages/index.d.ts
+++ b/src/packages/index.d.ts
@@ -68,7 +68,7 @@ export enum FilterEnum {
   SKEW_Y = 'skewY',
 
   // 混合模式
-  BLENDMODE = 'blendMode'
+  BLEND_MODE = 'blendMode'
 }
 
 export const BlendModeEnumList = [
@@ -109,7 +109,7 @@ export interface PublicConfigType {
 
     [FilterEnum.SKEW_X]: number
     [FilterEnum.SKEW_Y]: number
-    [FilterEnum.BLENDMODE]: string
+    [FilterEnum.BLEND_MODE]: string
     // 动画
     animations: string[]
   }
diff --git a/src/store/modules/chartEditStore/chartEditStore.d.ts b/src/store/modules/chartEditStore/chartEditStore.d.ts
index 98e13668..4d0232cb 100644
--- a/src/store/modules/chartEditStore/chartEditStore.d.ts
+++ b/src/store/modules/chartEditStore/chartEditStore.d.ts
@@ -77,7 +77,7 @@ export interface EditCanvasConfigType {
   [FilterEnum.ROTATE_Y]: number
   [FilterEnum.SKEW_X]: number
   [FilterEnum.SKEW_Y]: number
-  [FilterEnum.BLENDMODE]: string
+  [FilterEnum.BLEND_MODE]: string
   // 大屏宽度
   [EditCanvasConfigEnum.WIDTH]: number
   // 大屏高度

From bd7d3fe23edaff629b149e4e65507483f40622fa Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Sat, 8 Oct 2022 11:44:56 +0800
Subject: [PATCH 49/56] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=9B=A0?=
 =?UTF-8?q?=E7=94=BB=E5=B8=83=E6=9C=AA=E9=BB=98=E8=AE=A4=E8=AE=BE=E7=BD=AE?=
 =?UTF-8?q?=E8=83=8C=E6=99=AF=E8=89=B2=E6=88=96=E8=83=8C=E6=99=AF=E5=9B=BE?=
 =?UTF-8?q?=E7=89=87=E5=AF=BC=E8=87=B4=E9=A2=84=E8=A7=88=E6=97=B6=E7=9A=84?=
 =?UTF-8?q?=E6=B7=B7=E5=90=88=E7=8A=B6=E6=80=81=E6=9C=AA=E7=94=9F=E6=95=88?=
 =?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/preview/utils/style.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/views/preview/utils/style.ts b/src/views/preview/utils/style.ts
index 6cd25cba..507c7a22 100644
--- a/src/views/preview/utils/style.ts
+++ b/src/views/preview/utils/style.ts
@@ -33,7 +33,7 @@ export const getStatusStyle = (attr: StatusType) => {
 export const getEditCanvasConfigStyle = (canvas: EditCanvasConfigType) => {
   // 背景
   const computedBackground = canvas.selectColor
-    ? { background: canvas.background }
+    ? { background: canvas.background || '#000000' }
     : {
         background: `url(${canvas.backgroundImage}) center center / cover no-repeat !important`
       }

From a20f5400278012cd8d7c8a8df7ed09f62546a5a4 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Sat, 8 Oct 2022 11:54:54 +0800
Subject: [PATCH 50/56] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=94=BB?=
 =?UTF-8?q?=E5=B8=83=E4=B8=8D=E4=BD=BF=E7=94=A8=E6=97=8B=E8=BD=AC=E5=B1=9E?=
 =?UTF-8?q?=E6=80=A7=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/Pages/ChartItemSetting/StylesSetting.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/Pages/ChartItemSetting/StylesSetting.vue b/src/components/Pages/ChartItemSetting/StylesSetting.vue
index 184421c6..661970cc 100644
--- a/src/components/Pages/ChartItemSetting/StylesSetting.vue
+++ b/src/components/Pages/ChartItemSetting/StylesSetting.vue
@@ -77,7 +77,7 @@
     </setting-item-box>
 
     <!-- 变换 -->
-    <setting-item-box name="旋转°">
+    <setting-item-box v-if="!isCanvas" name="旋转°">
       <setting-item name="Z轴(平面) - 旋转">
         <!-- 透明度 -->
         <n-input-number

From 4c2ca2b6355370b97882caad046b274c1acd9253 Mon Sep 17 00:00:00 2001
From: tnt group <dodu@live.cn>
Date: Sat, 8 Oct 2022 12:56:07 +0800
Subject: [PATCH 51/56] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=86?=
 =?UTF-8?q?=E7=BB=84=E6=9C=AA=E5=BA=94=E7=94=A8=E6=B7=B7=E5=90=88=E6=A8=A1?=
 =?UTF-8?q?=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/chart/ContentEdit/components/EditGroup/index.vue | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/views/chart/ContentEdit/components/EditGroup/index.vue b/src/views/chart/ContentEdit/components/EditGroup/index.vue
index 3a217c45..9276ec08 100644
--- a/src/views/chart/ContentEdit/components/EditGroup/index.vue
+++ b/src/views/chart/ContentEdit/components/EditGroup/index.vue
@@ -11,7 +11,8 @@
         ...useComponentStyle(groupData.attr, groupIndex),
         ...useSizeStyle(groupData.attr),
         ...getFilterStyle(groupData.styles),
-        ...getTransformStyle(groupData.styles)
+        ...getTransformStyle(groupData.styles),
+        ...getBlendModeStyle(groupData.styles)
       }"
       @click="mouseClickHandle($event, groupData)"
       @mousedown="mousedownHandle($event, groupData)"
@@ -55,7 +56,7 @@ import { MenuEnum } from '@/enums/editPageEnum'
 import { chartColors } from '@/settings/chartThemes/index'
 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
 import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
-import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
+import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook'
 import { useMouseHandle } from '../../hooks/useDrag.hook'

From 8bf3c3bb758244b9e35efb4f207f3a86a774913c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=98=89=E5=A8=81?= <daidaibg@163.com>
Date: Sat, 8 Oct 2022 14:52:56 +0800
Subject: [PATCH 52/56] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=9C=B0?=
 =?UTF-8?q?=E5=9B=BE=E7=BC=96=E8=BE=91=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=8D=97?=
 =?UTF-8?q?=E6=B5=B7=E7=BE=A4=E5=B2=9B=20=E9=A2=84=E8=A7=88=E6=97=B6?=
 =?UTF-8?q?=E4=BB=8D=E6=98=BE=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../components/Charts/Maps/MapBase/index.vue  | 23 ++++++++++++-------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/packages/components/Charts/Maps/MapBase/index.vue b/src/packages/components/Charts/Maps/MapBase/index.vue
index 20b1fdbc..8524684a 100644
--- a/src/packages/components/Charts/Maps/MapBase/index.vue
+++ b/src/packages/components/Charts/Maps/MapBase/index.vue
@@ -61,10 +61,14 @@ const getGeojson = (regionId: string) => {
 //异步时先注册空的 保证初始化不报错
 registerMap(props.chartConfig.option.mapRegion.adcode, { geoJSON: {} as any, specialAreas: {} })
 
-// 进行更换初始化地图
+// 进行更换初始化地图 如果为china 单独处理
 const registerMapInitAsync = async () => {
   await nextTick()
-  await getGeojson(props.chartConfig.option.mapRegion.adcode)
+  if (props.chartConfig.option.mapRegion.adcode!="china") {
+    await getGeojson(props.chartConfig.option.mapRegion.adcode)
+  }else{
+    await hainanLandsHandle(props.chartConfig.option.mapRegion.showHainanIsLands)
+  }
   vEchartsSetOption()
 }
 registerMapInitAsync()
@@ -85,7 +89,14 @@ const dataSetHandle = async (dataset: any) => {
 
   isPreview() && vEchartsSetOption()
 }
-
+// 处理海南群岛
+const hainanLandsHandle=async(newData:boolean)=>{
+  if (newData) {
+      await getGeojson('china')
+    } else {
+      registerMap('china', { geoJSON: mapJsonWithoutHainanIsLands as any, specialAreas: {} })
+    }
+}
 //监听 dataset 数据发生变化
 watch(
   () => props.chartConfig.option.dataset,
@@ -102,11 +113,7 @@ watch(
 watch(
   () => props.chartConfig.option.mapRegion.showHainanIsLands,
   async newData => {
-    if (newData) {
-      await getGeojson('china')
-    } else {
-      registerMap('china', { geoJSON: mapJsonWithoutHainanIsLands as any, specialAreas: {} })
-    }
+    await hainanLandsHandle(newData)
     vEchartsSetOption()
   },
   {

From 778be20ddcdf7a0e950229cadf5c8145c40d6cbe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 8 Oct 2022 20:32:36 +0800
Subject: [PATCH 53/56] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E9=A6=96?=
 =?UTF-8?q?=E9=A1=B5=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Pages/ChartItemSetting/StylesSetting.vue  |   4 +-
 .../components/CanvasPage/index.vue           | 178 ++++++++++--------
 src/views/preview/utils/style.ts              |   2 +-
 3 files changed, 97 insertions(+), 87 deletions(-)

diff --git a/src/components/Pages/ChartItemSetting/StylesSetting.vue b/src/components/Pages/ChartItemSetting/StylesSetting.vue
index 661970cc..672755c4 100644
--- a/src/components/Pages/ChartItemSetting/StylesSetting.vue
+++ b/src/components/Pages/ChartItemSetting/StylesSetting.vue
@@ -157,14 +157,12 @@ const props = defineProps({
   }
 })
 
-// 百分比格式化persen
+// 百分比格式化 person
 const sliderFormatTooltip = (v: string) => {
-  // @ts-ignore
   return `${(parseFloat(v) * 100).toFixed(0)}%`
 }
 // 角度格式化
 const degFormatTooltip = (v: string) => {
-  // @ts-ignore
   return `${v}deg`
 }
 </script>
diff --git a/src/views/chart/ContentConfigurations/components/CanvasPage/index.vue b/src/views/chart/ContentConfigurations/components/CanvasPage/index.vue
index 040823e1..5d4bcc23 100644
--- a/src/views/chart/ContentConfigurations/components/CanvasPage/index.vue
+++ b/src/views/chart/ContentConfigurations/components/CanvasPage/index.vue
@@ -30,17 +30,11 @@
         :onBeforeUpload="beforeUploadHandle"
       >
         <n-upload-dragger>
-          <img
-            v-if="canvasConfig.backgroundImage"
-            class="upload-show"
-            :src="canvasConfig.backgroundImage"
-            alt="背景"
-          />
+          <img v-if="canvasConfig.backgroundImage" class="upload-show" :src="canvasConfig.backgroundImage" alt="背景" />
           <div class="upload-img" v-show="!canvasConfig.backgroundImage">
             <img src="@/assets/images/canvas/noImage.png" />
             <n-text class="upload-desc" depth="3">
-              背景图需小于 {{ backgroundImageSize }}M ,格式为 png/jpg/gif
-              的文件
+              背景图需小于 {{ backgroundImageSize }}M ,格式为 png/jpg/gif 的文件
             </n-text>
           </div>
         </n-upload-dragger>
@@ -48,43 +42,52 @@
     </n-card>
     <n-space vertical :size="12">
       <n-space>
-        <n-text>背景色</n-text>
-        <n-color-picker
-          style="width: 326px;"
-          :showPreview="true"
-          :swatches="swatchesColors"
-          v-model:value="canvasConfig.background"
-        ></n-color-picker>
+        <n-text>背景颜色</n-text>
+        <div class="picker-height">
+          <n-color-picker
+            v-if="!switchSelectColorLoading"
+            size="small"
+            style="width: 250px"
+            v-model:value="canvasConfig.background"
+            :showPreview="true"
+            :swatches="swatchesColors"
+          ></n-color-picker>
+        </div>
       </n-space>
       <n-space>
-        <n-text>颜色应用</n-text>
-        <n-switch
+        <n-text>应用类型</n-text>
+        <n-select
           size="small"
-          v-model:value="canvasConfig.selectColor"
-          :loading="switchSelectColorLoading"
-          :round="false"
+          style="width: 250px"
+          v-model:value="selectColorValue"
           :disabled="!canvasConfig.backgroundImage"
-          :onUpdate="switchSelectColorHandle"
-        ></n-switch>
+          :options="selectColorOptions"
+          @update:value="selectColorValueHandle"
+        />
       </n-space>
       <n-space>
         <n-text>背景控制</n-text>
-        <n-button size="small" :disabled="!canvasConfig.backgroundImage" @click="clearImage">清除背景图</n-button>
-        <n-button size="small" :disabled="!canvasConfig.background" @click="clearColor">清除颜色</n-button>
+        <n-button class="clear-btn" size="small" :disabled="!canvasConfig.backgroundImage" @click="clearImage">
+          清除背景
+        </n-button>
+        <n-button class="clear-btn" size="small" :disabled="!canvasConfig.background" @click="clearColor">
+          清除颜色
+        </n-button>
       </n-space>
       <n-space>
         <n-text>预览方式</n-text>
         <n-button-group>
-          <n-button 
-            ghost
+          <n-button
             v-for="item in previewTypeList"
             :key="item.key"
             :type="canvasConfig.previewScaleType === item.key ? 'primary' : 'tertiary'"
+            ghost
             size="small"
-            @click="selectPreviewType(item.key)">
+            @click="selectPreviewType(item.key)"
+          >
             <n-tooltip :show-arrow="false" trigger="hover">
               <template #trigger>
-                <n-icon size="18">
+                <n-icon class="select-preview-icon" size="18">
                   <component :is="item.icon"></component>
                 </n-icon>
               </template>
@@ -97,7 +100,7 @@
 
     <!-- 滤镜 -->
     <styles-setting :isCanvas="true" :chartStyles="canvasConfig"></styles-setting>
-    <n-divider style="margin: 10px 0;"></n-divider>
+    <n-divider style="margin: 10px 0"></n-divider>
 
     <!-- 主题选择和全局配置 -->
     <n-tabs class="tabs-box" size="small" type="segment">
@@ -123,7 +126,7 @@
 </template>
 
 <script setup lang="ts">
-import { ref, nextTick } from 'vue'
+import { ref, nextTick, watch } from 'vue'
 import { backgroundImageSize } from '@/settings/designSetting'
 import { FileTypeEnum } from '@/enums/fileTypeEnum'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
@@ -143,23 +146,25 @@ const editCanvas = chartEditStore.getEditCanvas
 
 const uploadFileListRef = ref()
 const switchSelectColorLoading = ref(false)
+const selectColorValue = ref(0)
 
-const ChartThemeColor = loadAsyncComponent(() =>
-  import('./components/ChartThemeColor/index.vue')
-)
+const ChartThemeColor = loadAsyncComponent(() => import('./components/ChartThemeColor/index.vue'))
 
-// 北京默认展示颜色列表
-const swatchesColors = [
-  '#232324',
-  '#2a2a2b',
-  '#313132',
-  '#373739',
-  '#757575',
-  '#e0e0e0',
-  '#eeeeee',
-  '#fafafa'
+// 默认应用类型
+const selectColorOptions = [
+  {
+    label: '应用颜色',
+    value: 0
+  },
+  {
+    label: '应用背景',
+    value: 1
+  }
 ]
 
+// 默认展示颜色列表
+const swatchesColors = ['#232324', '#2a2a2b', '#313132', '#373739', '#757575', '#e0e0e0', '#eeeeee', '#fafafa']
+
 const globalTabList = [
   {
     key: 'ChartTheme',
@@ -193,9 +198,19 @@ const previewTypeList = [
     title: '铺满',
     icon: FitToScreenIcon,
     desc: '强行拉伸画面,填充所有视图'
-  },
+  }
 ]
 
+watch(
+  () => canvasConfig.selectColor,
+  newValue => {
+    selectColorValue.value = newValue ? 0 : 1
+  },
+  {
+    immediate: true
+  }
+)
+
 // 画布尺寸规则
 const validator = (x: number) => x > 50
 
@@ -212,9 +227,7 @@ const beforeUploadHandle = async ({ file }) => {
   const size = file.file.size
 
   if (size > 1024 * 1024 * backgroundImageSize) {
-    window['$message'].warning(
-      `图片超出 ${backgroundImageSize}M 限制,请重新上传!`
-    )
+    window['$message'].warning(`图片超出 ${backgroundImageSize}M 限制,请重新上传!`)
     return false
   }
   if (type !== FileTypeEnum.PNG && type !== FileTypeEnum.JPEG && type !== FileTypeEnum.GIF) {
@@ -224,38 +237,32 @@ const beforeUploadHandle = async ({ file }) => {
   return true
 }
 
+// 应用颜色
+const selectColorValueHandle = (value: number) => {
+  canvasConfig.selectColor = value == 0
+}
+
 // 清除背景
 const clearImage = () => {
-  chartEditStore.setEditCanvasConfig(
-    EditCanvasConfigEnum.BACKGROUND_IMAGE,
-    undefined
-  )
-  chartEditStore.setEditCanvasConfig(
-    EditCanvasConfigEnum.SELECT_COLOR,
-    true
-  )
+  chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, undefined)
+  chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, true)
 }
 
-// 清除颜色
-const clearColor = () => {
-  chartEditStore.setEditCanvasConfig(
-    EditCanvasConfigEnum.BACKGROUND,
-    undefined
-  )
-  if (canvasConfig.backgroundImage) {
-    chartEditStore.setEditCanvasConfig(
-      EditCanvasConfigEnum.SELECT_COLOR,
-      false
-    )
-  }
-}
-
-// 启用/关闭 颜色
+// 启用/关闭 颜色(强制更新)
 const switchSelectColorHandle = () => {
   switchSelectColorLoading.value = true
   setTimeout(() => {
     switchSelectColorLoading.value = false
-  }, 1000)
+  })
+}
+
+// 清除颜色
+const clearColor = () => {
+  chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND, undefined)
+  if (canvasConfig.backgroundImage) {
+    chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, false)
+  }
+  switchSelectColorHandle()
 }
 
 // 自定义上传操作
@@ -264,14 +271,8 @@ const customRequest = (options: UploadCustomRequestOptions) => {
   nextTick(() => {
     if (file.file) {
       const ImageUrl = fileToUrl(file.file)
-      chartEditStore.setEditCanvasConfig(
-        EditCanvasConfigEnum.BACKGROUND_IMAGE,
-        ImageUrl
-      )
-      chartEditStore.setEditCanvasConfig(
-        EditCanvasConfigEnum.SELECT_COLOR,
-        false
-      )
+      chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, ImageUrl)
+      chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, false)
     } else {
       window['$message'].error('添加图片失败,请稍后重试!')
     }
@@ -285,8 +286,8 @@ const selectPreviewType = (key: PreviewScaleEnum) => {
 </script>
 
 <style lang="scss" scoped>
-$updloadWidth: 326px;
-$updloadHeight: 193px;
+$uploadWidth: 326px;
+$uploadHeight: 193px;
 @include go(canvas-setting) {
   padding-top: 20px;
   .upload-box {
@@ -299,12 +300,12 @@ $updloadHeight: 193px;
       }
       .n-upload-dragger {
         padding: 5px;
-        width: $updloadWidth;
+        width: $uploadWidth;
       }
     }
     .upload-show {
       width: -webkit-fill-available;
-      height: $updloadHeight;
+      height: $uploadHeight;
       border-radius: 5px;
     }
     .upload-img {
@@ -322,6 +323,17 @@ $updloadHeight: 193px;
   .icon-position {
     padding-top: 2px;
   }
+  .picker-height {
+    min-height: 35px;
+  }
+  .clear-btn {
+    padding-left: 2.25em;
+    padding-right: 2.25em;
+  }
+  .select-preview-icon {
+    padding-right: .68em;
+    padding-left: .68em;
+  }
   .tabs-box {
     margin-top: 20px;
   }
diff --git a/src/views/preview/utils/style.ts b/src/views/preview/utils/style.ts
index 507c7a22..6cd25cba 100644
--- a/src/views/preview/utils/style.ts
+++ b/src/views/preview/utils/style.ts
@@ -33,7 +33,7 @@ export const getStatusStyle = (attr: StatusType) => {
 export const getEditCanvasConfigStyle = (canvas: EditCanvasConfigType) => {
   // 背景
   const computedBackground = canvas.selectColor
-    ? { background: canvas.background || '#000000' }
+    ? { background: canvas.background }
     : {
         background: `url(${canvas.backgroundImage}) center center / cover no-repeat !important`
       }

From 9ee62dffcafc7a983d092622bb6c668c9623e51d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 8 Oct 2022 20:48:52 +0800
Subject: [PATCH 54/56] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=8F=B3?=
 =?UTF-8?q?=E9=94=AE=E8=A7=A3=E9=94=81=E6=97=A0=E6=B3=95=E4=BD=BF=E7=94=A8?=
 =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/chart/hooks/useContextMenu.hook.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/views/chart/hooks/useContextMenu.hook.ts b/src/views/chart/hooks/useContextMenu.hook.ts
index 2bf8fdf8..e0aa782e 100644
--- a/src/views/chart/hooks/useContextMenu.hook.ts
+++ b/src/views/chart/hooks/useContextMenu.hook.ts
@@ -199,7 +199,9 @@ const handleContextMenu = (
     target = target.parentNode
   }
 
-  // 展示列表
+  chartEditStore.setTargetSelectChart(targetInstance && targetInstance.id)
+
+  // 隐藏旧列表
   chartEditStore.setRightMenuShow(false)
 
   // * 多选默认选项

From 3e5e1a9b41ce9b47b04676d57be34c2c766c0318 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 8 Oct 2022 20:49:08 +0800
Subject: [PATCH 55/56] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=E4=BB=A3?=
 =?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/GoSystemSet/index.vue                       | 2 +-
 src/components/Pages/ChartItemSetting/StylesSetting.vue    | 2 +-
 src/views/chart/ContentEdit/components/EditGroup/index.vue | 2 +-
 src/views/chart/ContentEdit/index.vue                      | 5 ++++-
 src/views/preview/components/PreviewRenderGroup/index.vue  | 6 +++---
 src/views/preview/components/PreviewRenderList/index.vue   | 4 ++--
 6 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/components/GoSystemSet/index.vue b/src/components/GoSystemSet/index.vue
index 83df5a15..180836a1 100644
--- a/src/components/GoSystemSet/index.vue
+++ b/src/components/GoSystemSet/index.vue
@@ -190,7 +190,7 @@ const handleChange = (e: MouseEvent, item: ListType) => {
     width: 100px;
   }
   .select-min-width {
-    width: 110px;
+    width: 115px;
   }
   @include deep() {
     .n-list-item {
diff --git a/src/components/Pages/ChartItemSetting/StylesSetting.vue b/src/components/Pages/ChartItemSetting/StylesSetting.vue
index 672755c4..b943ca71 100644
--- a/src/components/Pages/ChartItemSetting/StylesSetting.vue
+++ b/src/components/Pages/ChartItemSetting/StylesSetting.vue
@@ -72,7 +72,7 @@
     <!-- 混合模式 -->
     <setting-item-box v-if="!isCanvas" name="混合模式" :alone="true">
       <setting-item name="视频组件需要底色透明一般选中滤色">
-        <n-select size="small" v-model:value="chartStyles.blendMode" :options="BlendModeEnumList"></n-select>
+        <n-select v-model:value="chartStyles.blendMode" size="small" filterable :options="BlendModeEnumList"></n-select>
       </setting-item>
     </setting-item-box>
 
diff --git a/src/views/chart/ContentEdit/components/EditGroup/index.vue b/src/views/chart/ContentEdit/components/EditGroup/index.vue
index 9276ec08..5d7f1462 100644
--- a/src/views/chart/ContentEdit/components/EditGroup/index.vue
+++ b/src/views/chart/ContentEdit/components/EditGroup/index.vue
@@ -12,7 +12,7 @@
         ...useSizeStyle(groupData.attr),
         ...getFilterStyle(groupData.styles),
         ...getTransformStyle(groupData.styles),
-        ...getBlendModeStyle(groupData.styles)
+        ...getBlendModeStyle(groupData.styles) as any
       }"
       @click="mouseClickHandle($event, groupData)"
       @mousedown="mousedownHandle($event, groupData)"
diff --git a/src/views/chart/ContentEdit/index.vue b/src/views/chart/ContentEdit/index.vue
index 51c449b5..520a558c 100644
--- a/src/views/chart/ContentEdit/index.vue
+++ b/src/views/chart/ContentEdit/index.vue
@@ -37,7 +37,10 @@
               v-else
               :data-id="item.id"
               :index="index"
-              :style="{ ...useComponentStyle(item.attr, index), ...getBlendModeStyle(item.styles) }"
+              :style="{
+                ...useComponentStyle(item.attr, index),
+                ...getBlendModeStyle(item.styles) as any
+              }"
               :item="item"
               @click="mouseClickHandle($event, item)"
               @mousedown="mousedownHandle($event, item)"
diff --git a/src/views/preview/components/PreviewRenderGroup/index.vue b/src/views/preview/components/PreviewRenderGroup/index.vue
index a866fb7a..81790f63 100644
--- a/src/views/preview/components/PreviewRenderGroup/index.vue
+++ b/src/views/preview/components/PreviewRenderGroup/index.vue
@@ -8,9 +8,9 @@
       ...getComponentAttrStyle(item.attr, groupIndex),
       ...getFilterStyle(item.styles),
       ...getTransformStyle(item.styles),
-      ...getBlendModeStyle(item.styles),
-      ...getStatusStyle(item.status)
-    } as any"
+      ...getStatusStyle(item.status),
+      ...getBlendModeStyle(item.styles) as any
+    }"
   >
     <component
       :is="item.chartConfig.chartKey"
diff --git a/src/views/preview/components/PreviewRenderList/index.vue b/src/views/preview/components/PreviewRenderList/index.vue
index af0850a5..4335ab96 100644
--- a/src/views/preview/components/PreviewRenderList/index.vue
+++ b/src/views/preview/components/PreviewRenderList/index.vue
@@ -8,8 +8,8 @@
       ...getComponentAttrStyle(item.attr, index),
       ...getFilterStyle(item.styles),
       ...getTransformStyle(item.styles),
-      ...getBlendModeStyle(item.styles),
-      ...getStatusStyle(item.status)
+      ...getStatusStyle(item.status),
+      ...getBlendModeStyle(item.styles) as any
     } as any"
   >
     <!-- 分组 -->

From 3e10592a74d9c3747d6dda3924828f78d1bd5886 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?=
 <1262327911@qq.com>
Date: Sat, 8 Oct 2022 20:58:48 +0800
Subject: [PATCH 56/56] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=B7=B7?=
 =?UTF-8?q?=E5=90=88=E6=8F=90=E7=A4=BA=E7=9A=84=E5=B1=95=E7=A4=BA=E6=96=B9?=
 =?UTF-8?q?=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Pages/ChartItemSetting/StylesSetting.vue   | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/components/Pages/ChartItemSetting/StylesSetting.vue b/src/components/Pages/ChartItemSetting/StylesSetting.vue
index b943ca71..27275449 100644
--- a/src/components/Pages/ChartItemSetting/StylesSetting.vue
+++ b/src/components/Pages/ChartItemSetting/StylesSetting.vue
@@ -70,8 +70,19 @@
     </setting-item-box>
 
     <!-- 混合模式 -->
-    <setting-item-box v-if="!isCanvas" name="混合模式" :alone="true">
-      <setting-item name="视频组件需要底色透明一般选中滤色">
+    <setting-item-box v-if="!isCanvas" :alone="true">
+      <template #name>
+        <n-text>混合</n-text>
+        <n-tooltip trigger="hover">
+          <template #trigger>
+            <n-icon size="21" :depth="3">
+              <help-outline-icon></help-outline-icon>
+            </n-icon>
+          </template>
+          <n-text>视频组件需要底色透明一般选中滤色</n-text>
+        </n-tooltip>
+      </template>
+      <setting-item>
         <n-select v-model:value="chartStyles.blendMode" size="small" filterable :options="BlendModeEnumList"></n-select>
       </setting-item>
     </setting-item-box>
@@ -141,6 +152,7 @@
 import { PropType } from 'vue'
 import { PickCreateComponentType, BlendModeEnumList } from '@/packages/index.d'
 import { SettingItemBox, SettingItem, CollapseItem } from '@/components/Pages/ChartItemSetting'
+import { icon } from '@/plugins'
 
 const props = defineProps({
   isGroup: {
@@ -157,6 +169,8 @@ const props = defineProps({
   }
 })
 
+const { HelpOutlineIcon } = icon.ionicons5
+
 // 百分比格式化 person
 const sliderFormatTooltip = (v: string) => {
   return `${(parseFloat(v) * 100).toFixed(0)}%`