瀏覽代碼

build: 升级版本到2.0.7

奔跑的面条 3 年之前
父節點
當前提交
504a1f4703
共有 81 個文件被更改,包括 2023 次插入667 次删除
  1. 2 1
      package.json
  2. 295 245
      pnpm-lock.yaml
  3. 199 0
      src/api/mock/heatMapData.json
  4. 12 0
      src/api/mock/index.ts
  5. 56 0
      src/api/mock/scatter.json
  6. 23 6
      src/api/mock/test.mock.ts
  7. 二進制
      src/assets/images/chart/charts/bar_x.png
  8. 二進制
      src/assets/images/chart/charts/bar_y.png
  9. 二進制
      src/assets/images/chart/charts/bar_y2.png
  10. 二進制
      src/assets/images/chart/charts/funnel.png
  11. 二進制
      src/assets/images/chart/charts/heatmap.png
  12. 二進制
      src/assets/images/chart/charts/line.png
  13. 二進制
      src/assets/images/chart/charts/line_gradient.png
  14. 二進制
      src/assets/images/chart/charts/line_gradient2.png
  15. 二進制
      src/assets/images/chart/charts/line_gradient_single.png
  16. 二進制
      src/assets/images/chart/charts/line_linear_single.png
  17. 二進制
      src/assets/images/chart/charts/map.png
  18. 二進制
      src/assets/images/chart/charts/map_logo.png
  19. 二進制
      src/assets/images/chart/charts/pie.png
  20. 二進制
      src/assets/images/chart/charts/point.png
  21. 二進制
      src/assets/images/chart/charts/radar.png
  22. 二進制
      src/assets/images/chart/charts/scatter-logarithmic-regression.png
  23. 二進制
      src/assets/images/chart/charts/scatter-multi.png
  24. 二進制
      src/assets/images/chart/charts/scatter.png
  25. 二進制
      src/assets/images/chart/charts/static.png
  26. 二進制
      src/assets/images/chart/charts/tree_map.png
  27. 二進制
      src/assets/images/chart/charts/water_WaterPolo.png
  28. 7 0
      src/components/GoSystemSet/index.vue
  29. 113 187
      src/components/Pages/ChartItemSetting/GlobalSetting.vue
  30. 29 0
      src/components/Pages/ChartItemSetting/GlobalSettingPosition.vue
  31. 4 1
      src/components/Pages/ChartItemSetting/index.ts
  32. 23 7
      src/packages/chartConfiguration/echarts/axis.ts
  33. 2 2
      src/packages/components/Charts/Bars/BarCommon/config.vue
  34. 2 2
      src/packages/components/Charts/Bars/BarCrossrange/config.vue
  35. 2 2
      src/packages/components/Charts/Lines/LineCommon/config.vue
  36. 2 2
      src/packages/components/Charts/Lines/LineGradientSingle/config.vue
  37. 2 3
      src/packages/components/Charts/Lines/LineGradients/config.ts
  38. 2 2
      src/packages/components/Charts/Lines/LineGradients/config.vue
  39. 1 1
      src/packages/components/Charts/Lines/LineGradients/index.ts
  40. 2 2
      src/packages/components/Charts/Lines/LineLinearSingle/config.vue
  41. 58 60
      src/packages/components/Charts/Maps/MapChina/config.vue
  42. 1 1
      src/packages/components/Charts/Mores/Funnel/config.vue
  43. 61 0
      src/packages/components/Charts/Mores/Heatmap/config.ts
  44. 18 0
      src/packages/components/Charts/Mores/Heatmap/config.vue
  45. 199 0
      src/packages/components/Charts/Mores/Heatmap/data.json
  46. 2 1
      src/packages/components/Charts/Mores/Heatmap/index.ts
  47. 81 6
      src/packages/components/Charts/Mores/Heatmap/index.vue
  48. 0 6
      src/packages/components/Charts/Mores/Point/config.vue
  49. 0 14
      src/packages/components/Charts/Mores/Point/index.ts
  50. 0 13
      src/packages/components/Charts/Mores/Point/index.vue
  51. 9 5
      src/packages/components/Charts/Mores/Radar/config.vue
  52. 3 2
      src/packages/components/Charts/Mores/Radar/index.vue
  53. 1 2
      src/packages/components/Charts/Mores/index.ts
  54. 26 23
      src/packages/components/Charts/Pies/PieCircle/config.vue
  55. 1 1
      src/packages/components/Charts/Pies/PieCommon/config.vue
  56. 81 0
      src/packages/components/Charts/Scatters/ScatterCommon/config.ts
  57. 55 0
      src/packages/components/Charts/Scatters/ScatterCommon/config.vue
  58. 110 0
      src/packages/components/Charts/Scatters/ScatterCommon/data.json
  59. 15 0
      src/packages/components/Charts/Scatters/ScatterCommon/index.ts
  60. 90 0
      src/packages/components/Charts/Scatters/ScatterCommon/index.vue
  61. 93 0
      src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/config.ts
  62. 18 0
      src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/config.vue
  63. 64 0
      src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/data.json
  64. 15 0
      src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/index.ts
  65. 73 0
      src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/index.vue
  66. 4 0
      src/packages/components/Charts/Scatters/index.ts
  67. 15 0
      src/packages/components/Charts/Scatters/shard.ts
  68. 4 1
      src/packages/components/Charts/index.d.ts
  69. 2 1
      src/packages/components/Charts/index.ts
  70. 2 1
      src/packages/components/Tables/Tables/TableList/index.ts
  71. 2 1
      src/packages/components/Tables/Tables/TableScrollBoard/index.ts
  72. 1 0
      src/settings/chartThemes/global.theme.json
  73. 3 1
      src/settings/systemSetting.ts
  74. 9 0
      src/store/modules/settingStore/settingStore.d.ts
  75. 4 1
      src/store/modules/settingStore/settingStore.ts
  76. 24 2
      src/views/chart/ContentCharts/components/ChartsItemBox/index.vue
  77. 22 17
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataAjax/index.vue
  78. 4 1
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index.vue
  79. 11 2
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestTargetConfig/index.vue
  80. 62 40
      src/views/chart/ContentEdit/components/EditTools/index.vue
  81. 2 2
      vite.config.ts

+ 2 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "go-view",
-  "version": "2.0.6",
+  "version": "2.0.7",
   "scripts": {
     "dev": "vite --host",
     "build": "vue-tsc --noEmit && vite build",
@@ -18,6 +18,7 @@
     "color": "^4.2.3",
     "crypto-js": "^4.1.1",
     "echarts-liquidfill": "^3.1.0",
+    "echarts-stat": "^1.2.0",
     "highlight.js": "^11.5.0",
     "html2canvas": "^1.4.1",
     "keymaster": "^1.6.2",

+ 295 - 245
pnpm-lock.yaml

@@ -24,6 +24,7 @@ specifiers:
   default-passive-events: ^2.0.0
   echarts: ^5.3.2
   echarts-liquidfill: ^3.1.0
+  echarts-stat: ^1.2.0
   eslint: ^8.12.0
   eslint-config-prettier: ^8.5.0
   eslint-plugin-import: ^2.26.0
@@ -69,6 +70,7 @@ dependencies:
   color: 4.2.3
   crypto-js: 4.1.1
   echarts-liquidfill: 3.1.0_echarts@5.3.3
+  echarts-stat: registry.npmmirror.com/echarts-stat/1.2.0
   highlight.js: 11.5.1
   html2canvas: 1.4.1
   keymaster: 1.6.2
@@ -1213,7 +1215,6 @@ packages:
     dependencies:
       '@vue/reactivity': 3.2.37
       '@vue/shared': 3.2.37
-    dev: false
 
   /@vue/runtime-dom/3.2.37:
     resolution: {integrity: sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==}
@@ -1221,7 +1222,6 @@ packages:
       '@vue/runtime-core': 3.2.37
       '@vue/shared': 3.2.37
       csstype: 2.6.20
-    dev: false
 
   /@vue/server-renderer/3.2.37_vue@3.2.37:
     resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==}
@@ -1231,7 +1231,6 @@ packages:
       '@vue/compiler-ssr': 3.2.37
       '@vue/shared': 3.2.37
       vue: 3.2.37
-    dev: false
 
   /@vue/shared/3.2.37:
     resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==}
@@ -1429,11 +1428,11 @@ packages:
     dev: false
 
   /asynckit/0.4.0:
-    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/asynckit/-/asynckit-0.4.0.tgz}
     dev: false
 
   /axios/0.27.2:
-    resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/axios/-/axios-0.27.2.tgz}
     dependencies:
       follow-redirects: 1.15.1
       form-data: 4.0.0
@@ -1647,7 +1646,7 @@ packages:
       normalize-path: 3.0.0
       readdirp: 3.6.0
     optionalDependencies:
-      fsevents: 2.3.2
+      fsevents: registry.npmmirror.com/fsevents/2.3.2
     dev: true
 
   /clean-stack/2.2.0:
@@ -1727,7 +1726,7 @@ packages:
     dev: false
 
   /combined-stream/1.0.8:
-    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/combined-stream/-/combined-stream-1.0.8.tgz}
     engines: {node: '>= 0.8'}
     dependencies:
       delayed-stream: 1.0.0
@@ -1810,8 +1809,8 @@ packages:
     engines: {node: '>=10'}
     hasBin: true
     dependencies:
-      is-text-path: 1.0.1
       JSONStream: 1.3.5
+      is-text-path: 1.0.1
       lodash: 4.17.21
       meow: 8.1.2
       split2: 3.2.2
@@ -1890,7 +1889,6 @@ packages:
 
   /csstype/2.6.20:
     resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==}
-    dev: false
 
   /csstype/3.0.11:
     resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
@@ -2003,7 +2001,7 @@ packages:
     dev: true
 
   /delayed-stream/1.0.0:
-    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/delayed-stream/-/delayed-stream-1.0.0.tgz}
     engines: {node: '>=0.4.0'}
     dev: false
 
@@ -2101,7 +2099,6 @@ packages:
     dependencies:
       tslib: 2.3.0
       zrender: 5.3.2
-    dev: true
 
   /ee-first/1.1.1:
     resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@@ -2186,186 +2183,6 @@ packages:
       is-symbol: 1.0.4
     dev: true
 
-  /esbuild-android-64/0.14.43:
-    resolution: {integrity: sha512-kqFXAS72K6cNrB6RiM7YJ5lNvmWRDSlpi7ZuRZ1hu1S3w0zlwcoCxWAyM23LQUyZSs1PbjHgdbbfYAN8IGh6xg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-android-arm64/0.14.43:
-    resolution: {integrity: sha512-bKS2BBFh+7XZY9rpjiHGRNA7LvWYbZWP87pLehggTG7tTaCDvj8qQGOU/OZSjCSKDYbgY7Q+oDw8RlYQ2Jt2BA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-darwin-64/0.14.43:
-    resolution: {integrity: sha512-/3PSilx011ttoieRGkSZ0XV8zjBf2C9enV4ScMMbCT4dpx0mFhMOpFnCHkOK0pWGB8LklykFyHrWk2z6DENVUg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-darwin-arm64/0.14.43:
-    resolution: {integrity: sha512-1HyFUKs8DMCBOvw1Qxpr5Vv/ThNcVIFb5xgXWK3pyT40WPvgYIiRTwJCvNs4l8i5qWF8/CK5bQxJVDjQvtv0Yw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-freebsd-64/0.14.43:
-    resolution: {integrity: sha512-FNWc05TPHYgaXjbPZO5/rJKSBslfG6BeMSs8GhwnqAKP56eEhvmzwnIz1QcC9cRVyO+IKqWNfmHFkCa1WJTULA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-freebsd-arm64/0.14.43:
-    resolution: {integrity: sha512-amrYopclz3VohqisOPR6hA3GOWA3LZC1WDLnp21RhNmoERmJ/vLnOpnrG2P/Zao+/erKTCUqmrCIPVtj58DRoA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-32/0.14.43:
-    resolution: {integrity: sha512-KoxoEra+9O3AKVvgDFvDkiuddCds6q71owSQEYwjtqRV7RwbPzKxJa6+uyzUulHcyGVq0g15K0oKG5CFBcvYDw==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-64/0.14.43:
-    resolution: {integrity: sha512-EwINwGMyiJMgBby5/SbMqKcUhS5AYAZ2CpEBzSowsJPNBJEdhkCTtEjk757TN/wxgbu3QklqDM6KghY660QCUw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-arm/0.14.43:
-    resolution: {integrity: sha512-e6YzQUoDxxtyamuF12eVzzRC7bbEFSZohJ6igQB9tBqnNmIQY3fI6Cns3z2wxtbZ3f2o6idkD2fQnlvs2902Dg==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-arm64/0.14.43:
-    resolution: {integrity: sha512-UlSpjMWllAc70zYbHxWuDS3FJytyuR/gHJYBr8BICcTNb/TSOYVBg6U7b3jZ3mILTrgzwJUHwhEwK18FZDouUQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-mips64le/0.14.43:
-    resolution: {integrity: sha512-f+v8cInPEL1/SDP//CfSYzcDNgE4CY3xgDV81DWm3KAPWzhvxARrKxB1Pstf5mB56yAslJDxu7ryBUPX207EZA==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-ppc64le/0.14.43:
-    resolution: {integrity: sha512-5wZYMDGAL/K2pqkdIsW+I4IR41kyfHr/QshJcNpUfK3RjB3VQcPWOaZmc+74rm4ZjVirYrtz+jWw0SgxtxRanA==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-riscv64/0.14.43:
-    resolution: {integrity: sha512-lYcAOUxp85hC7lSjycJUVSmj4/9oEfSyXjb/ua9bNl8afonaduuqtw7hvKMoKuYnVwOCDw4RSfKpcnIRDWq+Bw==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-s390x/0.14.43:
-    resolution: {integrity: sha512-27e43ZhHvhFE4nM7HqtUbMRu37I/4eNSUbb8FGZWszV+uLzMIsHDwLoBiJmw7G9N+hrehNPeQ4F5Ujad0DrUKQ==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-netbsd-64/0.14.43:
-    resolution: {integrity: sha512-2mH4QF6hHBn5zzAfxEI/2eBC0mspVsZ6UVo821LpAJKMvLJPBk3XJO5xwg7paDqSqpl7p6IRrAenW999AEfJhQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-openbsd-64/0.14.43:
-    resolution: {integrity: sha512-ZhQpiZjvqCqO8jKdGp9+8k9E/EHSA+zIWOg+grwZasI9RoblqJ1QiZqqi7jfd6ZrrG1UFBNGe4m0NFxCFbMVbg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-sunos-64/0.14.43:
-    resolution: {integrity: sha512-DgxSi9DaHReL9gYuul2rrQCAapgnCJkh3LSHPKsY26zytYppG0HgkgVF80zjIlvEsUbGBP/GHQzBtrezj/Zq1Q==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-windows-32/0.14.43:
-    resolution: {integrity: sha512-Ih3+2O5oExiqm0mY6YYE5dR0o8+AspccQ3vIAtRodwFvhuyGLjb0Hbmzun/F3Lw19nuhPMu3sW2fqIJ5xBxByw==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-windows-64/0.14.43:
-    resolution: {integrity: sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-windows-arm64/0.14.43:
-    resolution: {integrity: sha512-7ZlD7bo++kVRblJEoG+cepljkfP8bfuTPz5fIXzptwnPaFwGS6ahvfoYzY7WCf5v/1nX2X02HDraVItTgbHnKw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild/0.11.3:
     resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==}
     hasBin: true
@@ -2373,31 +2190,31 @@ packages:
     dev: true
 
   /esbuild/0.14.43:
-    resolution: {integrity: sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/esbuild/-/esbuild-0.14.43.tgz}
     engines: {node: '>=12'}
     hasBin: true
     requiresBuild: true
     optionalDependencies:
-      esbuild-android-64: 0.14.43
-      esbuild-android-arm64: 0.14.43
-      esbuild-darwin-64: 0.14.43
-      esbuild-darwin-arm64: 0.14.43
-      esbuild-freebsd-64: 0.14.43
-      esbuild-freebsd-arm64: 0.14.43
-      esbuild-linux-32: 0.14.43
-      esbuild-linux-64: 0.14.43
-      esbuild-linux-arm: 0.14.43
-      esbuild-linux-arm64: 0.14.43
-      esbuild-linux-mips64le: 0.14.43
-      esbuild-linux-ppc64le: 0.14.43
-      esbuild-linux-riscv64: 0.14.43
-      esbuild-linux-s390x: 0.14.43
-      esbuild-netbsd-64: 0.14.43
-      esbuild-openbsd-64: 0.14.43
-      esbuild-sunos-64: 0.14.43
-      esbuild-windows-32: 0.14.43
-      esbuild-windows-64: 0.14.43
-      esbuild-windows-arm64: 0.14.43
+      esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.14.43
+      esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.14.43
+      esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.14.43
+      esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.14.43
+      esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.14.43
+      esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.14.43
+      esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.14.43
+      esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.14.43
+      esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.14.43
+      esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.14.43
+      esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.14.43
+      esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.14.43
+      esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.14.43
+      esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.14.43
+      esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.14.43
+      esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.14.43
+      esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.14.43
+      esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.14.43
+      esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.14.43
+      esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.14.43
     dev: true
 
   /escalade/3.1.1:
@@ -2823,7 +2640,7 @@ packages:
     dev: true
 
   /follow-redirects/1.15.1:
-    resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/follow-redirects/-/follow-redirects-1.15.1.tgz}
     engines: {node: '>=4.0'}
     peerDependencies:
       debug: '*'
@@ -2845,7 +2662,7 @@ packages:
     dev: true
 
   /form-data/4.0.0:
-    resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/form-data/-/form-data-4.0.0.tgz}
     engines: {node: '>= 6'}
     dependencies:
       asynckit: 0.4.0
@@ -2866,14 +2683,6 @@ packages:
     resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
     dev: true
 
-  /fsevents/2.3.2:
-    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
-    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /function-bind/1.1.1:
     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
     dev: true
@@ -3040,7 +2849,7 @@ packages:
       source-map: 0.6.1
       wordwrap: 1.0.0
     optionalDependencies:
-      uglify-js: 3.16.0
+      uglify-js: registry.npmmirror.com/uglify-js/3.16.0
     dev: true
 
   /hard-rejection/2.1.0:
@@ -3560,7 +3369,7 @@ packages:
     dependencies:
       universalify: 2.0.0
     optionalDependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
     dev: true
 
   /jsonparse/1.3.1:
@@ -3747,12 +3556,12 @@ packages:
     dev: true
 
   /mime-db/1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/mime-db/-/mime-db-1.52.0.tgz}
     engines: {node: '>= 0.6'}
     dev: false
 
   /mime-types/2.1.35:
-    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/mime-types/-/mime-types-2.1.35.tgz}
     engines: {node: '>= 0.6'}
     dependencies:
       mime-db: 1.52.0
@@ -3802,7 +3611,6 @@ packages:
 
   /monaco-editor/0.33.0:
     resolution: {integrity: sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==}
-    dev: false
 
   /ms/2.0.0:
     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
@@ -4187,7 +3995,7 @@ packages:
     dev: true
 
   /path-parse/1.0.7:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/path-parse/-/path-parse-1.0.7.tgz}
     dev: true
 
   /path-root-regex/0.1.2:
@@ -4518,7 +4326,7 @@ packages:
     dev: true
 
   /resolve/1.22.0:
-    resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/resolve/-/resolve-1.22.0.tgz}
     hasBin: true
     dependencies:
       is-core-module: 2.9.0
@@ -4555,11 +4363,11 @@ packages:
     dev: true
 
   /rollup/2.75.6:
-    resolution: {integrity: sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/rollup/-/rollup-2.75.6.tgz}
     engines: {node: '>=10.0.0'}
     hasBin: true
     optionalDependencies:
-      fsevents: 2.3.2
+      fsevents: registry.npmmirror.com/fsevents/2.3.2
     dev: true
 
   /run-async/2.4.1:
@@ -4838,7 +4646,7 @@ packages:
       has-flag: 4.0.0
 
   /supports-preserve-symlinks-flag/1.0.0:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz}
     engines: {node: '>= 0.4'}
     dev: true
 
@@ -4954,7 +4762,6 @@ packages:
 
   /tslib/2.3.0:
     resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
-    dev: true
 
   /tslib/2.4.0:
     resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
@@ -5006,7 +4813,6 @@ packages:
     resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==}
     engines: {node: '>=4.2.0'}
     hasBin: true
-    dev: true
 
   /typescript/4.7.3:
     resolution: {integrity: sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==}
@@ -5014,14 +4820,6 @@ packages:
     hasBin: true
     dev: true
 
-  /uglify-js/3.16.0:
-    resolution: {integrity: sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==}
-    engines: {node: '>=0.8.0'}
-    hasBin: true
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /unbox-primitive/1.0.2:
     resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
     dependencies:
@@ -5168,7 +4966,7 @@ packages:
     dev: true
 
   /vite/2.9.9_sass@1.52.3:
-    resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==, registry: http://npm.rongdasoft.com:7001/}
+    resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==, registry: http://npm.rongdasoft.com:7001/, tarball: http://npm.rongdasoft.com:7001/vite/-/vite-2.9.9.tgz}
     engines: {node: '>=12.2.0'}
     hasBin: true
     peerDependencies:
@@ -5189,7 +4987,7 @@ packages:
       rollup: 2.75.6
       sass: 1.52.3
     optionalDependencies:
-      fsevents: 2.3.2
+      fsevents: registry.npmmirror.com/fsevents/2.3.2
     dev: true
 
   /void-elements/3.1.0:
@@ -5426,7 +5224,6 @@ packages:
       '@vue/runtime-dom': 3.2.37
       '@vue/server-renderer': 3.2.37_vue@3.2.37
       '@vue/shared': 3.2.37
-    dev: false
 
   /vue3-lazyload/0.2.5-beta_2yymnzrok6eda47acnj2yjm3ae:
     resolution: {integrity: sha512-GVhJfL9Hcu+AvWsYmUwODivvt+gzpT0ztgAzZaUduoiTaGCv/qzhr0VwAQXfjGF3XFYFyOJsHlAi3/WE0P8XTQ==}
@@ -5592,4 +5389,257 @@ packages:
     resolution: {integrity: sha512-8IiYdfwHj2rx0UeIGZGGU4WEVSDEdeVCaIg/fomejg1Xu6OifAL1GVzIPHg2D+MyUkbNgPWji90t0a8IDk+39w==}
     dependencies:
       tslib: 2.3.0
+
+  registry.npmmirror.com/echarts-stat/1.2.0:
+    resolution: {integrity: sha512-zLd7Kgs+tuTSeaK0VQEMNmnMivEkhvHIk1gpBtLzpRerfcIQ+Bd5XudOMmtwpaTc1WDZbA7d1V//iiBccR46Qg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts-stat/-/echarts-stat-1.2.0.tgz}
+    name: echarts-stat
+    version: 1.2.0
+    dev: false
+
+  registry.npmmirror.com/esbuild-android-64/0.14.43:
+    resolution: {integrity: sha512-kqFXAS72K6cNrB6RiM7YJ5lNvmWRDSlpi7ZuRZ1hu1S3w0zlwcoCxWAyM23LQUyZSs1PbjHgdbbfYAN8IGh6xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.43.tgz}
+    name: esbuild-android-64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-android-arm64/0.14.43:
+    resolution: {integrity: sha512-bKS2BBFh+7XZY9rpjiHGRNA7LvWYbZWP87pLehggTG7tTaCDvj8qQGOU/OZSjCSKDYbgY7Q+oDw8RlYQ2Jt2BA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.43.tgz}
+    name: esbuild-android-arm64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-darwin-64/0.14.43:
+    resolution: {integrity: sha512-/3PSilx011ttoieRGkSZ0XV8zjBf2C9enV4ScMMbCT4dpx0mFhMOpFnCHkOK0pWGB8LklykFyHrWk2z6DENVUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.43.tgz}
+    name: esbuild-darwin-64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-darwin-arm64/0.14.43:
+    resolution: {integrity: sha512-1HyFUKs8DMCBOvw1Qxpr5Vv/ThNcVIFb5xgXWK3pyT40WPvgYIiRTwJCvNs4l8i5qWF8/CK5bQxJVDjQvtv0Yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.43.tgz}
+    name: esbuild-darwin-arm64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-freebsd-64/0.14.43:
+    resolution: {integrity: sha512-FNWc05TPHYgaXjbPZO5/rJKSBslfG6BeMSs8GhwnqAKP56eEhvmzwnIz1QcC9cRVyO+IKqWNfmHFkCa1WJTULA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.43.tgz}
+    name: esbuild-freebsd-64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-freebsd-arm64/0.14.43:
+    resolution: {integrity: sha512-amrYopclz3VohqisOPR6hA3GOWA3LZC1WDLnp21RhNmoERmJ/vLnOpnrG2P/Zao+/erKTCUqmrCIPVtj58DRoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.43.tgz}
+    name: esbuild-freebsd-arm64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-linux-32/0.14.43:
+    resolution: {integrity: sha512-KoxoEra+9O3AKVvgDFvDkiuddCds6q71owSQEYwjtqRV7RwbPzKxJa6+uyzUulHcyGVq0g15K0oKG5CFBcvYDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.43.tgz}
+    name: esbuild-linux-32
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-linux-64/0.14.43:
+    resolution: {integrity: sha512-EwINwGMyiJMgBby5/SbMqKcUhS5AYAZ2CpEBzSowsJPNBJEdhkCTtEjk757TN/wxgbu3QklqDM6KghY660QCUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.43.tgz}
+    name: esbuild-linux-64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-linux-arm/0.14.43:
+    resolution: {integrity: sha512-e6YzQUoDxxtyamuF12eVzzRC7bbEFSZohJ6igQB9tBqnNmIQY3fI6Cns3z2wxtbZ3f2o6idkD2fQnlvs2902Dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.43.tgz}
+    name: esbuild-linux-arm
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-linux-arm64/0.14.43:
+    resolution: {integrity: sha512-UlSpjMWllAc70zYbHxWuDS3FJytyuR/gHJYBr8BICcTNb/TSOYVBg6U7b3jZ3mILTrgzwJUHwhEwK18FZDouUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.43.tgz}
+    name: esbuild-linux-arm64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-linux-mips64le/0.14.43:
+    resolution: {integrity: sha512-f+v8cInPEL1/SDP//CfSYzcDNgE4CY3xgDV81DWm3KAPWzhvxARrKxB1Pstf5mB56yAslJDxu7ryBUPX207EZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.43.tgz}
+    name: esbuild-linux-mips64le
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+    requiresBuild: true
     dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-linux-ppc64le/0.14.43:
+    resolution: {integrity: sha512-5wZYMDGAL/K2pqkdIsW+I4IR41kyfHr/QshJcNpUfK3RjB3VQcPWOaZmc+74rm4ZjVirYrtz+jWw0SgxtxRanA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.43.tgz}
+    name: esbuild-linux-ppc64le
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-linux-riscv64/0.14.43:
+    resolution: {integrity: sha512-lYcAOUxp85hC7lSjycJUVSmj4/9oEfSyXjb/ua9bNl8afonaduuqtw7hvKMoKuYnVwOCDw4RSfKpcnIRDWq+Bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.43.tgz}
+    name: esbuild-linux-riscv64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-linux-s390x/0.14.43:
+    resolution: {integrity: sha512-27e43ZhHvhFE4nM7HqtUbMRu37I/4eNSUbb8FGZWszV+uLzMIsHDwLoBiJmw7G9N+hrehNPeQ4F5Ujad0DrUKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.43.tgz}
+    name: esbuild-linux-s390x
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-netbsd-64/0.14.43:
+    resolution: {integrity: sha512-2mH4QF6hHBn5zzAfxEI/2eBC0mspVsZ6UVo821LpAJKMvLJPBk3XJO5xwg7paDqSqpl7p6IRrAenW999AEfJhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.43.tgz}
+    name: esbuild-netbsd-64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-openbsd-64/0.14.43:
+    resolution: {integrity: sha512-ZhQpiZjvqCqO8jKdGp9+8k9E/EHSA+zIWOg+grwZasI9RoblqJ1QiZqqi7jfd6ZrrG1UFBNGe4m0NFxCFbMVbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.43.tgz}
+    name: esbuild-openbsd-64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-sunos-64/0.14.43:
+    resolution: {integrity: sha512-DgxSi9DaHReL9gYuul2rrQCAapgnCJkh3LSHPKsY26zytYppG0HgkgVF80zjIlvEsUbGBP/GHQzBtrezj/Zq1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.43.tgz}
+    name: esbuild-sunos-64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-windows-32/0.14.43:
+    resolution: {integrity: sha512-Ih3+2O5oExiqm0mY6YYE5dR0o8+AspccQ3vIAtRodwFvhuyGLjb0Hbmzun/F3Lw19nuhPMu3sW2fqIJ5xBxByw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.43.tgz}
+    name: esbuild-windows-32
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-windows-64/0.14.43:
+    resolution: {integrity: sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.43.tgz}
+    name: esbuild-windows-64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/esbuild-windows-arm64/0.14.43:
+    resolution: {integrity: sha512-7ZlD7bo++kVRblJEoG+cepljkfP8bfuTPz5fIXzptwnPaFwGS6ahvfoYzY7WCf5v/1nX2X02HDraVItTgbHnKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.43.tgz}
+    name: esbuild-windows-arm64
+    version: 0.14.43
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  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
+    version: 2.3.2
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  registry.npmmirror.com/graceful-fs/4.2.10:
+    resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz}
+    name: graceful-fs
+    version: 4.2.10
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  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
+    version: 3.16.0
+    engines: {node: '>=0.8.0'}
+    hasBin: true
+    requiresBuild: true
+    dev: true
+    optional: true

+ 199 - 0
src/api/mock/heatMapData.json

@@ -0,0 +1,199 @@
+{
+  "xAxis": [
+    "12a",
+    "1a",
+    "2a",
+    "3a",
+    "4a",
+    "5a",
+    "6a",
+    "7a",
+    "8a",
+    "9a",
+    "10a",
+    "11a",
+    "12p",
+    "1p",
+    "2p",
+    "3p",
+    "4p",
+    "5p",
+    "6p",
+    "7p",
+    "8p",
+    "9p",
+    "10p",
+    "11p"
+  ],
+  "yAxis": ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"],
+  "seriesData": [
+    [0, 0, "@integer(0, 10)"],
+    [1, 0, "@integer(0, 10)"],
+    [2, 0, "-"],
+    [3, 0, "-"],
+    [4, 0, "-"],
+    [5, 0, "-"],
+    [6, 0, "-"],
+    [7, 0, "-"],
+    [8, 0, "-"],
+    [9, 0, "-"],
+    [10, 0, "-"],
+    [11, 0, "@integer(0, 10)"],
+    [12, 0, "@integer(0, 10)"],
+    [13, 0, "@integer(0, 10)"],
+    [14, 0, "@integer(0, 10)"],
+    [15, 0, "@integer(0, 10)"],
+    [16, 0, "@integer(0, 10)"],
+    [17, 0, "@integer(0, 10)"],
+    [18, 0, "@integer(0, 10)"],
+    [19, 0, "@integer(0, 10)"],
+    [20, 0, "@integer(0, 10)"],
+    [21, 0, "@integer(0, 10)"],
+    [22, 0, "@integer(0, 10)"],
+    [23, 0, "@integer(0, 10)"],
+    [0, 1, 7],
+    [1, 1, "-"],
+    [2, 1, "-"],
+    [3, 1, "-"],
+    [4, 1, "-"],
+    [5, 1, "-"],
+    [6, 1, "-"],
+    [7, 1, "-"],
+    [8, 1, "-"],
+    [9, 1, "-"],
+    [10, 1, "@integer(0, 10)"],
+    [11, 1, "@integer(0, 10)"],
+    [12, 1, "@integer(0, 10)"],
+    [13, 1, "@integer(0, 10)"],
+    [14, 1, "@integer(0, 10)"],
+    [15, 1, "@integer(0, 10)"],
+    [16, 1, "@integer(0, 10)"],
+    [17, 1, "@integer(0, 10)"],
+    [18, 1, "@integer(0, 10)"],
+    [19, 1, "@integer(0, 10)"],
+    [20, 1, "@integer(0, 10)"],
+    [21, 1, "@integer(0, 10)"],
+    [22, 1, "@integer(0, 10)"],
+    [23, 1, "@integer(0, 10)"],
+    [0, 2, 1],
+    [1, 2, 1],
+    [2, 2, "-"],
+    [3, 2, "-"],
+    [4, 2, "-"],
+    [5, 2, "-"],
+    [6, 2, "-"],
+    [7, 2, "-"],
+    [8, 2, "-"],
+    [9, 2, "-"],
+    [10, 2, "@integer(0, 10)"],
+    [11, 2, "@integer(0, 10)"],
+    [12, 2, "@integer(0, 10)"],
+    [13, 2, "@integer(0, 10)"],
+    [14, 2, "@integer(0, 10)"],
+    [15, 2, "@integer(0, 10)"],
+    [16, 2, "@integer(0, 10)"],
+    [17, 2, "@integer(0, 10)"],
+    [18, 2, "@integer(0, 10)"],
+    [19, 2, "@integer(0, 10)"],
+    [20, 2, "@integer(0, 10)"],
+    [21, 2, "@integer(0, 10)"],
+    [22, 2, "@integer(0, 10)"],
+    [23, 2, "@integer(0, 10)"],
+    [0, 3, 7],
+    [1, 3, 3],
+    [2, 3, "-"],
+    [3, 3, "-"],
+    [4, 3, "-"],
+    [5, 3, "-"],
+    [6, 3, "-"],
+    [7, 3, "-"],
+    [8, 3, 1],
+    [9, 3, "-"],
+    [10, 3, "@integer(0, 10)"],
+    [11, 3, "@integer(0, 10)"],
+    [12, 3, "@integer(0, 10)"],
+    [13, 3, "@integer(0, 10)"],
+    [14, 3, "@integer(0, 10)"],
+    [15, 3, "@integer(0, 10)"],
+    [16, 3, "@integer(0, 10)"],
+    [17, 3, "@integer(0, 10)"],
+    [18, 3, "@integer(0, 10)"],
+    [19, 3, "@integer(0, 10)"],
+    [20, 3, "@integer(0, 10)"],
+    [21, 3, "@integer(0, 10)"],
+    [22, 3, "@integer(0, 10)"],
+    [23, 3, "@integer(0, 10)"],
+    [0, 4, "@integer(0, 10)"],
+    [1, 4, "@integer(0, 10)"],
+    [2, 4, "-"],
+    [3, 4, "-"],
+    [4, 4, "-"],
+    [5, 4, "@integer(0, 10)"],
+    [6, 4, "-"],
+    [7, 4, "-"],
+    [8, 4, "-"],
+    [9, 4, "@integer(0, 10)"],
+    [10, 4, "@integer(0, 10)"],
+    [11, 4, "@integer(0, 10)"],
+    [12, 4, "@integer(0, 10)"],
+    [13, 4, "@integer(0, 10)"],
+    [14, 4, "@integer(0, 10)"],
+    [15, 4, "@integer(0, 10)"],
+    [16, 4, "@integer(0, 10)"],
+    [17, 4, "@integer(0, 10)"],
+    [18, 4, "@integer(0, 10)"],
+    [19, 4, "@integer(0, 10)"],
+    [20, 4, "@integer(0, 10)"],
+    [21, 4, "@integer(0, 10)"],
+    [22, 4, "@integer(0, 10)"],
+    [23, 4, "-"],
+    [0, 5, "@integer(0, 10)"],
+    [1, 5, "@integer(0, 10)"],
+    [2, 5, "-"],
+    [3, 5, "@integer(0, 10)"],
+    [4, 5, "-"],
+    [5, 5, "-"],
+    [6, 5, "-"],
+    [7, 5, "-"],
+    [8, 5, "@integer(0, 10)"],
+    [9, 5, "-"],
+    [10, 5, "@integer(0, 10)"],
+    [11, 5, "@integer(0, 10)"],
+    [12, 5, "@integer(0, 10)"],
+    [13, 5, "@integer(0, 10)"],
+    [14, 5, "@integer(0, 10)"],
+    [15, 5, "@integer(0, 10)"],
+    [16, 5, "@integer(0, 10)"],
+    [17, 5, "@integer(0, 10)"],
+    [18, 5, "-"],
+    [19, 5, "@integer(0, 10)"],
+    [20, 5, "@integer(0, 10)"],
+    [21, 5, "@integer(0, 10)"],
+    [22, 5, "@integer(0, 10)"],
+    [23, 5, "-"],
+    [0, 6, "@integer(0, 10)"],
+    [1, 6, "-"],
+    [2, 6, "-"],
+    [3, 6, "-"],
+    [4, 6, "-"],
+    [5, 6, "-"],
+    [6, 6, "-"],
+    [7, 6, "-"],
+    [8, 6, "-"],
+    [9, 6, "-"],
+    [10, 6, "@integer(0, 10)"],
+    [11, 6, "-"],
+    [12, 6, "@integer(0, 10)"],
+    [13, 6, "@integer(0, 10)"],
+    [14, 6, "@integer(0, 10)"],
+    [15, 6, "@integer(0, 10)"],
+    [16, 6, "-"],
+    [17, 6, "-"],
+    [18, 6, "-"],
+    [19, 6, "-"],
+    [20, 6, "@integer(0, 10)"],
+    [21, 6, "@integer(0, 10)"],
+    [22, 6, "@integer(0, 10)"],
+    [23, 6, "@integer(0, 10)"]
+  ]
+}

+ 12 - 0
src/api/mock/index.ts

@@ -12,6 +12,8 @@ export const imageUrl = '/mock/image'
 export const rankListUrl = '/mock/rankList'
 export const scrollBoardUrl = '/mock/scrollBoard'
 export const radarUrl = '/mock/radarData'
+export const heatMapUrl = '/mock/heatMapData'
+export const scatterBasicUrl = '/mock/scatterBasic'
 
 const mockObject: MockMethod[] = [
   {
@@ -61,6 +63,16 @@ const mockObject: MockMethod[] = [
     method: RequestHttpEnum.GET,
     response: () => test.fetchRadar
   },
+  {
+    url: heatMapUrl,
+    method: RequestHttpEnum.GET,
+    response: () => test.fetchHeatmap
+  },
+  {
+    url: scatterBasicUrl,
+    method: RequestHttpEnum.GET,
+    response: () => test.fetchScatterBasic
+  },
 ]
 
 export default mockObject

+ 56 - 0
src/api/mock/scatter.json

@@ -0,0 +1,56 @@
+[
+  {
+    "dimensions": ["data1"],
+    "source": [
+      [10.0, "@integer(0, 100)"],
+      [8.07, "@integer(0, 100)"],
+      [13.0, "@integer(0, 100)"],
+      [9.05, "@integer(0, 100)"],
+      [11.0, "@integer(0, 100)"],
+      [14.0, "@integer(0, 100)"],
+      [13.4, "@integer(0, 100)"],
+      [10.0, "@integer(0, 100)"],
+      [14.0, "@integer(0, 100)"],
+      [12.5, "@integer(0, 100)"],
+      [9.15, "@integer(0, 100)"],
+      [11.5, "@integer(0, 100)"],
+      [3.03, "@integer(0, 100)"],
+      [12.2, "@integer(0, 100)"],
+      [2.02, "@integer(0, 100)"],
+      [1.05, "@integer(0, 100)"],
+      [4.05, "@integer(0, 100)"],
+      [6.03, "@integer(0, 100)"],
+      [12.0, "@integer(0, 100)"],
+      [12.0, "@integer(0, 100)"],
+      [7.08, "@integer(0, 100)"],
+      [5.02, "@integer(0, 100)"]
+    ]
+  },
+  {
+    "dimensions": ["data2"],
+    "source": [
+      [10.0, "@integer(0, 70)"],
+      [8.07, "@integer(0, 70)"],
+      [13.0, "@integer(0, 70)"],
+      [9.05, "@integer(0, 70)"],
+      [11.0, "@integer(0, 70)"],
+      [14.0, "@integer(0, 70)"],
+      [13.4, "@integer(0, 70)"],
+      [10.0, "@integer(0, 70)"],
+      [14.0, "@integer(0, 70)"],
+      [12.5, "@integer(0, 70)"],
+      [9.15, "@integer(0, 70)"],
+      [11.5, "@integer(0, 70)"],
+      [3.03, "@integer(0, 70)"],
+      [12.2, "@integer(0, 70)"],
+      [2.02, "@integer(0, 70)"],
+      [1.05, "@integer(0, 70)"],
+      [4.05, "@integer(0, 70)"],
+      [6.03, "@integer(0, 70)"],
+      [12.0, "@integer(0, 70)"],
+      [12.0, "@integer(0, 70)"],
+      [7.08, "@integer(0, 70)"],
+      [5.02, "@integer(0, 70)"]
+    ]
+  }
+]

+ 23 - 6
src/api/mock/test.mock.ts

@@ -1,3 +1,6 @@
+import heatmapJson from './heatMapData.json'
+import scatterJson from './scatter.json'
+
 export default {
   // 单图表
   fetchMockSingleData: {
@@ -9,27 +12,27 @@ export default {
       source: [
         {
           product: '@name',
-          'dataOne|0-900': 3,
+          'dataOne|0-900': 3
         },
         {
           product: '@name',
-          'dataOne|0-900': 3,
+          'dataOne|0-900': 3
         },
         {
           product: '@name',
-          'dataOne|0-900': 3,
+          'dataOne|0-900': 3
         },
         {
           product: '@name',
-          'dataOne|0-900': 3,
+          'dataOne|0-900': 3
         },
         {
           product: '@name',
-          'dataOne|0-900': 3,
+          'dataOne|0-900': 3
         },
         {
           product: '@name',
-          'dataOne|0-900': 3,
+          'dataOne|0-900': 3
         }
       ]
     }
@@ -181,5 +184,19 @@ export default {
         }
       ]
     }
+  },
+  // 热力图
+  fetchHeatmap: {
+    code: 0,
+    status: 200,
+    msg: '请求成功',
+    data: heatmapJson
+  },
+  // 散点图
+  fetchScatterBasic: {
+    code: 0,
+    status: 200,
+    msg: '请求成功',
+    data: scatterJson
   }
 }

二進制
src/assets/images/chart/charts/bar_x.png


二進制
src/assets/images/chart/charts/bar_y.png


二進制
src/assets/images/chart/charts/bar_y2.png


二進制
src/assets/images/chart/charts/funnel.png


二進制
src/assets/images/chart/charts/heatmap.png


二進制
src/assets/images/chart/charts/line.png


二進制
src/assets/images/chart/charts/line_gradient.png


二進制
src/assets/images/chart/charts/line_gradient2.png


二進制
src/assets/images/chart/charts/line_gradient_single.png


二進制
src/assets/images/chart/charts/line_linear_single.png


二進制
src/assets/images/chart/charts/map.png


二進制
src/assets/images/chart/charts/map_logo.png


二進制
src/assets/images/chart/charts/pie.png


二進制
src/assets/images/chart/charts/point.png


二進制
src/assets/images/chart/charts/radar.png


二進制
src/assets/images/chart/charts/scatter-logarithmic-regression.png


二進制
src/assets/images/chart/charts/scatter-multi.png


二進制
src/assets/images/chart/charts/scatter.png


二進制
src/assets/images/chart/charts/static.png


二進制
src/assets/images/chart/charts/tree_map.png


二進制
src/assets/images/chart/charts/water_WaterPolo.png


+ 7 - 0
src/components/GoSystemSet/index.vue

@@ -115,6 +115,13 @@ const list = reactive<ListType[]>([
     desc: '',
     value: ''
   },
+  {
+    key: SettingStoreEnums.CHART_TOOLS_STATUS_HIDE,
+    value: settingStore.getChartToolsStatusHide,
+    type: 'switch',
+    name: '隐藏工具栏',
+    desc: '鼠标移入时,会展示切换到展开模式',
+  },
   {
     key: SettingStoreEnums.CHART_TOOLS_STATUS,
     value: settingStore.getChartToolsStatus,

+ 113 - 187
src/components/Pages/ChartItemSetting/GlobalSetting.vue

@@ -1,163 +1,104 @@
 <template>
   <collapse-item v-if="title" name="标题">
     <template #header>
-      <n-switch
-        v-show="inChart"
-        v-model:value="title.show"
-        size="small"
-      ></n-switch>
+      <n-switch v-model:value="title.show" size="small"></n-switch>
     </template>
     <setting-item-box name="标题">
       <setting-item name="颜色">
-        <n-color-picker
-          v-model:value="title.textStyle.color"
-          size="small"
-        ></n-color-picker>
+        <n-color-picker v-model:value="title.textStyle.color" size="small"></n-color-picker>
       </setting-item>
       <setting-item name="大小">
-        <n-input-number
-          v-model:value="title.textStyle.fontSize"
-          :min="1"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="title.textStyle.fontSize" :min="1" size="small"></n-input-number>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="副标题">
       <setting-item name="颜色">
-        <n-color-picker
-          size="small"
-          v-model:value="title.subtextStyle.color"
-        ></n-color-picker>
+        <n-color-picker size="small" v-model:value="title.subtextStyle.color"></n-color-picker>
       </setting-item>
       <setting-item name="大小">
-        <n-input-number
-          v-model:value="title.subtextStyle.fontSize"
-          :min="1"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="title.subtextStyle.fontSize" :min="1" size="small"></n-input-number>
       </setting-item>
     </setting-item-box>
   </collapse-item>
 
   <collapse-item v-if="xAxis" name="X轴">
     <template #header>
-      <n-switch
-        v-show="inChart"
-        v-model:value="xAxis.show"
-        size="small"
-      ></n-switch>
+      <n-switch v-model:value="xAxis.show" size="small"></n-switch>
     </template>
     <setting-item-box name="单位">
       <setting-item name="名称">
         <n-input v-model:value="xAxis.name" size="small"></n-input>
       </setting-item>
       <setting-item name="颜色">
-        <n-color-picker
-          size="small"
-          v-model:value="xAxis.nameTextStyle.color"
-        ></n-color-picker>
+        <n-color-picker size="small" v-model:value="xAxis.nameTextStyle.color"></n-color-picker>
       </setting-item>
       <setting-item name="大小">
-         <n-input-number
-          v-model:value="xAxis.nameTextStyle.fontSize"
-          :min="12"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="xAxis.nameTextStyle.fontSize" :min="12" size="small"></n-input-number>
       </setting-item>
       <setting-item name="偏移量">
-         <n-input-number
-          v-model:value="xAxis.nameGap"
-          :min="5"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="xAxis.nameGap" :min="5" size="small"></n-input-number>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="标签">
-      <setting-item v-show="inChart" name="展示">
+      <setting-item name="展示">
         <n-space>
-          <n-switch
-            v-model:value="xAxis.axisLabel.show"
-            size="small"
-          ></n-switch>
+          <n-switch v-model:value="xAxis.axisLabel.show" size="small"></n-switch>
         </n-space>
       </setting-item>
       <setting-item name="颜色">
-        <n-color-picker
-          size="small"
-          v-model:value="xAxis.axisLabel.color"
-        ></n-color-picker>
+        <n-color-picker size="small" v-model:value="xAxis.axisLabel.color"></n-color-picker>
       </setting-item>
       <setting-item name="大小">
-        <n-input-number
-          v-model:value="xAxis.axisLabel.fontSize"
-          :min="8"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="xAxis.axisLabel.fontSize" :min="8" size="small"></n-input-number>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="轴线">
+      <setting-item name="展示">
+        <n-space>
+          <n-switch v-model:value="xAxis.axisLine.show" size="small"></n-switch>
+        </n-space>
+      </setting-item>
       <setting-item name="颜色">
-        <n-color-picker
-          v-model:value="xAxis.axisLine.lineStyle.color"
-          size="small"
-        ></n-color-picker>
+        <n-color-picker v-model:value="xAxis.axisLine.lineStyle.color" size="small"></n-color-picker>
       </setting-item>
       <setting-item name="粗细">
-        <n-input-number
-          v-model:value="xAxis.axisLine.lineStyle.width"
-          :min="1"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="xAxis.axisLine.lineStyle.width" :min="1" size="small"></n-input-number>
+      </setting-item>
+      <setting-item name="位置">
+        <n-select v-model:value="xAxis.position" size="small" :options="axisConfig.xposition"></n-select>
       </setting-item>
       <setting-item name="对齐零">
         <n-space>
-          <n-switch
-            v-model:value="xAxis.axisLine.onZero"
-            size="small"
-          ></n-switch>
+          <n-switch v-model:value="xAxis.axisLine.onZero" size="small"></n-switch>
         </n-space>
       </setting-item>
-      <setting-item v-show="inChart" name="反向">
+      <setting-item name="反向">
         <n-space>
           <n-switch v-model:value="xAxis.inverse" size="small"></n-switch>
         </n-space>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="刻度">
-      <setting-item v-show="inChart" name="展示">
+      <setting-item name="展示">
         <n-space>
           <n-switch v-model:value="xAxis.axisTick.show" size="small"></n-switch>
         </n-space>
       </setting-item>
       <setting-item name="长度">
-        <n-input-number
-          v-model:value="xAxis.axisTick.length"
-          :min="1"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="xAxis.axisTick.length" :min="1" size="small"></n-input-number>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="分割线">
-      <setting-item v-show="inChart" name="展示">
+      <setting-item name="展示">
         <n-space>
-          <n-switch
-            v-model:value="xAxis.splitLine.show"
-            size="small"
-          ></n-switch>
+          <n-switch v-model:value="xAxis.splitLine.show" size="small"></n-switch>
         </n-space>
       </setting-item>
       <setting-item name="颜色">
-        <n-color-picker
-          v-model:value="xAxis.splitLine.lineStyle.color"
-          size="small"
-        ></n-color-picker>
+        <n-color-picker v-model:value="xAxis.splitLine.lineStyle.color" size="small"></n-color-picker>
       </setting-item>
       <setting-item name="粗细">
-        <n-input-number
-          v-model:value="xAxis.splitLine.lineStyle.width"
-          :min="1"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="xAxis.splitLine.lineStyle.width" :min="1" size="small"></n-input-number>
       </setting-item>
       <setting-item name="类型">
         <n-select
@@ -166,140 +107,87 @@
           :options="axisConfig.splitLint.lineStyle.type"
         ></n-select>
       </setting-item>
-      <setting-item name="位置">
-        <n-select
-          v-model:value="xAxis.position"
-          size="small"
-          :options="axisConfig.xposition"
-        ></n-select>
-      </setting-item>
     </setting-item-box>
   </collapse-item>
 
   <collapse-item v-if="yAxis" name="Y轴">
     <template #header>
-      <n-switch
-        v-show="inChart"
-        v-model:value="yAxis.show"
-        size="small"
-      ></n-switch>
+      <n-switch v-model:value="yAxis.show" size="small"></n-switch>
     </template>
     <setting-item-box name="单位">
       <setting-item name="名称">
         <n-input v-model:value="yAxis.name" size="small"></n-input>
       </setting-item>
       <setting-item name="颜色">
-        <n-color-picker
-          size="small"
-          v-model:value="yAxis.nameTextStyle.color"
-        ></n-color-picker>
+        <n-color-picker size="small" v-model:value="yAxis.nameTextStyle.color"></n-color-picker>
       </setting-item>
-       <setting-item name="大小">
-        <n-input-number
-          v-model:value="yAxis.nameTextStyle.fontSize"
-          :min="8"
-          size="small"
-        ></n-input-number>
+      <setting-item name="大小">
+        <n-input-number v-model:value="yAxis.nameTextStyle.fontSize" :min="8" size="small"></n-input-number>
       </setting-item>
       <setting-item name="偏移量">
-         <n-input-number
-          v-model:value="yAxis.nameGap"
-          :min="5"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="yAxis.nameGap" :min="5" size="small"></n-input-number>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="标签">
-      <setting-item v-show="inChart" name="展示">
+      <setting-item name="展示">
         <n-space>
-          <n-switch
-            v-model:value="yAxis.axisLabel.show"
-            size="small"
-          ></n-switch>
+          <n-switch v-model:value="yAxis.axisLabel.show" size="small"></n-switch>
         </n-space>
       </setting-item>
       <setting-item name="颜色">
-        <n-color-picker
-          size="small"
-          v-model:value="yAxis.axisLabel.color"
-        ></n-color-picker>
+        <n-color-picker size="small" v-model:value="yAxis.axisLabel.color"></n-color-picker>
       </setting-item>
       <setting-item name="大小">
-        <n-input-number
-          v-model:value="yAxis.axisLabel.fontSize"
-          :min="8"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="yAxis.axisLabel.fontSize" :min="8" size="small"></n-input-number>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="轴线">
-      <setting-item v-show="inChart" name="展示">
+      <setting-item name="展示">
         <n-space>
           <n-switch v-model:value="yAxis.axisLine.show" size="small"></n-switch>
         </n-space>
       </setting-item>
       <setting-item name="颜色">
-        <n-color-picker
-          v-model:value="yAxis.axisLine.lineStyle.color"
-          size="small"
-        ></n-color-picker>
+        <n-color-picker v-model:value="yAxis.axisLine.lineStyle.color" size="small"></n-color-picker>
       </setting-item>
       <setting-item name="粗细">
-        <n-input-number
-          v-model:value="yAxis.axisLine.lineStyle.width"
-          :min="1"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="yAxis.axisLine.lineStyle.width" :min="1" size="small"></n-input-number>
+      </setting-item>
+      <setting-item name="位置">
+        <n-select v-model:value="yAxis.position" size="small" :options="axisConfig.yposition"></n-select>
       </setting-item>
       <setting-item name="对齐零">
         <n-space>
-          <n-switch
-            v-model:value="yAxis.axisLine.onZero"
-            size="small"
-          ></n-switch>
+          <n-switch v-model:value="yAxis.axisLine.onZero" size="small"></n-switch>
         </n-space>
       </setting-item>
-      <setting-item v-show="inChart" name="反向">
+      <setting-item name="反向">
         <n-space>
           <n-switch v-model:value="yAxis.inverse" size="small"></n-switch>
         </n-space>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="刻度">
-      <setting-item v-show="inChart" name="展示">
+      <setting-item name="展示">
         <n-space>
           <n-switch v-model:value="yAxis.axisTick.show" size="small"></n-switch>
         </n-space>
       </setting-item>
       <setting-item name="长度">
-        <n-input-number
-          v-model:value="yAxis.axisTick.length"
-          :min="1"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="yAxis.axisTick.length" :min="1" size="small"></n-input-number>
       </setting-item>
     </setting-item-box>
     <setting-item-box name="分割线">
-      <setting-item v-show="inChart" name="展示">
+      <setting-item name="展示">
         <n-space>
-          <n-switch
-            v-model:value="yAxis.splitLine.show"
-            size="small"
-          ></n-switch>
+          <n-switch v-model:value="yAxis.splitLine.show" size="small"></n-switch>
         </n-space>
       </setting-item>
       <setting-item name="颜色">
-        <n-color-picker
-          v-model:value="yAxis.splitLine.lineStyle.color"
-          size="small"
-        ></n-color-picker>
+        <n-color-picker v-model:value="yAxis.splitLine.lineStyle.color" size="small"></n-color-picker>
       </setting-item>
       <setting-item name="粗细">
-        <n-input-number
-          v-model:value="yAxis.splitLine.lineStyle.width"
-          :min="1"
-          size="small"
-        ></n-input-number>
+        <n-input-number v-model:value="yAxis.splitLine.lineStyle.width" :min="1" size="small"></n-input-number>
       </setting-item>
       <setting-item name="类型">
         <n-select
@@ -308,32 +196,70 @@
           :options="axisConfig.splitLint.lineStyle.type"
         ></n-select>
       </setting-item>
-      <setting-item name="位置">
-        <n-select
-          v-model:value="yAxis.position"
-          size="small"
-          :options="axisConfig.yposition"
-        ></n-select>
-      </setting-item>
     </setting-item-box>
   </collapse-item>
 
   <collapse-item v-if="legend" name="图例">
     <template #header>
-      <n-switch
-        v-show="inChart"
-        v-model:value="legend.show"
-        size="small"
-      ></n-switch>
+      <n-switch v-model:value="legend.show" size="small"></n-switch>
     </template>
     <setting-item-box name="图例文字">
       <setting-item>
-        <n-color-picker
-          size="small"
-          v-model:value="legend.textStyle.color"
-        ></n-color-picker>
+        <n-color-picker size="small" v-model:value="legend.textStyle.color"></n-color-picker>
+      </setting-item>
+    </setting-item-box>
+  </collapse-item>
+
+  <collapse-item v-if="visualMap" name="视觉映射">
+    <template #header>
+      <n-switch v-model:value="visualMap.show" size="small"></n-switch>
+    </template>
+
+    <setting-item-box name="范围">
+      <setting-item name="最小值">
+        <n-input-number v-model:value="visualMap.min" size="small"></n-input-number>
+      </setting-item>
+      <setting-item name="最大值">
+        <n-input-number v-model:value="visualMap.max" size="small"></n-input-number>
+      </setting-item>
+    </setting-item-box>
+
+    <setting-item-box name="颜色">
+      <setting-item :name="`层级-${index + 1}`" v-for="(item, index) in visualMap.inRange.color" :key="index">
+        <n-color-picker v-model:value="visualMap.inRange.color[index]" size="small"></n-color-picker>
       </setting-item>
     </setting-item-box>
+
+    <setting-item-box name="视觉映射">
+      <setting-item name="放置方向">
+        <n-select v-model:value="visualMap.orient" size="small" :options="axisConfig.visualMap.orient"></n-select>
+      </setting-item>
+      <setting-item name="宽度">
+        <n-input-number v-model:value="visualMap.temWidth" size="small"></n-input-number>
+      </setting-item>
+      <setting-item name="高度">
+        <n-input-number v-model:value="visualMap.itemHeight" size="small"></n-input-number>
+      </setting-item>
+      <setting-item name="反转">
+        <n-space>
+          <n-switch v-model:value="visualMap.inverse" size="small"></n-switch>
+        </n-space>
+      </setting-item>
+      <setting-item name="拖拽组件实时更新">
+        <n-space>
+          <n-switch v-model:value="visualMap.realtime" size="small"></n-switch>
+        </n-space>
+      </setting-item>
+    </setting-item-box>
+    <global-setting-position :targetData="visualMap"></global-setting-position>
+    <!-- <setting-item-box name="位置">
+      <setting-item name="距离底部">
+        <n-input-number v-model:value="visualMap.bottom" size="small"></n-input-number>
+      </setting-item>
+      <setting-item name="距离左侧">
+        <n-input-number v-model:value="visualMap.left" size="small"></n-input-number>
+      </setting-item>
+    </setting-item-box> -->
   </collapse-item>
 </template>
 
@@ -341,11 +267,7 @@
 import { PropType, computed } from 'vue'
 import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
 import { axisConfig } from '@/packages/chartConfiguration/echarts/index'
-import {
-  CollapseItem,
-  SettingItemBox,
-  SettingItem
-} from '@/components/Pages/ChartItemSetting'
+import { CollapseItem, SettingItemBox, SettingItem, GlobalSettingPosition } from '@/components/Pages/ChartItemSetting'
 
 const props = defineProps({
   optionData: {
@@ -374,4 +296,8 @@ const yAxis = computed(() => {
 const legend = computed(() => {
   return props.optionData.legend
 })
+
+const visualMap = computed(() => {
+  return props.optionData.visualMap
+})
 </script>

+ 29 - 0
src/components/Pages/ChartItemSetting/GlobalSettingPosition.vue

@@ -0,0 +1,29 @@
+<template>
+  <setting-item-box name="位置">
+    <setting-item :name="`偏移 X:${targetData.left || 0}px`">
+      <n-input-number v-model:value="targetData.left" size="small" step="10"></n-input-number>
+    </setting-item>
+    <setting-item :name="`偏移 Y:${targetData.top || 0}px`">
+      <n-input-number v-model:value="targetData.top" size="small" step="10"></n-input-number>
+    </setting-item>
+  </setting-item-box>
+</template>
+
+<script setup lang="ts">
+import { PropType, reactive } from 'vue'
+import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
+
+type positionType = {
+  top?: number | string | null
+  left?: number | string | null
+  right?: number | string | null
+  bottom?: number | string | null
+}
+
+const props = defineProps({
+  targetData: {
+    type: Object as PropType<positionType>,
+    required: true
+  }
+})
+</script>

+ 4 - 1
src/components/Pages/ChartItemSetting/index.ts

@@ -5,6 +5,9 @@ import CollapseItem from './CollapseItem.vue'
 
 // 全局配置属性
 import GlobalSetting from './GlobalSetting.vue'
+// 全局配置属性-位置
+import GlobalSettingPosition from './GlobalSettingPosition.vue'
+
 // 名称
 import NameSetting from './NameSetting.vue'
 // 方向
@@ -14,4 +17,4 @@ import SizeSetting from './SizeSetting.vue'
 // 样式
 import StylesSetting from './StylesSetting.vue'
 
-export { CollapseItem, SettingItemBox, SettingItem, GlobalSetting, NameSetting, PositionSetting, SizeSetting, StylesSetting }
+export { CollapseItem, SettingItemBox, SettingItem, GlobalSetting, GlobalSettingPosition, NameSetting, PositionSetting, SizeSetting, StylesSetting }

+ 23 - 7
src/packages/chartConfiguration/echarts/axis.ts

@@ -1,40 +1,56 @@
 export const axisConfig = {
+  // X轴位置
   xposition: [
     {
-      label: 'top',
+      label: '顶部',
       value: 'top'
     },
     {
-      label: 'bottom',
+      label: '底部',
       value: 'bottom'
     }
   ],
+  // Y轴位置
   yposition: [
     {
-      label: 'left',
+      label: '左侧',
       value: 'left'
     },
     {
-      label: 'right',
+      label: '右侧',
       value: 'right'
     }
   ],
+  // 线条
   splitLint: {
     lineStyle: {
       type: [
         {
-          label: 'solid',
+          label: '实线',
           value: 'solid'
         },
         {
-          label: 'dashed',
+          label: '虚线',
           value: 'dashed'
         },
         {
-          label: 'dotted',
+          label: '点线',
           value: 'dotted'
         }
       ]
     }
+  },
+  // 视觉映射
+  visualMap: {
+    orient: [
+      {
+        label: '竖直',
+        value: 'vertical'
+      },
+      {
+        label: '水平',
+        value: 'horizontal'
+      }
+    ]
   }
 }

+ 2 - 2
src/packages/components/Charts/Bars/BarCommon/config.vue

@@ -1,4 +1,6 @@
 <template>
+   <!-- Echarts 全局设置 --> 
+  <global-setting :optionData="optionData"></global-setting>
   <CollapseItem
     v-for="(item, index) in seriesList"
     :key="index"
@@ -36,8 +38,6 @@
       </SettingItem>
     </SettingItemBox>
   </CollapseItem>
-  <!-- Echarts 全局设置 --> 
-  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
 </template>
 
 <script setup lang="ts">

+ 2 - 2
src/packages/components/Charts/Bars/BarCrossrange/config.vue

@@ -1,4 +1,6 @@
 <template>
+  <!-- Echarts 全局设置 --> 
+  <global-setting :optionData="optionData"></global-setting>
   <CollapseItem v-for="(item, index) in seriesList" :key="index" :name="`柱状图-${index+1}`" :expanded="true">
     <SettingItemBox name="图形">
       <SettingItem name="颜色">
@@ -25,8 +27,6 @@
       </SettingItem>
     </SettingItemBox>
   </CollapseItem>
-  <!-- Echarts 全局设置 --> 
-  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
 </template>
 
 <script setup lang="ts">

+ 2 - 2
src/packages/components/Charts/Lines/LineCommon/config.vue

@@ -1,4 +1,6 @@
 <template>
+  <!-- Echarts 全局设置 -->
+  <global-setting :optionData="optionData"></global-setting>
   <CollapseItem
     v-for="(item, index) in seriesList"
     :key="index"
@@ -24,8 +26,6 @@
       </SettingItem>
     </SettingItemBox>
   </CollapseItem>
-  <!-- Echarts 全局设置 -->
-  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
 </template>
 
 <script setup lang="ts">

+ 2 - 2
src/packages/components/Charts/Lines/LineGradientSingle/config.vue

@@ -1,4 +1,6 @@
 <template>
+  <!-- Echarts 全局设置 -->
+  <global-setting :optionData="optionData"></global-setting>
   <CollapseItem
     v-for="(item, index) in seriesList"
     :key="index"
@@ -24,8 +26,6 @@
       </SettingItem>
     </SettingItemBox>
   </CollapseItem>
-  <!-- Echarts 全局设置 -->
-  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
 </template>
 
 <script setup lang="ts">

+ 2 - 3
src/packages/components/Charts/Lines/LineGradients/config.ts

@@ -53,9 +53,8 @@ const option = {
       type: 'line',
       smooth: false,
       lineStyle: {
-        normal: {
-          width: 3
-        }
+        width: 3,
+        type: 'solid'
       },
       areaStyle: {
         opacity: 0.8,

+ 2 - 2
src/packages/components/Charts/Lines/LineGradients/config.vue

@@ -1,4 +1,6 @@
 <template>
+  <!-- Echarts 全局设置 -->
+  <global-setting :optionData="optionData"></global-setting>
   <CollapseItem
     v-for="(item, index) in seriesList"
     :key="index"
@@ -24,8 +26,6 @@
       </SettingItem>
     </SettingItemBox>
   </CollapseItem>
-  <!-- Echarts 全局设置 -->
-  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
 </template>
 
 <script setup lang="ts">

+ 1 - 1
src/packages/components/Charts/Lines/LineGradients/index.ts

@@ -1,4 +1,4 @@
-import image from '@/assets/images/chart/charts/line_gradient2.png'
+import image from '@/assets/images/chart/charts/line_gradient.png'
 import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
 

+ 2 - 2
src/packages/components/Charts/Lines/LineLinearSingle/config.vue

@@ -1,4 +1,6 @@
 <template>
+  <!-- Echarts 全局设置 -->
+  <global-setting :optionData="optionData"></global-setting>
   <CollapseItem
     v-for="(item, index) in seriesList"
     :key="index"
@@ -58,8 +60,6 @@
       </SettingItem>
     </SettingItemBox>
   </CollapseItem>
-  <!-- Echarts 全局设置 -->
-  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
 </template>
 
 <script setup lang="ts">

+ 58 - 60
src/packages/components/Charts/Maps/MapChina/config.vue

@@ -1,65 +1,63 @@
 <template>
   <!-- Echarts 全局设置 -->
-  <div>
-    <global-setting :optionData="optionData" :in-chart="true"></global-setting>
-    <CollapseItem name="地图" :expanded="true">
-      <SettingItemBox name="省份" :alone="true">
-        <SettingItem name="背景颜色">
-          <n-color-picker
-            size="small"
-            :modes="['hex']"
-            v-model:value="seriesList[1].itemStyle.areaColor"
-          ></n-color-picker>
-        </SettingItem>
-        <SettingItem name="聚焦颜色(预览可见)">
-          <n-color-picker
-            size="small"
-            :modes="['hex']"
-            v-model:value="seriesList[1].itemStyle.emphasis.areaColor"
-          ></n-color-picker>
-        </SettingItem>
-        <SettingItem name="聚焦阴影(预览可见)">
-          <n-color-picker
-            size="small"
-            :modes="['hex']"
-            v-model:value="seriesList[1].itemStyle.emphasis.shadowColor"
-          ></n-color-picker>
-        </SettingItem>
-      </SettingItemBox>
-      <SettingItemBox name="边框">
-        <SettingItem name="颜色">
-          <n-color-picker
-            size="small"
-            :modes="['hex']"
-            v-model:value="seriesList[1].itemStyle.borderColor"
-          ></n-color-picker>
-        </SettingItem>
-        <SettingItem name="大小">
-          <n-input-number
-            v-model:value="seriesList[1].itemStyle.borderWidth"
-            :min="1"
-            size="small"
-            placeholder="请输入边框大小"
-          ></n-input-number>
-        </SettingItem>
-      </SettingItemBox>
-      <SettingItemBox name="其他">
-        <SettingItem>
-          <n-checkbox v-model:checked="seriesList[1].itemStyle.showHainanIsLands" size="small">显示南海群岛</n-checkbox>
-        </SettingItem>
-      </SettingItemBox>
-    </CollapseItem>
-    <CollapseItem name="标记" :expanded="true">
-      <SettingItemBox name="样式">
-        <SettingItem name="大小">
-          <n-input-number v-model:value="seriesList[0].symbolSize" size="small" :min="0"></n-input-number>
-        </SettingItem>
-        <SettingItem name="颜色">
-          <n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].itemStyle.color"></n-color-picker>
-        </SettingItem>
-      </SettingItemBox>
-    </CollapseItem>
-  </div>
+  <global-setting :optionData="optionData"></global-setting>
+  <CollapseItem name="地图" :expanded="true">
+    <SettingItemBox name="省份" :alone="true">
+      <SettingItem name="背景颜色">
+        <n-color-picker
+          size="small"
+          :modes="['hex']"
+          v-model:value="seriesList[1].itemStyle.areaColor"
+        ></n-color-picker>
+      </SettingItem>
+      <SettingItem name="聚焦颜色(预览可见)">
+        <n-color-picker
+          size="small"
+          :modes="['hex']"
+          v-model:value="seriesList[1].itemStyle.emphasis.areaColor"
+        ></n-color-picker>
+      </SettingItem>
+      <SettingItem name="聚焦阴影(预览可见)">
+        <n-color-picker
+          size="small"
+          :modes="['hex']"
+          v-model:value="seriesList[1].itemStyle.emphasis.shadowColor"
+        ></n-color-picker>
+      </SettingItem>
+    </SettingItemBox>
+    <SettingItemBox name="边框">
+      <SettingItem name="颜色">
+        <n-color-picker
+          size="small"
+          :modes="['hex']"
+          v-model:value="seriesList[1].itemStyle.borderColor"
+        ></n-color-picker>
+      </SettingItem>
+      <SettingItem name="大小">
+        <n-input-number
+          v-model:value="seriesList[1].itemStyle.borderWidth"
+          :min="1"
+          size="small"
+          placeholder="请输入边框大小"
+        ></n-input-number>
+      </SettingItem>
+    </SettingItemBox>
+    <SettingItemBox name="其他">
+      <SettingItem>
+        <n-checkbox v-model:checked="seriesList[1].itemStyle.showHainanIsLands" size="small">显示南海群岛</n-checkbox>
+      </SettingItem>
+    </SettingItemBox>
+  </CollapseItem>
+  <CollapseItem name="标记" :expanded="true">
+    <SettingItemBox name="样式">
+      <SettingItem name="大小">
+        <n-input-number v-model:value="seriesList[0].symbolSize" size="small" :min="0"></n-input-number>
+      </SettingItem>
+      <SettingItem name="颜色">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].itemStyle.color"></n-color-picker>
+      </SettingItem>
+    </SettingItemBox>
+  </CollapseItem>
 </template>
 
 <script setup lang="ts">

+ 1 - 1
src/packages/components/Charts/Mores/Funnel/config.vue

@@ -1,6 +1,6 @@
 <template>
   <!-- Echarts 全局设置 -->
-  <global-setting :optionData="optionData" :in-chart="true"> </global-setting>
+  <global-setting :optionData="optionData"> </global-setting>
   <!-- 漏斗图 -->
   <collapse-item v-for="(item, index) in seriesList" :key="index" :name="`漏斗图`" expanded>
     <setting-item-box name="排序" alone>

+ 61 - 0
src/packages/components/Charts/Mores/Heatmap/config.ts

@@ -0,0 +1,61 @@
+import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public'
+import { HeatmapConfig } from './index'
+import { CreateComponentType } from '@/packages/index.d'
+import { cloneDeep } from 'lodash'
+import dataJson from './data.json'
+
+export const includes = ['xAxis', 'yAxis']
+
+export const option = {
+  dataset: { ...dataJson },
+  tooltip: {
+    position: 'top'
+  },
+  xAxis: {
+    data: dataJson.xAxis
+  },
+  yAxis: {
+    data: dataJson.yAxis
+  },
+  visualMap: {
+    show: true,
+    min: 0,
+    max: 10,
+    itemWidth: 20,
+    itemHeight: 140,
+    calculable: true,
+    orient: 'horizontal',
+    inRange: {
+      // 高 -> 低
+      color: ['#4661c2', '#263253']
+    }
+  },
+  series: [
+    {
+      name: '',
+      type: 'heatmap',
+      data: dataJson.seriesData,
+      label: {
+        show: true
+      },
+      emphasis: {
+        itemStyle: {
+          borderColor: '#333',
+          borderWidth: 1,
+          shadowBlur: 10,
+          shadowColor: 'rgba(0, 0, 0, 0.5)'
+        }
+      },
+      progressive: 1000,
+      animation: false
+    }
+  ]
+}
+
+export default class Config extends PublicConfigClass implements CreateComponentType {
+  public key: string = HeatmapConfig.key
+  public chartConfig = cloneDeep(HeatmapConfig)
+
+  // 图表配置项
+  public option = echartOptionProfixHandle(option, includes)
+}

+ 18 - 0
src/packages/components/Charts/Mores/Heatmap/config.vue

@@ -1,6 +1,24 @@
 <template>
+  <div>
+    <global-setting :optionData="optionData"></global-setting>
+  </div>
 </template>
 
 <script setup lang="ts">
+  import { PropType, computed } from 'vue'
+import { GlobalSetting } from '@/components/Pages/ChartItemSetting'
+import { option } from './config'
+import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
+
+const props = defineProps({
+  optionData: {
+    type: Object as PropType<typeof option & GlobalThemeJsonType>,
+      required: true
+  }
+})
+
+const heatMapConfig = computed<typeof option>(() => {
+  return props.optionData
+})
 
 </script>

+ 199 - 0
src/packages/components/Charts/Mores/Heatmap/data.json

@@ -0,0 +1,199 @@
+{
+  "xAxis": [
+    "12a",
+    "1a",
+    "2a",
+    "3a",
+    "4a",
+    "5a",
+    "6a",
+    "7a",
+    "8a",
+    "9a",
+    "10a",
+    "11a",
+    "12p",
+    "1p",
+    "2p",
+    "3p",
+    "4p",
+    "5p",
+    "6p",
+    "7p",
+    "8p",
+    "9p",
+    "10p",
+    "11p"
+  ],
+  "yAxis": ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"],
+  "seriesData": [
+    [0, 0, 5],
+    [1, 0, 1],
+    [2, 0, "-"],
+    [3, 0, "-"],
+    [4, 0, "-"],
+    [5, 0, "-"],
+    [6, 0, "-"],
+    [7, 0, "-"],
+    [8, 0, "-"],
+    [9, 0, "-"],
+    [10, 0, "-"],
+    [11, 0, 2],
+    [12, 0, 4],
+    [13, 0, 1],
+    [14, 0, 1],
+    [15, 0, 3],
+    [16, 0, 4],
+    [17, 0, 6],
+    [18, 0, 4],
+    [19, 0, 4],
+    [20, 0, 3],
+    [21, 0, 3],
+    [22, 0, 2],
+    [23, 0, 5],
+    [0, 1, 7],
+    [1, 1, "-"],
+    [2, 1, "-"],
+    [3, 1, "-"],
+    [4, 1, "-"],
+    [5, 1, "-"],
+    [6, 1, "-"],
+    [7, 1, "-"],
+    [8, 1, "-"],
+    [9, 1, "-"],
+    [10, 1, 5],
+    [11, 1, 2],
+    [12, 1, 2],
+    [13, 1, 6],
+    [14, 1, 9],
+    [15, 1, 11],
+    [16, 1, 6],
+    [17, 1, 7],
+    [18, 1, 8],
+    [19, 1, 12],
+    [20, 1, 5],
+    [21, 1, 5],
+    [22, 1, 7],
+    [23, 1, 2],
+    [0, 2, 1],
+    [1, 2, 1],
+    [2, 2, "-"],
+    [3, 2, "-"],
+    [4, 2, "-"],
+    [5, 2, "-"],
+    [6, 2, "-"],
+    [7, 2, "-"],
+    [8, 2, "-"],
+    [9, 2, "-"],
+    [10, 2, 3],
+    [11, 2, 2],
+    [12, 2, 1],
+    [13, 2, 9],
+    [14, 2, 8],
+    [15, 2, 10],
+    [16, 2, 6],
+    [17, 2, 5],
+    [18, 2, 5],
+    [19, 2, 5],
+    [20, 2, 7],
+    [21, 2, 4],
+    [22, 2, 2],
+    [23, 2, 4],
+    [0, 3, 7],
+    [1, 3, 3],
+    [2, 3, "-"],
+    [3, 3, "-"],
+    [4, 3, "-"],
+    [5, 3, "-"],
+    [6, 3, "-"],
+    [7, 3, "-"],
+    [8, 3, 1],
+    [9, 3, "-"],
+    [10, 3, 5],
+    [11, 3, 4],
+    [12, 3, 7],
+    [13, 3, 14],
+    [14, 3, 13],
+    [15, 3, 12],
+    [16, 3, 9],
+    [17, 3, 5],
+    [18, 3, 5],
+    [19, 3, 10],
+    [20, 3, 6],
+    [21, 3, 4],
+    [22, 3, 4],
+    [23, 3, 1],
+    [0, 4, 1],
+    [1, 4, 3],
+    [2, 4, "-"],
+    [3, 4, "-"],
+    [4, 4, "-"],
+    [5, 4, 1],
+    [6, 4, "-"],
+    [7, 4, "-"],
+    [8, 4, "-"],
+    [9, 4, 2],
+    [10, 4, 4],
+    [11, 4, 4],
+    [12, 4, 2],
+    [13, 4, 4],
+    [14, 4, 4],
+    [15, 4, 14],
+    [16, 4, 12],
+    [17, 4, 1],
+    [18, 4, 8],
+    [19, 4, 5],
+    [20, 4, 3],
+    [21, 4, 7],
+    [22, 4, 3],
+    [23, 4, "-"],
+    [0, 5, 2],
+    [1, 5, 1],
+    [2, 5, "-"],
+    [3, 5, 3],
+    [4, 5, "-"],
+    [5, 5, "-"],
+    [6, 5, "-"],
+    [7, 5, "-"],
+    [8, 5, 2],
+    [9, 5, "-"],
+    [10, 5, 4],
+    [11, 5, 1],
+    [12, 5, 5],
+    [13, 5, 10],
+    [14, 5, 5],
+    [15, 5, 7],
+    [16, 5, 11],
+    [17, 5, 6],
+    [18, 5, "-"],
+    [19, 5, 5],
+    [20, 5, 3],
+    [21, 5, 4],
+    [22, 5, 2],
+    [23, 5, "-"],
+    [0, 6, 1],
+    [1, 6, "-"],
+    [2, 6, "-"],
+    [3, 6, "-"],
+    [4, 6, "-"],
+    [5, 6, "-"],
+    [6, 6, "-"],
+    [7, 6, "-"],
+    [8, 6, "-"],
+    [9, 6, "-"],
+    [10, 6, 1],
+    [11, 6, "-"],
+    [12, 6, 2],
+    [13, 6, 1],
+    [14, 6, 3],
+    [15, 6, 4],
+    [16, 6, "-"],
+    [17, 6, "-"],
+    [18, 6, "-"],
+    [19, 6, "-"],
+    [20, 6, 1],
+    [21, 6, 2],
+    [22, 6, 2],
+    [23, 6, 6]
+  ]
+}

+ 2 - 1
src/packages/components/Charts/Mores/Heatmap/index.ts

@@ -1,5 +1,5 @@
 import image from '@/assets/images/chart/charts/heatmap.png'
-import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
+import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
 
 export const HeatmapConfig: ConfigType = {
@@ -10,5 +10,6 @@ export const HeatmapConfig: ConfigType = {
   category: ChatCategoryEnum.MORE,
   categoryName: ChatCategoryEnumName.MORE,
   package: PackagesCategoryEnum.CHARTS,
+  chartFrame: ChartFrameEnum.COMMON,
   image
 }

+ 81 - 6
src/packages/components/Charts/Mores/Heatmap/index.vue

@@ -1,13 +1,88 @@
 <template>
-  <div>
-    水波
-  </div>
+  <v-chart ref="vChartRef" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart>
 </template>
 
 <script setup lang="ts">
+import { ref, watch, computed, PropType } from 'vue'
+import VChart from 'vue-echarts'
+import dataJson from './data.json'
+import { use } from 'echarts/core'
+import { CanvasRenderer } from 'echarts/renderers'
+import { HeatmapChart } from 'echarts/charts'
+import { includes } from './config'
+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 {
+  DatasetComponent,
+  GridComponent,
+  TooltipComponent,
+  LegendComponent,
+  VisualMapComponent
+} from 'echarts/components'
 
-</script>
+const props = defineProps({
+  themeSetting: {
+    type: Object,
+    required: true
+  },
+  themeColor: {
+    type: Object,
+    required: true
+  },
+  chartConfig: {
+    type: Object as PropType<CreateComponentType>,
+    required: true
+  }
+})
+
+use([
+  DatasetComponent,
+  CanvasRenderer,
+  HeatmapChart,
+  GridComponent,
+  TooltipComponent,
+  LegendComponent,
+  VisualMapComponent
+])
+
+const option = computed(() => {
+  return mergeTheme(props.chartConfig.option, props.themeSetting, includes)
+})
 
-<style lang="scss" scoped>
+const vChartRef = ref<typeof VChart>()
 
-</style>
+const dataSetHandle = (dataset: typeof dataJson) => {
+  const { seriesData, xAxis, yAxis } = dataset
+  if (xAxis) {
+    // @ts-ignore
+    props.chartConfig.option.xAxis.data = xAxis
+  }
+  if (yAxis) {
+    // @ts-ignore
+    props.chartConfig.option.yAxis.data = yAxis
+  }
+  if (seriesData) {
+    props.chartConfig.option.series[0].data = seriesData
+  }
+  if (vChartRef.value && isPreview()) {
+    vChartRef.value.setOption(props.chartConfig.option)
+  }
+}
+
+watch(
+  () => props.chartConfig.option.dataset,
+  newData => {
+    dataSetHandle(newData)
+  },
+  {
+    deep: false
+  }
+)
+
+useChartDataFetch(props.chartConfig, useChartEditStore, (newData: typeof dataJson) => {
+  dataSetHandle(newData)
+})
+</script>

+ 0 - 6
src/packages/components/Charts/Mores/Point/config.vue

@@ -1,6 +0,0 @@
-<template>
-</template>
-
-<script setup lang="ts">
-
-</script>

+ 0 - 14
src/packages/components/Charts/Mores/Point/index.ts

@@ -1,14 +0,0 @@
-import image from '@/assets/images/chart/charts/Point.png'
-import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
-import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
-
-export const PointConfig: ConfigType = {
-  key: 'Point',
-  chartKey: 'VPoint',
-  conKey: 'VCPoint',
-  title: '热力图',
-  category: ChatCategoryEnum.MORE,
-  categoryName: ChatCategoryEnumName.MORE,
-  package: PackagesCategoryEnum.CHARTS,
-  image
-}

+ 0 - 13
src/packages/components/Charts/Mores/Point/index.vue

@@ -1,13 +0,0 @@
-<template>
-  <div>
-    水波
-  </div>
-</template>
-
-<script setup lang="ts">
-
-</script>
-
-<style lang="scss" scoped>
-
-</style>

+ 9 - 5
src/packages/components/Charts/Mores/Radar/config.vue

@@ -1,8 +1,7 @@
 <template>
   <div>
     <!-- Echarts 全局设置 -->
-    <global-setting :optionData="optionData" :in-chart="true"></global-setting>
-
+    <global-setting :optionData="optionData"></global-setting>
     <CollapseItem name="雷达" :expanded="true">
       <SettingItemBox name="样式">
         <SettingItem>
@@ -12,10 +11,15 @@
           <n-checkbox v-model:checked="radarConfig.splitLine.show">分割线</n-checkbox>
         </SettingItem>
         <SettingItem name="雷达形状">
-          <n-select v-model:value="radarConfig.shape" size="small" :options="RadarShapeEnumList" placeholder="选择形状" />
+          <n-select
+            v-model:value="radarConfig.shape"
+            size="small"
+            :options="RadarShapeEnumList"
+            placeholder="选择形状"
+          />
         </SettingItem>
       </SettingItemBox>
-      
+
       <SettingItemBox name="坐标轴">
         <SettingItem>
           <n-checkbox v-model:checked="radarConfig.axisLine.show">轴线</n-checkbox>
@@ -45,7 +49,7 @@
           ></n-slider>
         </setting-item>
       </SettingItemBox>
-      
+
       <SettingItemBox name="偏移">
         <setting-item :name="`X 轴值:${radarProp.center[0]}%`">
           <n-slider

+ 3 - 2
src/packages/components/Charts/Mores/Radar/index.vue

@@ -5,6 +5,7 @@
 <script setup lang="ts">
 import { ref, computed, PropType, watch } from 'vue'
 import VChart from 'vue-echarts'
+import dataJson from './data.json'
 import { use } from 'echarts/core'
 import { CanvasRenderer } from 'echarts/renderers'
 import { RadarChart } from 'echarts/charts'
@@ -39,7 +40,7 @@ const option = computed(() => {
   return mergeTheme(props.chartConfig.option, props.themeSetting, includes)
 })
 
-const dataSetHandle = (dataset: any) => {
+const dataSetHandle = (dataset: typeof dataJson) => {
   if (dataset.seriesData) {
     props.chartConfig.option.series[0].data = dataset.seriesData
     // @ts-ignore
@@ -63,7 +64,7 @@ watch(
   }
 )
 
-useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => {
+useChartDataFetch(props.chartConfig, useChartEditStore, (newData: typeof dataJson) => {
   dataSetHandle(newData)
 })
 </script>

+ 1 - 2
src/packages/components/Charts/Mores/index.ts

@@ -2,8 +2,7 @@ import { ProcessConfig } from './Process/index'
 import { RadarConfig } from './Radar/index'
 import { FunnelConfig } from './Funnel/index'
 import { HeatmapConfig } from './Heatmap/index'
-import { PointConfig } from './Point/index'
 import { WaterPoloConfig } from './WaterPolo/index'
 import { TreeMapConfig } from './TreeMap/index'
 
-export default [ProcessConfig, RadarConfig, FunnelConfig, HeatmapConfig, PointConfig, WaterPoloConfig, TreeMapConfig]
+export default [ProcessConfig, RadarConfig, FunnelConfig, HeatmapConfig, WaterPoloConfig, TreeMapConfig]

+ 26 - 23
src/packages/components/Charts/Pies/PieCircle/config.vue

@@ -10,14 +10,17 @@
     <!-- Echarts 全局设置 -->
     <SettingItemBox name="进度条">
       <SettingItem name="颜色">
-        <n-color-picker
-          size="small"
-          :modes="['hex']"
-          v-model:value="item.data[0].itemStyle.color"
-        ></n-color-picker>
+        <n-color-picker size="small" :modes="['hex']" v-model:value="item.data[0].itemStyle.color"></n-color-picker>
       </SettingItem>
       <SettingItem name="阴影模糊等级">
-        <n-input-number v-model:value="item.data[0].itemStyle.shadowBlur" :min="0" :max="50" :step="1" size="small" placeholder="阴影模糊等级">
+        <n-input-number
+          v-model:value="item.data[0].itemStyle.shadowBlur"
+          :min="0"
+          :max="50"
+          :step="1"
+          size="small"
+          placeholder="阴影模糊等级"
+        >
         </n-input-number>
       </SettingItem>
       <SettingItem name="阴影颜色">
@@ -31,28 +34,32 @@
     <!-- 中心标题 -->
     <SettingItemBox v-if="config.title" name="标题">
       <SettingItem name="颜色">
-        <n-color-picker
-          size="small"
-          :modes="['hex']"
-          v-model:value="config.title.textStyle.color"
-        ></n-color-picker>
+        <n-color-picker size="small" :modes="['hex']" v-model:value="config.title.textStyle.color"></n-color-picker>
       </SettingItem>
       <SettingItem name="字体大小">
-        <n-input-number v-model:value="config.title.textStyle.fontSize" :min="0" :step="1" size="small" placeholder="字体大小">
+        <n-input-number
+          v-model:value="config.title.textStyle.fontSize"
+          :min="0"
+          :step="1"
+          size="small"
+          placeholder="字体大小"
+        >
         </n-input-number>
       </SettingItem>
     </SettingItemBox>
     <!-- 其他样式 -->
     <SettingItemBox name="轨道样式">
       <SettingItem name="颜色">
-        <n-color-picker
-          size="small"
-          :modes="['hex']"
-          v-model:value="item.data[1].itemStyle.color"
-        ></n-color-picker>
+        <n-color-picker size="small" :modes="['hex']" v-model:value="item.data[1].itemStyle.color"></n-color-picker>
       </SettingItem>
       <SettingItem name="阴影模糊等级">
-        <n-input-number v-model:value="item.data[1].itemStyle.shadowBlur" :min="0" :step="1" size="small" placeholder="阴影模糊等级">
+        <n-input-number
+          v-model:value="item.data[1].itemStyle.shadowBlur"
+          :min="0"
+          :step="1"
+          size="small"
+          placeholder="阴影模糊等级"
+        >
         </n-input-number>
       </SettingItem>
       <SettingItem name="阴影颜色">
@@ -69,11 +76,7 @@
 <script setup lang="ts">
 import { PropType, computed } from 'vue'
 // 以下是封装的设置模块布局组件,具体效果可在官网查看
-import {
-  CollapseItem,
-  SettingItemBox,
-  SettingItem
-} from '@/components/Pages/ChartItemSetting'
+import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
 import { GlobalThemeJsonType } from '@/settings/chartThemes'
 
 const props = defineProps({

+ 1 - 1
src/packages/components/Charts/Pies/PieCommon/config.vue

@@ -1,6 +1,6 @@
 <template>
   <!-- Echarts 全局设置 -->
-  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
+  <global-setting :optionData="optionData"></global-setting>
 </template>
 
 <script setup lang="ts">

+ 81 - 0
src/packages/components/Charts/Scatters/ScatterCommon/config.ts

@@ -0,0 +1,81 @@
+import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public'
+import { ScatterCommonConfig } from './index'
+import { CreateComponentType } from '@/packages/index.d'
+import cloneDeep from 'lodash/cloneDeep'
+import dataJson from './data.json'
+
+export const includes = ['legend', 'xAxis', 'yAxis']
+
+export const seriesItem = {
+  type: 'scatter',
+  emphasis: {
+    focus: 'series'
+  },
+  symbolSize: 12,
+  markArea: {
+    silent: true,
+    itemStyle: {
+      color: 'transparent',
+      borderWidth: 1,
+      borderType: 'dashed'
+    },
+    data: [
+      [
+        {
+          xAxis: 'min',
+          yAxis: 'min'
+        },
+        {
+          xAxis: 'max',
+          yAxis: 'max'
+        }
+      ]
+    ]
+  },
+  markPoint: {
+    symbol: 'pin',
+    symbolSize: 50,
+    data: [
+      { type: 'max', name: 'Max' },
+      { type: 'min', name: 'Min' }
+    ]
+  }
+}
+
+export const option = {
+  dataset: dataJson,
+  tooltip: {
+    showDelay: 0,
+    formatter: (params: { value: string | any[]; seriesName: string; name: string }) => {
+      // console.log(params)
+      return params.value.length > 1
+        ? `${params.seriesName}:<br />${params.value[0]} ${params.value[1]}`
+        : `${params.seriesName}:<br />${params.name} ${params.value}`
+    },
+    axisPointer: {
+      show: true,
+      type: 'cross',
+      lineStyle: {
+        type: 'dashed',
+        width: 1
+      }
+    }
+  },
+  xAxis: {
+    scale: true
+  },
+  yAxis: {
+    scale: true
+  },
+  series: dataJson.map((item, index) => ({
+    ...seriesItem,
+    datasetIndex: index
+  }))
+}
+
+export default class Config extends PublicConfigClass implements CreateComponentType {
+  public key = ScatterCommonConfig.key
+  public chartConfig = cloneDeep(ScatterCommonConfig)
+  // 图表配置项
+  public option = echartOptionProfixHandle(option, includes)
+}

+ 55 - 0
src/packages/components/Charts/Scatters/ScatterCommon/config.vue

@@ -0,0 +1,55 @@
+<template>
+  <!-- Echarts 全局设置 -->
+  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
+
+  <CollapseItem :name="`散点-${index + 1}`" expanded v-for="(item, index) in optionData.series" :key="index">
+    <SettingItemBox name="样式">
+      <SettingItem name="类型">
+        <n-select v-model:value="item.type" size="small" :options="ScatterEffectTypeEnumList" placeholder="选择" />
+      </SettingItem>
+      <SettingItem name="大小">
+        <n-input-number v-model:value="item.symbolSize" size="small" :min="1"></n-input-number>
+      </SettingItem>
+    </SettingItemBox>
+
+    <SettingItemBox name="标域">
+      <SettingItem name="粗细(0不显示)">
+        <n-input-number v-model:value="item.markArea.itemStyle.borderWidth" size="small" :min="0"></n-input-number>
+      </SettingItem>
+      <SettingItem name="符号">
+        <n-select
+          v-model:value="item.markArea.itemStyle.borderType"
+          size="small"
+          :options="axisConfig.splitLint.lineStyle.type"
+          placeholder="选择"
+        />
+      </SettingItem>
+    </SettingItemBox>
+
+    <SettingItemBox name="标点">
+      <SettingItem name="形状">
+        <n-select v-model:value="item.markPoint.symbol" size="small" :options="SymbolEnumList" placeholder="选择" />
+      </SettingItem>
+      <SettingItem name="大小">
+        <n-input-number v-model:value="item.markPoint.symbolSize" size="small" :min="0"></n-input-number>
+      </SettingItem>
+    </SettingItemBox>
+  </CollapseItem>
+</template>
+
+<script setup lang="ts">
+import { PropType } from 'vue'
+import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
+import { GlobalSetting, CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
+import { option } from './config'
+import { ScatterEffectTypeEnumList, SymbolEnumList } from '../shard'
+import { axisConfig } from '@/packages/chartConfiguration/echarts/index'
+
+// eslint-disable-next-line no-unused-vars
+const props = defineProps({
+  optionData: {
+    type: Object as PropType<GlobalThemeJsonType & typeof option>,
+    required: true
+  }
+})
+</script>

+ 110 - 0
src/packages/components/Charts/Scatters/ScatterCommon/data.json

@@ -0,0 +1,110 @@
+[
+  {
+    "dimensions": ["data1"],
+    "source": [
+      [161.2, 51.6],
+      [167.5, 59.0],
+      [159.5, 49.2],
+      [157.0, 63.0],
+      [155.8, 53.6],
+      [170.0, 59.0],
+      [159.1, 47.6],
+      [166.0, 69.8],
+      [176.2, 66.8],
+      [160.2, 75.2],
+      [172.5, 55.2],
+      [170.9, 54.2],
+      [172.9, 62.5],
+      [153.4, 42.0],
+      [160.0, 50.0],
+      [147.2, 49.8],
+      [168.2, 49.2],
+      [175.0, 73.2],
+      [157.0, 47.8],
+      [170.2, 72.8],
+      [174.0, 54.5],
+      [173.0, 59.8],
+      [179.9, 67.3],
+      [170.5, 67.8],
+      [160.0, 47.0],
+      [154.4, 46.2],
+      [162.0, 55.0],
+      [176.5, 83.0],
+      [160.0, 54.4],
+      [152.0, 45.8],
+      [162.1, 53.6],
+      [170.0, 73.2],
+      [160.2, 52.1],
+      [161.3, 67.9],
+      [166.4, 56.6],
+      [168.9, 62.3],
+      [163.8, 58.5],
+      [167.6, 54.5],
+      [160.0, 50.2],
+      [161.3, 60.3],
+      [167.6, 58.3],
+      [165.1, 56.2],
+      [160.0, 50.2],
+      [170.0, 72.9],
+      [157.5, 59.8],
+      [167.6, 61.0],
+      [160.7, 69.1],
+      [163.2, 55.9],
+      [152.4, 46.5],
+      [157.5, 54.3],
+      [168.3, 54.8],
+      [180.3, 60.7],
+      [165.5, 60.0],
+      [165.0, 62.0],
+      [164.5, 60.3],
+      [156.0, 52.7],
+      [160.0, 74.3]
+    ]
+  },
+  {
+    "dimensions": ["data2"],
+    "source": [
+      [174.0, 65.6],
+      [175.3, 71.8],
+      [193.5, 80.7],
+      [186.5, 72.6],
+      [187.2, 78.8],
+      [181.5, 74.8],
+      [184.0, 86.4],
+      [184.5, 78.4],
+      [175.0, 62.0],
+      [184.0, 81.6],
+      [180.0, 76.6],
+      [177.8, 83.6],
+      [192.0, 90.0],
+      [176.0, 74.6],
+      [174.0, 71.0],
+      [184.0, 79.6],
+      [192.7, 93.8],
+      [142.7, 93.8],
+      [152.7, 93.8],
+      [170.0, 61.3],
+      [177.8, 68.6],
+      [184.2, 80.1],
+      [186.7, 87.8],
+      [171.4, 84.7],
+      [172.7, 73.4],
+      [175.3, 72.1],
+      [180.3, 82.6],
+      [182.9, 88.7],
+      [188.0, 84.1],
+      [177.2, 94.1],
+      [172.1, 74.9],
+      [167.0, 59.1],
+      [169.5, 75.6],
+      [174.0, 86.2],
+      [172.7, 75.3],
+      [182.2, 87.1],
+      [164.1, 55.2],
+      [163.0, 57.0],
+      [171.5, 61.4],
+      [184.2, 76.8],
+      [174.0, 86.8]
+    ]
+  }
+]

+ 15 - 0
src/packages/components/Charts/Scatters/ScatterCommon/index.ts

@@ -0,0 +1,15 @@
+import image from '@/assets/images/chart/charts/scatter-multi.png'
+import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
+import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
+
+export const ScatterCommonConfig: ConfigType = {
+  key: 'ScatterCommon',
+  chartKey: 'VScatterCommon',
+  conKey: 'VCScatterCommon',
+  title: '散点图',
+  category: ChatCategoryEnum.SCATTER,
+  categoryName: ChatCategoryEnumName.SCATTER,
+  package: PackagesCategoryEnum.CHARTS,
+  chartFrame: ChartFrameEnum.ECHARTS,
+  image
+}

+ 90 - 0
src/packages/components/Charts/Scatters/ScatterCommon/index.vue

@@ -0,0 +1,90 @@
+<template>
+  <v-chart
+    ref="vChartRef"
+    :theme="themeColor"
+    :option="option"
+    :manual-update="isPreview()"
+    :update-options="{ replaceMerge: replaceMergeArr }"
+    autoresize
+  >
+  </v-chart>
+</template>
+
+<script setup lang="ts">
+import { PropType, computed, watch, ref, nextTick } from 'vue'
+import VChart from 'vue-echarts'
+import { use } from 'echarts/core'
+import { CanvasRenderer } from 'echarts/renderers'
+import { ScatterChart, EffectScatterChart } from 'echarts/charts'
+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 {
+  DatasetComponent,
+  GridComponent,
+  TooltipComponent,
+  LegendComponent,
+  MarkLineComponent,
+  MarkAreaComponent,
+  MarkPointComponent
+} from 'echarts/components'
+
+const props = defineProps({
+  themeSetting: {
+    type: Object,
+    required: true
+  },
+  themeColor: {
+    type: Object,
+    required: true
+  },
+  chartConfig: {
+    type: Object as PropType<config>,
+    required: true
+  }
+})
+
+use([
+  DatasetComponent,
+  CanvasRenderer,
+  ScatterChart,
+  EffectScatterChart,
+  GridComponent,
+  TooltipComponent,
+  LegendComponent,
+  MarkLineComponent,
+  MarkAreaComponent,
+  MarkPointComponent
+])
+
+const replaceMergeArr = ref<string[]>()
+
+const option = computed(() => {
+  return mergeTheme(props.chartConfig.option, props.themeSetting, includes)
+})
+
+// dataset 无法变更条数的补丁
+watch(
+  () => props.chartConfig.option.dataset,
+  (newData, oldData) => {
+    if (newData?.length !== oldData?.length) {
+      replaceMergeArr.value = ['series']
+      // eslint-disable-next-line vue/no-mutating-props
+      props.chartConfig.option.series = newData.map((item: { dimensions: any[] }, index: number) => ({
+        ...seriesItem,
+        datasetIndex: index
+      }))
+      nextTick(() => {
+        replaceMergeArr.value = []
+      })
+    }
+  },
+  {
+    deep: false
+  }
+)
+
+const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore)
+</script>

+ 93 - 0
src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/config.ts

@@ -0,0 +1,93 @@
+import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public'
+import { ScatterLogarithmicRegressionConfig } from './index'
+import { CreateComponentType } from '@/packages/index.d'
+import cloneDeep from 'lodash/cloneDeep'
+import dataJson from './data.json'
+
+export const includes = ['legend', 'xAxis', 'yAxis']
+
+export const option = {
+  dataset: dataJson,
+
+  tooltip: {
+    showDelay: 0,
+    formatter: (params: { value: string | any[]; seriesName: string; name: string }) => {
+      // console.log(params)
+      return params.value.length > 1
+        ? `${params.seriesName}:<br />${params.value[0]} ${params.value[1]}`
+        : `${params.seriesName}:<br />${params.name} ${params.value}`
+    },
+    axisPointer: {
+      show: true,
+      type: 'cross',
+      lineStyle: {
+        type: 'dashed',
+        width: 1
+      }
+    }
+  },
+
+  legend: {
+    data: dataJson
+      .filter(i => i?.transform?.type === 'filter' && i?.transform?.config?.eq)
+      .map(i => i.transform?.config?.eq?.toString())
+  },
+
+  xAxis: {
+    show: true,
+    type: 'value',
+    splitLine: {
+      lineStyle: {
+        type: 'dashed'
+      }
+    }
+  },
+  yAxis: {
+    show: true,
+    type: 'value',
+    splitLine: {
+      lineStyle: {
+        type: 'dashed'
+      }
+    }
+  },
+
+  visualMap: {
+    show: false,
+    dimension: 2,
+    min: 20000,
+    max: 1500000000,
+    seriesIndex: [0, 1],
+    inRange: {
+      symbolSize: [10, 70]
+    }
+  },
+
+  series: [
+    {
+      type: 'scatter',
+      datasetIndex: 1
+    },
+    {
+      type: 'scatter',
+      datasetIndex: 2
+    },
+    {
+      type: 'line',
+      smooth: true,
+      datasetIndex: 3,
+      symbolSize: 0.1,
+      symbol: 'circle',
+      label: { show: true, fontSize: 16 },
+      labelLayout: { dx: -20 },
+      encode: { label: 2, tooltip: 1 }
+    }
+  ]
+}
+
+export default class Config extends PublicConfigClass implements CreateComponentType {
+  public key = ScatterLogarithmicRegressionConfig.key
+  public chartConfig = cloneDeep(ScatterLogarithmicRegressionConfig)
+  // 图表配置项
+  public option = echartOptionProfixHandle(option, includes)
+}

+ 18 - 0
src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/config.vue

@@ -0,0 +1,18 @@
+<template>
+  <!-- Echarts 全局设置 -->
+  <global-setting :optionData="optionData" :in-chart="true"></global-setting>
+</template>
+
+<script setup lang="ts">
+import { PropType } from 'vue'
+import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
+import { GlobalSetting } from '@/components/Pages/ChartItemSetting'
+
+// eslint-disable-next-line no-unused-vars
+const props = defineProps({
+  optionData: {
+    type: Object as PropType<GlobalThemeJsonType>,
+    required: true
+  }
+})
+</script>

+ 64 - 0
src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/data.json

@@ -0,0 +1,64 @@
+[
+  {
+    "source": [
+      [28604, 77, 17096869, "Australia", 1990],
+      [31163, 77.4, 27662440, "Canada", 1990],
+      [1516, 68, 1154605773, "China", 1990],
+      [13670, 74.7, 10582082, "Cuba", 1990],
+      [28599, 75, 4986705, "Finland", 1990],
+      [29476, 77.1, 56943299, "France", 1990],
+      [31476, 75.4, 78958237, "Germany", 1990],
+      [28666, 78.1, 254830, "Iceland", 1990],
+      [1777, 57.7, 870601776, "India", 1990],
+      [29550, 79.1, 122249285, "Japan", 1990],
+      [2076, 67.9, 20194354, "North Korea", 1990],
+      [12087, 72, 42972254, "South Korea", 1990],
+      [24021, 75.4, 3397534, "New Zealand", 1990],
+      [43296, 76.8, 4240375, "Norway", 1990],
+      [10088, 70.8, 38195258, "Poland", 1990],
+      [19349, 69.6, 147568552, "Russia", 1990],
+      [10670, 67.3, 53994605, "Turkey", 1990],
+      [26424, 75.7, 57110117, "United Kingdom", 1990],
+      [37062, 75.4, 252847810, "United States", 1990],
+      [44056, 81.8, 23968973, "Australia", 2015],
+      [43294, 81.7, 35939927, "Canada", 2015],
+      [13334, 76.9, 1376048943, "China", 2015],
+      [21291, 78.5, 11389562, "Cuba", 2015],
+      [38923, 80.8, 5503457, "Finland", 2015],
+      [37599, 81.9, 64395345, "France", 2015],
+      [44053, 81.1, 80688545, "Germany", 2015],
+      [42182, 82.8, 329425, "Iceland", 2015],
+      [5903, 66.8, 1311050527, "India", 2015],
+      [36162, 83.5, 126573481, "Japan", 2015],
+      [1390, 71.4, 25155317, "North Korea", 2015],
+      [34644, 80.7, 50293439, "South Korea", 2015],
+      [34186, 80.6, 4528526, "New Zealand", 2015],
+      [64304, 81.6, 5210967, "Norway", 2015],
+      [24787, 77.3, 38611794, "Poland", 2015],
+      [23038, 73.13, 143456918, "Russia", 2015],
+      [19360, 76.5, 78665830, "Turkey", 2015],
+      [38225, 81.4, 64715810, "United Kingdom", 2015],
+      [53354, 79.1, 321773631, "United States", 2015]
+    ]
+  },
+  {
+    "transform": {
+      "type": "filter",
+      "config": { "dimension": 4, "eq": 1990 }
+    }
+  },
+  {
+    "transform": {
+      "type": "filter",
+      "config": { "dimension": 4, "eq": 2015 }
+    }
+  },
+  {
+    "transform": {
+      "type": "ecStat:regression",
+      "config": {
+        "method": "logarithmic"
+      }
+    }
+  }
+]

+ 15 - 0
src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/index.ts

@@ -0,0 +1,15 @@
+import image from '@/assets/images/chart/charts/scatter-logarithmic-regression.png'
+import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
+import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
+
+export const ScatterLogarithmicRegressionConfig: ConfigType = {
+  key: 'ScatterLogarithmicRegression',
+  chartKey: 'VScatterLogarithmicRegression',
+  conKey: 'VCScatterLogarithmicRegression',
+  title: '对数回归散点图',
+  category: ChatCategoryEnum.SCATTER,
+  categoryName: ChatCategoryEnumName.SCATTER,
+  package: PackagesCategoryEnum.CHARTS,
+  chartFrame: ChartFrameEnum.ECHARTS,
+  image
+}

+ 73 - 0
src/packages/components/Charts/Scatters/ScatterLogarithmicRegression/index.vue

@@ -0,0 +1,73 @@
+<template>
+  <v-chart
+    ref="vChartRef"
+    :theme="themeColor"
+    :option="option"
+    :manual-update="isPreview()"
+    :update-options="{ replaceMerge: replaceMergeArr }"
+    autoresize
+  >
+  </v-chart>
+</template>
+
+<script setup lang="ts">
+import { PropType, computed, ref } from 'vue'
+import VChart from 'vue-echarts'
+import ecStat from 'echarts-stat'
+import { use, registerTransform } from 'echarts/core'
+import { CanvasRenderer } from 'echarts/renderers'
+import { ScatterChart, LineChart } from 'echarts/charts'
+import { UniversalTransition, LabelLayout } from 'echarts/features'
+import config, { includes } from './config'
+import { mergeTheme } from '@/packages/public/chart'
+import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
+import { useChartDataFetch } from '@/hooks'
+import { isPreview } from '@/utils'
+import {
+  DatasetComponent,
+  GridComponent,
+  LegendComponent,
+  TooltipComponent,
+  TransformComponent,
+  VisualMapComponent
+} from 'echarts/components'
+
+const props = defineProps({
+  themeSetting: {
+    type: Object,
+    required: true
+  },
+  themeColor: {
+    type: Object,
+    required: true
+  },
+  chartConfig: {
+    type: Object as PropType<config>,
+    required: true
+  }
+})
+
+use([
+  DatasetComponent,
+  CanvasRenderer,
+  ScatterChart,
+  LineChart,
+  GridComponent,
+  LegendComponent,
+  TooltipComponent,
+  TransformComponent,
+  VisualMapComponent,
+  UniversalTransition,
+  LabelLayout
+])
+
+registerTransform((ecStat as any).transform.regression)
+
+const replaceMergeArr = ref<string[]>()
+
+const option = computed(() => {
+  return mergeTheme(props.chartConfig.option, props.themeSetting, includes)
+})
+
+const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore)
+</script>

+ 4 - 0
src/packages/components/Charts/Scatters/index.ts

@@ -0,0 +1,4 @@
+import { ScatterCommonConfig } from './ScatterCommon/index'
+import { ScatterLogarithmicRegressionConfig } from './ScatterLogarithmicRegression/index'
+
+export default [ScatterCommonConfig, ScatterLogarithmicRegressionConfig]

+ 15 - 0
src/packages/components/Charts/Scatters/shard.ts

@@ -0,0 +1,15 @@
+export const ScatterEffectTypeEnumList = [
+  { label: '普通', value: 'scatter' },
+  { label: '特效', value: 'effectScatter' }
+]
+
+export const SymbolEnumList = [
+  { label: '圆形', value: 'circle' },
+  { label: '正方形', value: 'rect' },
+  { label: '圆角正方形', value: 'roundRect' },
+  { label: '三角形', value: 'triangle' },
+  { label: '菱形', value: 'diamond' },
+  { label: '水滴', value: 'pin' },
+  { label: '箭头', value: 'arrow' },
+  { label: '无', value: 'none' }
+]

+ 4 - 1
src/packages/components/Charts/index.d.ts

@@ -1,7 +1,9 @@
+/* eslint-disable no-unused-vars */
 export enum ChatCategoryEnum {
   BAR = 'Bars',
   PIE = 'Pies',
   LINE = 'Lines',
+  SCATTER = 'Scatters',
   MAP = 'Maps',
   MORE = 'Mores'
 }
@@ -10,6 +12,7 @@ export enum ChatCategoryEnumName {
   BAR = '柱状图',
   PIE = '饼图',
   LINE = '折线图',
+  SCATTER = '散点图',
   MAP = '地图',
   MORE = '更多'
-}
+}

+ 2 - 1
src/packages/components/Charts/index.ts

@@ -1,7 +1,8 @@
 import Bars from './Bars'
 import Pies from './Pies'
 import Lines from './Lines'
+import Scatters from './Scatters'
 import Mores from './Mores'
 import Maps from './Maps'
 
-export const ChartList = [...Bars, ...Pies, ...Lines, ...Maps, ...Mores]
+export const ChartList = [...Bars, ...Lines, ...Pies, ...Scatters, ...Maps, ...Mores]

+ 2 - 1
src/packages/components/Tables/Tables/TableList/index.ts

@@ -1,5 +1,5 @@
 import image from '@/assets/images/chart/tables/tables_list.png'
-import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
+import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
 
 export const TableListConfig: ConfigType = {
@@ -10,5 +10,6 @@ export const TableListConfig: ConfigType = {
   category: ChatCategoryEnum.TABLE,
   categoryName: ChatCategoryEnumName.TABLE,
   package: PackagesCategoryEnum.TABLES,
+  chartFrame: ChartFrameEnum.COMMON,
   image
 }

+ 2 - 1
src/packages/components/Tables/Tables/TableScrollBoard/index.ts

@@ -1,5 +1,5 @@
 import image from '@/assets/images/chart/tables/table_scrollboard.png'
-import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
+import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
 
 export const TableScrollBoardConfig: ConfigType = {
@@ -10,5 +10,6 @@ export const TableScrollBoardConfig: ConfigType = {
   category: ChatCategoryEnum.TABLE,
   categoryName: ChatCategoryEnumName.TABLE,
   package: PackagesCategoryEnum.TABLES,
+  chartFrame: ChartFrameEnum.COMMON,
   image
 }

+ 1 - 0
src/settings/chartThemes/global.theme.json

@@ -26,6 +26,7 @@
     },
     "position": "bottom",
     "axisLine": {
+      "show": true,
       "lineStyle": {
         "color": "#B9B8CE",
         "width": 1

+ 3 - 1
src/settings/systemSetting.ts

@@ -13,5 +13,7 @@ export const systemSetting = {
   // 图表拖拽时的吸附距离(px)
   [SettingStoreEnums.CHART_ALIGN_RANGE]: 10,
   // 图表工具栏状态(侧边工具状态)
-  [SettingStoreEnums.CHART_TOOLS_STATUS]: ToolsStatusEnum.ASIDE
+  [SettingStoreEnums.CHART_TOOLS_STATUS]: ToolsStatusEnum.ASIDE,
+  // 图表工具栏状态隐藏(刚开始不隐藏)
+  [SettingStoreEnums.CHART_TOOLS_STATUS_HIDE]: false,
 }

+ 9 - 0
src/store/modules/settingStore/settingStore.d.ts

@@ -4,12 +4,20 @@ export enum ToolsStatusEnum {
 }
 
 export enum SettingStoreEnums {
+  // 拖拽页面左侧表单分类只有一项的时候是否隐藏
   HIDE_PACKAGE_ONE_CATEGORY = 'hidePackageOneCategory',
+  // 切换语言是否进行路由刷新
   CHANGE_LANG_RELOAD = 'changeLangReload',
+  // 侧边栏折叠是否隐藏全部
   ASIDE_ALL_COLLAPSED = 'asideAllCollapsed',
+  // 图表移动时按方向键移动的距离
   CHART_MOVE_DISTANCE = 'chartMoveDistance',
+  // 图表拖拽时的吸附距离(px)
   CHART_ALIGN_RANGE = 'chartAlignRange',
+  // 图表工具栏状态(侧边工具状态)
   CHART_TOOLS_STATUS = 'chartToolsStatus',
+  // 图表工具栏状态隐藏
+  CHART_TOOLS_STATUS_HIDE = 'chartToolsStatusHide'
 }
 
 export interface SettingStoreType {
@@ -19,4 +27,5 @@ export interface SettingStoreType {
   [SettingStoreEnums.CHART_MOVE_DISTANCE]: number
   [SettingStoreEnums.CHART_ALIGN_RANGE]: number
   [SettingStoreEnums.CHART_TOOLS_STATUS]: ToolsStatusEnum
+  [SettingStoreEnums.CHART_TOOLS_STATUS_HIDE]: boolean
 }

+ 4 - 1
src/store/modules/settingStore/settingStore.ts

@@ -35,7 +35,10 @@ export const useSettingStore = defineStore({
     },
     getChartToolsStatus(): ToolsStatusEnum {
       return this.chartToolsStatus
-    }
+    },
+    getChartToolsStatusHide(): boolean {
+      return this.chartToolsStatusHide
+    },
   },
   actions: {
     setItem<T extends keyof SettingStoreType, K extends SettingStoreType[T]>(

+ 24 - 2
src/views/chart/ContentCharts/components/ChartsItemBox/index.vue

@@ -8,6 +8,7 @@
       draggable
       @dragstart="dragStartHandle($event, item)"
       @dragend="dragendHandle"
+      @dblclick="dblclickHandle(item)"
     >
       <div class="list-header">
         <mac-os-control-btn :mini="true" :disabled="true"></mac-os-control-btn>
@@ -25,9 +26,10 @@ import { PropType } from 'vue'
 import { MacOsControlBtn } from '@/components/Tips/MacOsControlBtn/index'
 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
 import { EditCanvasTypeEnum } from '@/store/modules/chartEditStore/chartEditStore.d'
-import { componentInstall } from '@/utils'
+import { componentInstall, loadingStart, loadingFinish, loadingError } from '@/utils'
 import { DragKeyEnum } from '@/enums/editPageEnum'
-import { ConfigType } from '@/packages/index.d'
+import { createComponent } from '@/packages'
+import { ConfigType, CreateComponentType } from '@/packages/index.d'
 import { fetchConfigComponent, fetchChartComponent } from '@/packages/index'
 import omit from 'lodash/omit'
 const chartEditStore = useChartEditStore()
@@ -54,6 +56,26 @@ const dragStartHandle = (e: DragEvent, item: ConfigType) => {
 const dragendHandle = () => {
   chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_CREATE, false)
 }
+
+// 双击添加
+const dblclickHandle = async (item: ConfigType) => {
+  try {
+    loadingStart()
+    // 动态注册图表组件
+    componentInstall(item.chartKey, fetchChartComponent(item))
+    componentInstall(item.conKey, fetchConfigComponent(item))
+    // 创建新图表组件
+    let newComponent: CreateComponentType = await createComponent(item)
+    // 添加
+    chartEditStore.addComponentList(newComponent, false, true)
+    // 选中
+    chartEditStore.setTargetSelectChart(newComponent.id)
+    loadingFinish()
+  } catch (error) {
+    loadingError()
+    window['$message'].warning(`图表正在研发中, 敬请期待...`)
+  }
+}
 </script>
 
 <style lang="scss" scoped>

+ 22 - 17
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataAjax/index.vue

@@ -96,6 +96,7 @@ import { SelectHttpType } from '../../index.d'
 import { ChartDataMatchingAndShow } from '../ChartDataMatchingAndShow'
 import { useTargetData } from '../../../hooks/useTargetData.hook'
 import { isDev, newFunctionHandle } from '@/utils'
+import debounce from 'lodash/debounce'
 
 const { HelpOutlineIcon, FlashIcon, PulseIcon } = icon.ionicons5
 const { targetData, chartEditStore } = useTargetData()
@@ -123,23 +124,27 @@ const requestModelHandle = () => {
 }
 
 // 发送请求
-const sendHandle = async () => {
-  if(!targetData.value?.request) return
-  loading.value = true
-  try {
-    const res = await customizeHttp(toRaw(targetData.value.request), toRaw(chartEditStore.requestGlobalConfig))
-    loading.value = false
-    if (res && res.data) {
-      targetData.value.option.dataset = newFunctionHandle(res.data, targetData.value.filter)
-      showMatching.value = true
-      return
+const sendHandle = debounce(
+  async () => {
+    if (!targetData.value?.request) return
+    loading.value = true
+    try {
+      const res = await customizeHttp(toRaw(targetData.value.request), toRaw(chartEditStore.requestGlobalConfig))
+      loading.value = false
+      if (res && res.data) {
+        targetData.value.option.dataset = newFunctionHandle(res.data, targetData.value.filter)
+        showMatching.value = true
+        return
+      }
+      window['$message'].warning('数据异常,请检查参数!')
+    } catch (error) {
+      loading.value = false
+      window['$message'].warning('数据异常,请检查参数!')
     }
-    window['$message'].warning('数据异常,请检查参数!')
-  } catch (error) {
-    loading.value = false
-    window['$message'].warning('数据异常,请检查参数!')
-  }
-}
+  },
+  2000,
+  { leading: true }
+)
 
 // 颜色
 const themeColor = computed(() => {
@@ -152,7 +157,7 @@ watchEffect(() => {
     lastFilter = filter
     sendHandle()
   }
-  firstFocus ++
+  firstFocus++
 })
 
 onBeforeUnmount(() => {

+ 4 - 1
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index.vue

@@ -88,7 +88,7 @@ import { ChartDataMonacoEditor } from '../ChartDataMonacoEditor'
 import { useFile } from '../../hooks/useFile.hooks'
 import { useTargetData } from '../../../hooks/useTargetData.hook'
 import isObject from 'lodash/isObject'
-import { toString } from '@/utils'
+import { toString, isArray } from '@/utils'
 
 const { targetData } = useTargetData()
 const props = defineProps({
@@ -182,6 +182,9 @@ watch(
     } else {
       source.value = '此组件无数据源'
     }
+    if (isArray(newData)) {
+      dimensionsAndSource.value = null
+    }
   },
   {
     immediate: true

+ 11 - 2
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestTargetConfig/index.vue

@@ -71,7 +71,10 @@ import {
   numberIntUrl,
   textUrl,
   imageUrl,
-  radarUrl
+  radarUrl,
+  heatMapUrl,
+  scatterBasicUrl
+  
 } from '@/api/mock'
 
 const { HelpOutlineIcon } = icon.ionicons5
@@ -106,7 +109,13 @@ const apiList = [
   },
   {
     value: `【雷达】${radarUrl}`
-  }
+  },
+  {
+    value: `【热力图】${heatMapUrl}`
+  },
+  {
+    value: `【基础散点图】${scatterBasicUrl}`
+  },
 ]
 </script>
 

+ 62 - 40
src/views/chart/ContentEdit/components/EditTools/index.vue

@@ -1,38 +1,26 @@
 <template>
   <div
     class="go-chart-edit-tools"
-    :class="[
-      settingStore.getChartToolsStatus,
-      isMini ? 'isMini' : 'unMini',
-    ]"
+    :class="[settingStore.getChartToolsStatus, isMiniComputed ? 'isMini' : 'unMini']"
     @click="isMini && (isMini = false)"
     @mouseenter="toolsMouseoverHandle"
     @mouseleave="toolsMouseoutHandle"
   >
     <!-- PawIcon -->
-    <n-icon
-      v-show="settingStore.getChartToolsStatus === ToolsStatusEnum.ASIDE"
-      class="asideLogo"
-      size="22"
-    >
+    <n-icon v-show="settingStore.getChartToolsStatus === ToolsStatusEnum.ASIDE && isMiniComputed " class="asideLogo" size="22">
       <PawIcon></PawIcon>
     </n-icon>
 
     <n-tooltip
-      v-for="(item, index) in btnList"
+      v-for="(item, index) in btnListComputed"
       :key="item.key"
-      :disabled="!isAside || asideTootipDis"
+      :disabled="!isAside || (isHide && asideTootipDis)"
       trigger="hover"
       placement="left"
     >
       <template #trigger>
-        <div class="btn-item" :class="[btnList.length - 1 === index && 'go-111mt-0']">
-          <n-button
-            v-if="item.type === TypeEnum.BUTTON"
-            :circle="isAside"
-            secondary
-            @click="item.handle"
-          >
+        <div class="btn-item" :class="[btnList.length - 1 === index && 'go-mt-0']">
+          <n-button v-if="item.type === TypeEnum.BUTTON" :circle="isAside" secondary @click="item.handle">
             <template #icon>
               <n-icon size="22" v-if="isAside">
                 <component :is="item.icon"></component>
@@ -65,55 +53,89 @@
       <span>{{ item.name }}</span>
     </n-tooltip>
   </div>
+  <!-- 系统设置 model -->
+  <go-system-set v-model:modelShow="globalSettingModel"></go-system-set>
 </template>
 
 <script setup lang="ts">
-import { ref, computed } from 'vue';
+import { ref, computed, h } from 'vue'
 import { useSettingStore } from '@/store/modules/settingStore/settingStore'
 import { ToolsStatusEnum } from '@/store/modules/settingStore/settingStore.d'
+import { GoSystemSet } from '@/components/GoSystemSet/index'
 import { exportHandle } from './utils'
 import { useFile } from './hooks/useFile.hooks'
 import { BtnListType, TypeEnum } from './index.d'
 import { icon } from '@/plugins'
 
-const { DownloadIcon, ShareIcon, PawIcon } = icon.ionicons5
+const { DownloadIcon, ShareIcon, PawIcon, SettingsSharpIcon } = icon.ionicons5
 const settingStore = useSettingStore()
+
 // 鼠标悬停定时器
 let mouseTime: any = null
+// 系统设置 model
+const globalSettingModel = ref(false)
 // 最小化
 const isMini = ref<boolean>(true)
-// 是否是侧边栏
-const isAside = computed(() => settingStore.getChartToolsStatus === ToolsStatusEnum.ASIDE)
 // 控制 tootip 提示时机
 const asideTootipDis = ref(true)
 // 文件上传
 const { importUploadFileListRef, importCustomRequest, importBeforeUpload } = useFile()
+// 配置列表
+const btnList: BtnListType[] = [
+  {
+    key: 'export',
+    type: TypeEnum.BUTTON,
+    name: '导出',
+    icon: ShareIcon,
+    handle: exportHandle
+  },
+  {
+    key: 'import',
+    type: TypeEnum.IMPORTUPLOAD,
+    name: '导入',
+    icon: DownloadIcon
+  },
+  {
+    key: 'setting',
+    type: TypeEnum.BUTTON,
+    name: '设置',
+    icon: SettingsSharpIcon,
+    handle: () => {
+      globalSettingModel.value = true
+    }
+  }
+]
 
-const btnList: BtnListType[] = [{
-  key: 'import',
-  type: TypeEnum.IMPORTUPLOAD,
-  name: '导入',
-  icon: DownloadIcon,
-}, {
-  key: 'export',
-  type: TypeEnum.BUTTON,
-  name: '导出',
-  icon: ShareIcon,
-  handle: exportHandle
-}]
+// 是否是侧边栏
+const isAside = computed(() => settingStore.getChartToolsStatus === ToolsStatusEnum.ASIDE)
+// 是否隐藏(悬浮展示)
+const isHide = computed(() => settingStore.getChartToolsStatusHide)
+// 是否展示最小化(与全局配置相关)
+const isMiniComputed = computed(() => isMini.value && isHide.value)
+// 页面渲染配置
+const btnListComputed = computed(() => {
+  if (!isAside.value) return btnList
+  const reverseArr: BtnListType[] = []
+  btnList.map(item => {
+    reverseArr.unshift(item)
+  })
+  return reverseArr
+})
 
+// 鼠标移入
 const toolsMouseoverHandle = () => {
   mouseTime = setTimeout(() => {
     if (isMini.value) {
       isMini.value = false
       asideTootipDis.value = true
     }
-  }, 200);
+  }, 200)
   setTimeout(() => {
     asideTootipDis.value = false
   }, 400)
 }
 
+// 鼠标移出
 const toolsMouseoutHandle = () => {
   clearTimeout(mouseTime)
   if (!isMini.value) {
@@ -129,11 +151,11 @@ $dockBottom: 60px;
 $dockMiniWidth: 200px;
 $dockMiniBottom: 53px;
 
-$asideHeight: 90px;
+$asideHeight: 130px;
 $asideMiniHeight: 22px;
 $asideBottom: 70px;
 
-@include go("chart-edit-tools") {
+@include go('chart-edit-tools') {
   @extend .go-background-filter;
   position: absolute;
   display: flex;
@@ -142,7 +164,7 @@ $asideBottom: 70px;
   border-radius: 25px;
   border: 1px solid;
   mix-blend-mode: luminosity;
-  @include fetch-border-color("hover-border-color-shallow");
+  @include fetch-border-color('hover-border-color-shallow');
   &.aside {
     flex-direction: column-reverse;
     height: auto;
@@ -156,7 +178,7 @@ $asideBottom: 70px;
       @include deep() {
         .n-button__icon {
           margin-right: 4px;
-          margin-bottom: 14px;
+          margin-bottom: 12px;
         }
       }
     }
@@ -276,7 +298,7 @@ $asideBottom: 70px;
       }
     }
     &::after {
-      content: "";
+      content: '';
       position: absolute;
       left: 0;
       width: 100%;

+ 2 - 2
vite.config.ts

@@ -18,11 +18,11 @@ export default ({ mode }) => defineConfig({
     alias: [
       {
         find: /\/#\//,
-        replacement: pathResolve('types') + '/'
+        replacement: pathResolve('types')
       },
       {
         find: '@',
-        replacement: pathResolve('src') + '/'
+        replacement: pathResolve('src')
       }
     ],
     dedupe: ['vue']