@qxs-bns/components 0.0.55 → 0.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/es/index.mjs +1 -1
  2. package/es/index.mjs.map +1 -1
  3. package/es/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.8.3_/node_modules/@iconify/vue/dist/iconify.mjs +2 -0
  4. package/es/node_modules/.pnpm/{@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_ → @iconify_vue@5.0.0_vue@3.5.18_typescript@5.8.3_}/node_modules/@iconify/vue/dist/iconify.mjs.map +1 -1
  5. package/es/package.json.mjs +1 -1
  6. package/es/src/components.mjs +1 -1
  7. package/es/src/data-chart/src/analyze.mjs +1 -1
  8. package/es/src/data-chart/src/analyze.mjs.map +1 -1
  9. package/es/src/data-chart/src/components/area.vue2.mjs +1 -1
  10. package/es/src/data-chart/src/components/area.vue2.mjs.map +1 -1
  11. package/es/src/data-chart/src/components/bar.vue.mjs +1 -1
  12. package/es/src/data-chart/src/components/bar.vue.mjs.map +1 -1
  13. package/es/src/data-chart/src/components/card.vue2.mjs +1 -1
  14. package/es/src/data-chart/src/components/card.vue2.mjs.map +1 -1
  15. package/es/src/data-chart/src/components/data-chart-card-bg-left.svg.mjs.map +1 -1
  16. package/es/src/data-chart/src/components/data-chart-card-bg-right.svg.mjs.map +1 -1
  17. package/es/src/data-chart/src/components/empty.svg.mjs.map +1 -1
  18. package/es/src/data-chart/src/components/empty.vue.mjs.map +1 -1
  19. package/es/src/data-chart/src/components/funnel.vue.mjs +1 -1
  20. package/es/src/data-chart/src/components/funnel.vue.mjs.map +1 -1
  21. package/es/src/data-chart/src/components/line.vue2.mjs +1 -1
  22. package/es/src/data-chart/src/components/line.vue2.mjs.map +1 -1
  23. package/es/src/data-chart/src/components/pie.vue.mjs +1 -1
  24. package/es/src/data-chart/src/components/pie.vue.mjs.map +1 -1
  25. package/es/src/data-chart/src/components/radar.vue.mjs +1 -1
  26. package/es/src/data-chart/src/components/radar.vue.mjs.map +1 -1
  27. package/es/src/data-chart/src/components/scatter-simple.vue.mjs +1 -1
  28. package/es/src/data-chart/src/components/scatter-simple.vue.mjs.map +1 -1
  29. package/es/src/data-chart/src/components/scatter.vue.mjs +1 -1
  30. package/es/src/data-chart/src/components/scatter.vue.mjs.map +1 -1
  31. package/es/src/data-chart/src/components/table.vue.mjs +1 -1
  32. package/es/src/data-chart/src/components/table.vue.mjs.map +1 -1
  33. package/es/src/data-chart/src/data-chart.vue.mjs +1 -1
  34. package/es/src/data-chart/src/data-chart.vue.mjs.map +1 -1
  35. package/es/src/data-chart/src/utils/config.mjs +1 -1
  36. package/es/src/data-chart/src/utils/config.mjs.map +1 -1
  37. package/es/src/data-chart/src/utils/mapData.mjs +2 -0
  38. package/es/src/data-chart/src/utils/mapData.mjs.map +1 -0
  39. package/es/src/data-chart/src/utils/safe-eval.mjs.map +1 -1
  40. package/es/src/data-chart/src/utils/useCharts.mjs +1 -1
  41. package/es/src/data-chart/src/utils/useCharts.mjs.map +1 -1
  42. package/es/src/defaults.mjs.map +1 -1
  43. package/es/src/file-upload/src/file-upload.vue.mjs +1 -1
  44. package/es/src/file-upload/src/file-upload.vue.mjs.map +1 -1
  45. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs +1 -1
  46. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs.map +1 -1
  47. package/es/src/icon/index.mjs +1 -1
  48. package/es/src/icon/index.mjs.map +1 -1
  49. package/es/src/icon/src/icon.vue.mjs +1 -1
  50. package/es/src/icon/src/icon.vue.mjs.map +1 -1
  51. package/es/src/image-upload/src/image-upload.vue.mjs +1 -1
  52. package/es/src/image-upload/src/image-upload.vue.mjs.map +1 -1
  53. package/es/src/make-installer.mjs.map +1 -1
  54. package/es/src/photo-crop-tool/src/composables.mjs +1 -1
  55. package/es/src/photo-crop-tool/src/composables.mjs.map +1 -1
  56. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs +1 -1
  57. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs.map +1 -1
  58. package/es/src/subject-action/src/subject-action.vue.mjs +1 -1
  59. package/es/src/subject-action/src/subject-action.vue.mjs.map +1 -1
  60. package/es/src/subject-layout/src/subject-layout.vue.mjs.map +1 -1
  61. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs +1 -1
  62. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs.map +1 -1
  63. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs +1 -1
  64. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs.map +1 -1
  65. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs +1 -1
  66. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs.map +1 -1
  67. package/es/src/subject-list/src/components/subject-scale.vue.mjs +1 -1
  68. package/es/src/subject-list/src/components/subject-scale.vue.mjs.map +1 -1
  69. package/es/src/subject-list/src/components/subject-single.vue.mjs +1 -1
  70. package/es/src/subject-list/src/components/subject-single.vue.mjs.map +1 -1
  71. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs +1 -1
  72. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs.map +1 -1
  73. package/es/src/subject-list/src/subject-list.vue.mjs +1 -1
  74. package/es/src/subject-list/src/subject-list.vue.mjs.map +1 -1
  75. package/es/src/subject-type/src/subject-type.vue.mjs +1 -1
  76. package/es/src/subject-type/src/subject-type.vue.mjs.map +1 -1
  77. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs +1 -1
  78. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs.map +1 -1
  79. package/es/src/withInstall.mjs.map +1 -1
  80. package/lib/index.cjs +1 -1
  81. package/lib/index.cjs.map +1 -1
  82. package/lib/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.8.3_/node_modules/@iconify/vue/dist/iconify.cjs +2 -0
  83. package/lib/node_modules/.pnpm/{@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_ → @iconify_vue@5.0.0_vue@3.5.18_typescript@5.8.3_}/node_modules/@iconify/vue/dist/iconify.cjs.map +1 -1
  84. package/lib/package.json.cjs +1 -1
  85. package/lib/src/components.cjs +1 -1
  86. package/lib/src/data-chart/index.cjs.map +1 -1
  87. package/lib/src/data-chart/src/analyze.cjs +1 -1
  88. package/lib/src/data-chart/src/analyze.cjs.map +1 -1
  89. package/lib/src/data-chart/src/components/area.vue2.cjs +1 -1
  90. package/lib/src/data-chart/src/components/area.vue2.cjs.map +1 -1
  91. package/lib/src/data-chart/src/components/bar.vue.cjs +1 -1
  92. package/lib/src/data-chart/src/components/bar.vue.cjs.map +1 -1
  93. package/lib/src/data-chart/src/components/card.vue2.cjs +1 -1
  94. package/lib/src/data-chart/src/components/card.vue2.cjs.map +1 -1
  95. package/lib/src/data-chart/src/components/empty.vue.cjs.map +1 -1
  96. package/lib/src/data-chart/src/components/funnel.vue.cjs +1 -1
  97. package/lib/src/data-chart/src/components/funnel.vue.cjs.map +1 -1
  98. package/lib/src/data-chart/src/components/line.vue2.cjs +1 -1
  99. package/lib/src/data-chart/src/components/line.vue2.cjs.map +1 -1
  100. package/lib/src/data-chart/src/components/pie.vue.cjs +1 -1
  101. package/lib/src/data-chart/src/components/pie.vue.cjs.map +1 -1
  102. package/lib/src/data-chart/src/components/radar.vue.cjs +1 -1
  103. package/lib/src/data-chart/src/components/radar.vue.cjs.map +1 -1
  104. package/lib/src/data-chart/src/components/scatter-simple.vue.cjs +1 -1
  105. package/lib/src/data-chart/src/components/scatter-simple.vue.cjs.map +1 -1
  106. package/lib/src/data-chart/src/components/scatter.vue.cjs +1 -1
  107. package/lib/src/data-chart/src/components/scatter.vue.cjs.map +1 -1
  108. package/lib/src/data-chart/src/components/table.vue.cjs +1 -1
  109. package/lib/src/data-chart/src/components/table.vue.cjs.map +1 -1
  110. package/lib/src/data-chart/src/data-chart.vue.cjs +1 -1
  111. package/lib/src/data-chart/src/data-chart.vue.cjs.map +1 -1
  112. package/lib/src/data-chart/src/utils/config.cjs +1 -1
  113. package/lib/src/data-chart/src/utils/config.cjs.map +1 -1
  114. package/lib/src/data-chart/src/utils/mapData.cjs +2 -0
  115. package/lib/src/data-chart/src/utils/mapData.cjs.map +1 -0
  116. package/lib/src/data-chart/src/utils/safe-eval.cjs.map +1 -1
  117. package/lib/src/data-chart/src/utils/useCharts.cjs +1 -1
  118. package/lib/src/data-chart/src/utils/useCharts.cjs.map +1 -1
  119. package/lib/src/defaults.cjs.map +1 -1
  120. package/lib/src/file-upload/index.cjs.map +1 -1
  121. package/lib/src/file-upload/src/file-upload.vue.cjs +1 -1
  122. package/lib/src/file-upload/src/file-upload.vue.cjs.map +1 -1
  123. package/lib/src/fixed-action-bar/index.cjs.map +1 -1
  124. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs +1 -1
  125. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs.map +1 -1
  126. package/lib/src/icon/index.cjs +1 -1
  127. package/lib/src/icon/index.cjs.map +1 -1
  128. package/lib/src/icon/src/icon.vue.cjs +1 -1
  129. package/lib/src/icon/src/icon.vue.cjs.map +1 -1
  130. package/lib/src/image-upload/index.cjs.map +1 -1
  131. package/lib/src/image-upload/src/image-upload.vue.cjs +1 -1
  132. package/lib/src/image-upload/src/image-upload.vue.cjs.map +1 -1
  133. package/lib/src/make-installer.cjs.map +1 -1
  134. package/lib/src/photo-crop-tool/index.cjs.map +1 -1
  135. package/lib/src/photo-crop-tool/src/composables.cjs +1 -1
  136. package/lib/src/photo-crop-tool/src/composables.cjs.map +1 -1
  137. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs +1 -1
  138. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs.map +1 -1
  139. package/lib/src/subject-action/index.cjs.map +1 -1
  140. package/lib/src/subject-action/src/subject-action.vue.cjs +1 -1
  141. package/lib/src/subject-action/src/subject-action.vue.cjs.map +1 -1
  142. package/lib/src/subject-layout/index.cjs.map +1 -1
  143. package/lib/src/subject-layout/src/subject-layout.vue.cjs.map +1 -1
  144. package/lib/src/subject-list/index.cjs.map +1 -1
  145. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs +1 -1
  146. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs.map +1 -1
  147. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs +1 -1
  148. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs.map +1 -1
  149. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs +1 -1
  150. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs.map +1 -1
  151. package/lib/src/subject-list/src/components/subject-scale.vue.cjs +1 -1
  152. package/lib/src/subject-list/src/components/subject-scale.vue.cjs.map +1 -1
  153. package/lib/src/subject-list/src/components/subject-single.vue.cjs +1 -1
  154. package/lib/src/subject-list/src/components/subject-single.vue.cjs.map +1 -1
  155. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs +1 -1
  156. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs.map +1 -1
  157. package/lib/src/subject-list/src/subject-list.vue.cjs +1 -1
  158. package/lib/src/subject-list/src/subject-list.vue.cjs.map +1 -1
  159. package/lib/src/subject-type/index.cjs.map +1 -1
  160. package/lib/src/subject-type/src/subject-type.vue.cjs +1 -1
  161. package/lib/src/subject-type/src/subject-type.vue.cjs.map +1 -1
  162. package/lib/src/tiny-mce-editor/index.cjs.map +1 -1
  163. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs +1 -1
  164. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs.map +1 -1
  165. package/lib/src/withInstall.cjs.map +1 -1
  166. package/package.json +3 -2
  167. package/types/src/components.d.ts +1 -1
  168. package/types/src/components.d.ts.map +1 -1
  169. package/types/src/data-chart/src/components/area.vue.d.ts.map +1 -1
  170. package/types/src/data-chart/src/utils/config.d.ts.map +1 -1
  171. package/types/src/data-chart/src/utils/mapData.d.ts +64 -0
  172. package/types/src/data-chart/src/utils/mapData.d.ts.map +1 -0
  173. package/types/src/data-chart/src/utils/types.d.ts +4 -0
  174. package/types/src/data-chart/src/utils/types.d.ts.map +1 -1
  175. package/types/src/data-chart/src/utils/useCharts.d.ts +3 -4
  176. package/types/src/data-chart/src/utils/useCharts.d.ts.map +1 -1
  177. package/types/src/fixed-action-bar/index.d.ts +1 -1
  178. package/types/src/fixed-action-bar/src/fixed-action-bar.vue.d.ts +1 -1
  179. package/types/src/fixed-action-bar/src/fixed-action-bar.vue.d.ts.map +1 -1
  180. package/types/src/icon/index.d.ts +3 -3
  181. package/types/src/icon/index.d.ts.map +1 -1
  182. package/types/src/image-upload/index.d.ts +3 -2
  183. package/types/src/image-upload/index.d.ts.map +1 -1
  184. package/types/src/image-upload/src/image-upload.vue.d.ts +2 -80
  185. package/types/src/image-upload/src/image-upload.vue.d.ts.map +1 -1
  186. package/types/src/subject-layout/index.d.ts +5 -3
  187. package/types/src/subject-layout/index.d.ts.map +1 -1
  188. package/types/src/subject-layout/src/subject-layout.vue.d.ts +2 -24
  189. package/types/src/subject-layout/src/subject-layout.vue.d.ts.map +1 -1
  190. package/types/src/tiny-mce-editor/index.d.ts.map +1 -1
  191. package/types/tsconfig.tsbuildinfo +1 -1
  192. package/es/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_/node_modules/@iconify/vue/dist/iconify.mjs +0 -2
  193. package/lib/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.13_typescript@5.8.2_/node_modules/@iconify/vue/dist/iconify.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.mjs","sources":["../../../../../../packages/components/src/data-chart/src/analyze.ts"],"sourcesContent":["import type { EChartData } from './utils/types'\n\n// 根据路径获取对象的值\nexport function getObjectValue(obj: any, pathArr: string[]) {\n return pathArr?.reduce((acc, key) => (acc ? acc[key] : undefined), obj)\n}\n\n// 谁 是什么 的分析\ninterface IHandlerFunction {\n handler?: ({ sourceData, dealJson }: { sourceData: EChartData['data'], dealJson: any }) => string | number\n dealOptSchema?: {\n label: string\n cascaderProps: {\n value: string\n label: string\n }\n select: any[]\n interactionType?: 'select' | 'input'\n }[]\n}\nexport interface IkeysMap {\n [key: string]: IHandlerFunction | IkeysMap\n}\nexport const keysMap: IkeysMap = {\n 描述性分析: {\n 平均值: {\n handler: ({ sourceData, dealJson }) => {\n const { dealKey } = dealJson\n const sortedData = sourceData.sort((a, b) => Number(b[dealKey]) - Number(a[dealKey]))\n const average = (sortedData.reduce((a, b) => a + Number(b[dealKey]), 0) / sortedData.length).toFixed(2)\n return average || ''\n },\n },\n 中位数: {\n dealOptSchema: [{\n label: '目标值类型',\n cascaderProps: { value: 'label', label: 'label' },\n select: [{\n label: '值',\n }, {\n label: '名字',\n }],\n interactionType: 'select',\n }],\n handler: ({ sourceData, dealJson }) => {\n const { dealKey, source, dealOpt } = dealJson\n const targetKeyPath = dealOpt['目标值类型']?.keyPath\n const sortedData = sourceData.sort((a, b) => Number(b[dealKey]) - Number(a[dealKey]))\n return sortedData[Math.floor(sortedData.length / 2)][targetKeyPath === '值' ? dealKey : targetKeyPath === '名字' ? source : ''] || ''\n },\n },\n 排序: {\n dealOptSchema: [\n {\n label: '排序方式',\n cascaderProps: { value: 'label', label: 'label' },\n select: [{\n label: '默认',\n children: [{\n label: '第几名',\n valueVerify: {\n type: 'number',\n default: 1,\n },\n }, {\n label: '范围',\n valueVerify: {\n type: 'number[]',\n default: [1, 2],\n },\n }],\n }, {\n label: '升序',\n children: [{\n label: '第几名',\n valueVerify: {\n type: 'number',\n default: 1,\n },\n }, {\n label: '范围',\n valueVerify: {\n type: 'number[]',\n default: [1, 2],\n },\n }],\n }, {\n label: '降序',\n children: [{\n label: '第几名',\n valueVerify: {\n type: 'number',\n default: 1,\n },\n }, {\n label: '范围',\n valueVerify: {\n type: 'number[]',\n default: [1, 2],\n },\n }],\n }],\n interactionType: 'input',\n }, {\n label: '目标值类型',\n cascaderProps: { value: 'label', label: 'label' },\n select: [{\n label: '值',\n }, {\n label: '占比',\n }, {\n label: '名字',\n }],\n interactionType: 'select',\n },\n ],\n handler: ({ sourceData, dealJson }) => {\n const { dealKey, source, dealOpt } = dealJson\n\n let formatStr: number | string = ''\n const targetKeyPath = dealOpt['目标值类型'].keyPath\n // 根据value排序,target为第几名\n let sortedData = []\n if (dealOpt['排序方式'].keyPath.includes('默认')) {\n sortedData = sourceData\n }\n else {\n sortedData = sourceData.sort((a, b) => {\n if (dealOpt['排序方式'].keyPath.includes('升序')) {\n return Number(a[dealKey]) - Number(b[dealKey])\n }\n else if (dealOpt['排序方式'].keyPath.includes('降序')) {\n return Number(b[dealKey]) - Number(a[dealKey])\n }\n return 0\n })\n }\n\n if (dealOpt['排序方式'].keyPath.includes('第几名')) {\n const target = sortedData[dealOpt['排序方式'].value - 1] || {}\n // 处理目标值key\n const formatStrKey = targetKeyPath === '值' ? dealKey : targetKeyPath === '名字' ? source : targetKeyPath === '占比' ? dealKey : ''\n\n // 处理目标值\n if (dealOpt['目标值类型'].keyPath.includes('占比')) {\n const sum = sortedData.reduce((a, b) => a + Number(b[formatStrKey]), 0)\n formatStr = target[formatStrKey] ? `${(Number(target[formatStrKey]) / sum * 100).toFixed(2)}%` : ''\n }\n else {\n formatStr = target[formatStrKey] || ''\n }\n // formatStr = target[targetKeyPath === '值' ? dealKey : targetKeyPath === '名字' ? source : '']\n }\n else if (dealOpt['排序方式'].keyPath.includes('范围')) {\n const target = sortedData.slice(dealOpt['排序方式'].value[0] - 1, dealOpt['排序方式'].value[1])\n formatStr = target.map(item => item[targetKeyPath === '值' ? dealKey : targetKeyPath === '名字' ? source : '']).join('、').replace(/、([^、]+)$/, '和$1')\n }\n\n return formatStr || ''\n },\n },\n },\n 趋势分析: {\n 整体趋势: {\n handler: ({ sourceData, dealJson }) => {\n const data = sourceData.map(item => item[dealJson.dealKey])\n const length = data.length\n\n // 计算线性回归\n let sumX = 0\n let sumY = 0\n let sumXY = 0\n let sumX2 = 0\n\n for (let i = 0; i < length; i++) {\n sumX += i\n sumY += Number(data[i])\n sumXY += i * Number(data[i])\n sumX2 += i * i\n }\n\n const slope = (length * sumXY - sumX * sumY) / (length * sumX2 - sumX * sumX)\n\n // 判断趋势类型\n if (slope > 0) {\n return '增长'\n }\n else if (slope < 0) {\n return '下降'\n }\n else {\n return '平稳'\n }\n },\n },\n // '分段趋势': ({ sourceData, dealJson }) => {\n // // 分析数据的趋势分段分析,分为上升、下降、平稳, 例如:某一段时间内,数据整体上升,但是在某一段时间内,数据下降,这段时间内的数据就是分段趋势\n // const { dealKey, source } = dealJson\n // const sortedData = sourceData.sort((a, b) => b[dealKey] - a[dealKey])\n // const trend = []\n // for (let i = 0; i < sortedData.length - 1; i++) {\n // const firstValue = sortedData[i][source]\n // const lastValue = sortedData[i + 1][source]\n // const changePercentage = ((lastValue - firstValue) / firstValue * 100).toFixed(2)\n // if (changePercentage > 0) {\n // trend.push('上升')\n // } else if (changePercentage < 0) {\n // trend.push('下降')\n // } else {\n // trend.push('平稳')\n // }\n // }\n // const trendMap = {\n // '上升': 0,\n // '下降': 0,\n // '平稳': 0\n // }\n // trend.forEach(item => {\n // trendMap[item]++\n // })\n // const trendArr = Object.entries(trendMap).sort((a, b) => b[1] - a[1])\n // return `数据分段趋势为${trendArr[0][0]}。`\n // }\n },\n // '比例分析': {\n // '占比': ({ sourceData, dealJson }) => {\n // const { dealKey } = dealJson\n // const sortedData = sourceData.sort((a, b) => b[dealKey] - a[dealKey])\n // const sum = sortedData.reduce((a, b) => a + b[dealKey], 0)\n // const percentage = (sortedData[0][dealKey] / sum * 100).toFixed(2)\n // return `${percentage}%。`\n // }\n // '环比占比': {\n // handler: chartOptions => {\n // const data = chartOptions.series[0].data\n // const sum = data.reduce((a, b) => a + b)\n // const percentage = (data[0] / sum * 100).toFixed(2)\n // return `数据环比占比为${percentage}%。`\n // }\n // },\n // '同比占比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const sum = data.reduce((a, b) => a + b)\n // const percentage = (data[0] / sum * 100).toFixed(2)\n // return `数据同比占比为${percentage}%。`\n // }\n // }\n // '对比分析': {\n // '分组对比': {\n // dealOptSchema: [\n // {\n // label: '排序方式',\n // cascaderProps: { value: 'label', label: 'label' },\n // select: [{\n // label: '默认',\n // children: [{\n // label: '第几名',\n // valueVerify: {\n // type: 'number',\n // default: 1\n // }\n // }, {\n // label: '范围',\n // valueVerify: {\n // type: 'number[]',\n // default: [1, 2]\n // }\n // }]\n // }, {\n // label: '升序',\n // children: [{\n // label: '第几名',\n // valueVerify: {\n // type: 'number',\n // default: 1\n // }\n // }, {\n // label: '范围',\n // valueVerify: {\n // type: 'number[]',\n // default: [1, 2]\n // }\n // }]\n // }, {\n // label: '降序',\n // children: [{\n // label: '第几名',\n // valueVerify: {\n // type: 'number',\n // default: 1\n // }\n // }, {\n // label: '范围',\n // valueVerify: {\n // type: 'number[]',\n // default: [1, 2]\n // }\n // }]\n // }],\n // interactionType: 'input'\n // }, {\n // label: '目标值类型',\n // cascaderProps: { value: 'label', label: 'label' },\n // select: [{\n // label: '值'\n // }, {\n // label: '名字'\n // }],\n // interactionType: 'select'\n // }\n // ],\n // handler({sourceData, dealJson}) {\n // console.log('sourceData, dealJson: ', sourceData, dealJson)\n\n // }\n // },\n // '环比对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const firstValue = data[0]\n // const lastValue = data[data.length - 1]\n // const trend = lastValue > firstValue ? '上升' : '下降'\n // const changePercentage = ((lastValue - firstValue) / firstValue * 100).toFixed(2)\n // return `数据环比${trend},变化率为${changePercentage}%。`\n // },\n // '同比对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const firstValue = data[0]\n // const lastValue = data[data.length - 1]\n // const trend = lastValue > firstValue ? '上升' : '下降'\n // const changePercentage = ((lastValue - firstValue) / firstValue * 100).toFixed(2)\n // return `数据同比${trend},变化率为${changePercentage}%。`\n // },\n // '最大值对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const max = Math.max(...data)\n // return `数据最大值为${max}。`\n // },\n // '最小值对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const min = Math.min(...data)\n // return `数据最小值为${min}。`\n // },\n // '平均值对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // return `数据平均值为${average}。`\n // },\n // '中位数对比': ({sourceData, dealJson}) => {\n // const { dealKey, source } = dealJson\n // const sortedData = sourceData.sort((a, b) => b[dealKey] - a[dealKey])\n // return sortedData[Math.floor(sortedData.length / 2)][source]\n // },\n // '众数对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const mode = data.sort((a, b) =>\n // data.filter(v => v === a).length - data.filter(v => v === b).length\n // ).pop()\n // return `数据众数为${mode}。`\n // },\n // '标准差对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n // return `数据标准差为${standardDeviation}。`\n // },\n // '方差对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const variance = data.reduce((a, b) => a + (b - average) ** 2) / data.length\n // return `数据方差为${variance}。`\n // },\n // '偏度对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n // const skewness = data.reduce((a, b) => a + ((b - average) / standardDeviation) ** 3) / data.length\n // return `数据偏度为${skewness}。`\n // },\n // '峰度对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n // const kurtosis = data.reduce((a, b) => a + ((b - average) / standardDeviation) ** 4) / data.length\n // return `数据峰度为${kurtosis}。`\n // },\n // '波动率对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n // const volatility = (standardDeviation / average * 100).toFixed(2)\n // return `数据波动率为${volatility}%。`\n // },\n // '变异系数对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n\n // const coefficientOfVariation = (standardDeviation / average * 100).toFixed(2)\n // return `数据变异系数为${coefficientOfVariation}%。`\n // },\n // '数据分布对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n\n // const coefficientOfVariation = (standardDeviation / average * 100).toFixed(2)\n\n // const mode = data.sort((a, b) =>\n // data.filter(v => v === a).length - data.filter(v => v === b).length\n // ).pop()\n\n // const median = data[Math.floor(data.length / 2)]\n\n // const max = Math.max(...data)\n\n // const min = Math.min(...data)\n // return `数据平均值为${average},标准差为${standardDeviation},变异系数为${coefficientOfVariation}%,众数为${mode},中位数为${median},最大值为${max},最小值为${min}。`\n // }\n // },\n // '相关分析': {\n // handler: ({sourceData, dealJson}) => {\n // console.log('sourceData, dealJson: ', sourceData, dealJson)\n\n // function calculatePearsonCorrelation(dataX, dataY) {\n // if (dataX.length !== dataY.length) {\n // throw new Error('数据长度不一致,无法计算皮尔逊相关系数。')\n // }\n\n // const n = dataX.length\n\n // // 计算平均值\n // const meanX = dataX.reduce((sum, value) => sum + value, 0) / n\n // const meanY = dataY.reduce((sum, value) => sum + value, 0) / n\n\n // // 计算 xi - x̄ 和 yi - ȳ 的数组\n // const diffX = dataX.map(x => x - meanX)\n // const diffY = dataY.map(y => y - meanY)\n\n // // 计算 xi - x̄ 和 yi - ȳ 的平方和\n // const sumDiffX = diffX.reduce((sum, value) => sum + value ** 2, 0)\n // const sumDiffY = diffY.reduce((sum, value) => sum + value ** 2, 0)\n\n // // 计算 xi - x̄ 和 yi - ȳ 的乘积和\n // const sumDiffXY = diffX.reduce((sum, value, index) => sum + value * diffY[index], 0)\n\n // // 计算皮尔逊相关系数\n // const correlation = sumDiffXY / Math.sqrt(sumDiffX * sumDiffY)\n\n // return correlation\n // }\n // function determineCorrelation(dataX, dataY) {\n // const correlation = calculatePearsonCorrelation(dataX, dataY)\n\n // if (correlation > 0.7) {\n // return '强正相关'\n // } else if (correlation > 0.3) {\n // return '较弱正相关'\n // } else if (correlation > -0.3) {\n // return '无线性相关性'\n // } else if (correlation > -0.7) {\n // return '较弱负相关'\n // } else {\n // return '强负相关'\n // }\n // }\n // let dataX = []\n // let dataY = []\n // const correlation = determineCorrelation(dataX, dataY)\n // console.log('两个变量之间的关系:', correlation)\n // return correlation\n // }\n // }\n // '假设探索性分析': {},\n // '机器学习和数据挖掘': {}\n}\n"],"names":["getObjectValue","obj","pathArr","reduce","acc","key","keysMap","描述性分析","平均值","handler","_ref","sourceData","dealJson","dealKey","sortedData","sort","a","b","Number","length","toFixed","中位数","dealOptSchema","label","cascaderProps","value","select","interactionType","_ref2","source","dealOpt","targetKeyPath","keyPath","Math","floor","排序","children","valueVerify","type","default","_ref3","formatStr","includes","target","formatStrKey","sum","slice","map","item","join","replace","趋势分析","整体趋势","_ref4","data","sumX","sumY","sumXY","sumX2","i","slope"],"mappings":"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"}
1
+ {"version":3,"file":"analyze.mjs","sources":["../../../../../../packages/components/src/data-chart/src/analyze.ts"],"sourcesContent":["import type { EChartData } from './utils/types'\n\n// 根据路径获取对象的值\nexport function getObjectValue(obj: any, pathArr: string[]) {\n return pathArr?.reduce((acc, key) => (acc ? acc[key] : undefined), obj)\n}\n\n// 谁 是什么 的分析\ninterface IHandlerFunction {\n handler?: ({ sourceData, dealJson }: { sourceData: EChartData['data'], dealJson: any }) => string | number\n dealOptSchema?: {\n label: string\n cascaderProps: {\n value: string\n label: string\n }\n select: any[]\n interactionType?: 'select' | 'input'\n }[]\n}\nexport interface IkeysMap {\n [key: string]: IHandlerFunction | IkeysMap\n}\nexport const keysMap: IkeysMap = {\n 描述性分析: {\n 平均值: {\n handler: ({ sourceData, dealJson }) => {\n const { dealKey } = dealJson\n const sortedData = sourceData.sort((a, b) => Number(b[dealKey]) - Number(a[dealKey]))\n const average = (sortedData.reduce((a, b) => a + Number(b[dealKey]), 0) / sortedData.length).toFixed(2)\n return average || ''\n },\n },\n 中位数: {\n dealOptSchema: [{\n label: '目标值类型',\n cascaderProps: { value: 'label', label: 'label' },\n select: [{\n label: '值',\n }, {\n label: '名字',\n }],\n interactionType: 'select',\n }],\n handler: ({ sourceData, dealJson }) => {\n const { dealKey, source, dealOpt } = dealJson\n const targetKeyPath = dealOpt['目标值类型']?.keyPath\n const sortedData = sourceData.sort((a, b) => Number(b[dealKey]) - Number(a[dealKey]))\n return sortedData[Math.floor(sortedData.length / 2)][targetKeyPath === '值' ? dealKey : targetKeyPath === '名字' ? source : ''] || ''\n },\n },\n 排序: {\n dealOptSchema: [\n {\n label: '排序方式',\n cascaderProps: { value: 'label', label: 'label' },\n select: [{\n label: '默认',\n children: [{\n label: '第几名',\n valueVerify: {\n type: 'number',\n default: 1,\n },\n }, {\n label: '范围',\n valueVerify: {\n type: 'number[]',\n default: [1, 2],\n },\n }],\n }, {\n label: '升序',\n children: [{\n label: '第几名',\n valueVerify: {\n type: 'number',\n default: 1,\n },\n }, {\n label: '范围',\n valueVerify: {\n type: 'number[]',\n default: [1, 2],\n },\n }],\n }, {\n label: '降序',\n children: [{\n label: '第几名',\n valueVerify: {\n type: 'number',\n default: 1,\n },\n }, {\n label: '范围',\n valueVerify: {\n type: 'number[]',\n default: [1, 2],\n },\n }],\n }],\n interactionType: 'input',\n }, {\n label: '目标值类型',\n cascaderProps: { value: 'label', label: 'label' },\n select: [{\n label: '值',\n }, {\n label: '占比',\n }, {\n label: '名字',\n }],\n interactionType: 'select',\n },\n ],\n handler: ({ sourceData, dealJson }) => {\n const { dealKey, source, dealOpt } = dealJson\n\n let formatStr: number | string = ''\n const targetKeyPath = dealOpt['目标值类型'].keyPath\n // 根据value排序,target为第几名\n let sortedData = []\n if (dealOpt['排序方式'].keyPath.includes('默认')) {\n sortedData = sourceData\n }\n else {\n sortedData = sourceData.sort((a, b) => {\n if (dealOpt['排序方式'].keyPath.includes('升序')) {\n return Number(a[dealKey]) - Number(b[dealKey])\n }\n else if (dealOpt['排序方式'].keyPath.includes('降序')) {\n return Number(b[dealKey]) - Number(a[dealKey])\n }\n return 0\n })\n }\n\n if (dealOpt['排序方式'].keyPath.includes('第几名')) {\n const target = sortedData[dealOpt['排序方式'].value - 1] || {}\n // 处理目标值key\n const formatStrKey = targetKeyPath === '值' ? dealKey : targetKeyPath === '名字' ? source : targetKeyPath === '占比' ? dealKey : ''\n\n // 处理目标值\n if (dealOpt['目标值类型'].keyPath.includes('占比')) {\n const sum = sortedData.reduce((a, b) => a + Number(b[formatStrKey]), 0)\n formatStr = target[formatStrKey] ? `${(Number(target[formatStrKey]) / sum * 100).toFixed(2)}%` : ''\n }\n else {\n formatStr = target[formatStrKey] || ''\n }\n // formatStr = target[targetKeyPath === '值' ? dealKey : targetKeyPath === '名字' ? source : '']\n }\n else if (dealOpt['排序方式'].keyPath.includes('范围')) {\n const target = sortedData.slice(dealOpt['排序方式'].value[0] - 1, dealOpt['排序方式'].value[1])\n formatStr = target.map(item => item[targetKeyPath === '值' ? dealKey : targetKeyPath === '名字' ? source : '']).join('、').replace(/、([^、]+)$/, '和$1')\n }\n\n return formatStr || ''\n },\n },\n },\n 趋势分析: {\n 整体趋势: {\n handler: ({ sourceData, dealJson }) => {\n const data = sourceData.map(item => item[dealJson.dealKey])\n const length = data.length\n\n // 计算线性回归\n let sumX = 0\n let sumY = 0\n let sumXY = 0\n let sumX2 = 0\n\n for (let i = 0; i < length; i++) {\n sumX += i\n sumY += Number(data[i])\n sumXY += i * Number(data[i])\n sumX2 += i * i\n }\n\n const slope = (length * sumXY - sumX * sumY) / (length * sumX2 - sumX * sumX)\n\n // 判断趋势类型\n if (slope > 0) {\n return '增长'\n }\n else if (slope < 0) {\n return '下降'\n }\n else {\n return '平稳'\n }\n },\n },\n // '分段趋势': ({ sourceData, dealJson }) => {\n // // 分析数据的趋势分段分析,分为上升、下降、平稳, 例如:某一段时间内,数据整体上升,但是在某一段时间内,数据下降,这段时间内的数据就是分段趋势\n // const { dealKey, source } = dealJson\n // const sortedData = sourceData.sort((a, b) => b[dealKey] - a[dealKey])\n // const trend = []\n // for (let i = 0; i < sortedData.length - 1; i++) {\n // const firstValue = sortedData[i][source]\n // const lastValue = sortedData[i + 1][source]\n // const changePercentage = ((lastValue - firstValue) / firstValue * 100).toFixed(2)\n // if (changePercentage > 0) {\n // trend.push('上升')\n // } else if (changePercentage < 0) {\n // trend.push('下降')\n // } else {\n // trend.push('平稳')\n // }\n // }\n // const trendMap = {\n // '上升': 0,\n // '下降': 0,\n // '平稳': 0\n // }\n // trend.forEach(item => {\n // trendMap[item]++\n // })\n // const trendArr = Object.entries(trendMap).sort((a, b) => b[1] - a[1])\n // return `数据分段趋势为${trendArr[0][0]}。`\n // }\n },\n // '比例分析': {\n // '占比': ({ sourceData, dealJson }) => {\n // const { dealKey } = dealJson\n // const sortedData = sourceData.sort((a, b) => b[dealKey] - a[dealKey])\n // const sum = sortedData.reduce((a, b) => a + b[dealKey], 0)\n // const percentage = (sortedData[0][dealKey] / sum * 100).toFixed(2)\n // return `${percentage}%。`\n // }\n // '环比占比': {\n // handler: chartOptions => {\n // const data = chartOptions.series[0].data\n // const sum = data.reduce((a, b) => a + b)\n // const percentage = (data[0] / sum * 100).toFixed(2)\n // return `数据环比占比为${percentage}%。`\n // }\n // },\n // '同比占比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const sum = data.reduce((a, b) => a + b)\n // const percentage = (data[0] / sum * 100).toFixed(2)\n // return `数据同比占比为${percentage}%。`\n // }\n // }\n // '对比分析': {\n // '分组对比': {\n // dealOptSchema: [\n // {\n // label: '排序方式',\n // cascaderProps: { value: 'label', label: 'label' },\n // select: [{\n // label: '默认',\n // children: [{\n // label: '第几名',\n // valueVerify: {\n // type: 'number',\n // default: 1\n // }\n // }, {\n // label: '范围',\n // valueVerify: {\n // type: 'number[]',\n // default: [1, 2]\n // }\n // }]\n // }, {\n // label: '升序',\n // children: [{\n // label: '第几名',\n // valueVerify: {\n // type: 'number',\n // default: 1\n // }\n // }, {\n // label: '范围',\n // valueVerify: {\n // type: 'number[]',\n // default: [1, 2]\n // }\n // }]\n // }, {\n // label: '降序',\n // children: [{\n // label: '第几名',\n // valueVerify: {\n // type: 'number',\n // default: 1\n // }\n // }, {\n // label: '范围',\n // valueVerify: {\n // type: 'number[]',\n // default: [1, 2]\n // }\n // }]\n // }],\n // interactionType: 'input'\n // }, {\n // label: '目标值类型',\n // cascaderProps: { value: 'label', label: 'label' },\n // select: [{\n // label: '值'\n // }, {\n // label: '名字'\n // }],\n // interactionType: 'select'\n // }\n // ],\n // handler({sourceData, dealJson}) {\n // console.log('sourceData, dealJson: ', sourceData, dealJson)\n\n // }\n // },\n // '环比对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const firstValue = data[0]\n // const lastValue = data[data.length - 1]\n // const trend = lastValue > firstValue ? '上升' : '下降'\n // const changePercentage = ((lastValue - firstValue) / firstValue * 100).toFixed(2)\n // return `数据环比${trend},变化率为${changePercentage}%。`\n // },\n // '同比对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const firstValue = data[0]\n // const lastValue = data[data.length - 1]\n // const trend = lastValue > firstValue ? '上升' : '下降'\n // const changePercentage = ((lastValue - firstValue) / firstValue * 100).toFixed(2)\n // return `数据同比${trend},变化率为${changePercentage}%。`\n // },\n // '最大值对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const max = Math.max(...data)\n // return `数据最大值为${max}。`\n // },\n // '最小值对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const min = Math.min(...data)\n // return `数据最小值为${min}。`\n // },\n // '平均值对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // return `数据平均值为${average}。`\n // },\n // '中位数对比': ({sourceData, dealJson}) => {\n // const { dealKey, source } = dealJson\n // const sortedData = sourceData.sort((a, b) => b[dealKey] - a[dealKey])\n // return sortedData[Math.floor(sortedData.length / 2)][source]\n // },\n // '众数对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const mode = data.sort((a, b) =>\n // data.filter(v => v === a).length - data.filter(v => v === b).length\n // ).pop()\n // return `数据众数为${mode}。`\n // },\n // '标准差对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n // return `数据标准差为${standardDeviation}。`\n // },\n // '方差对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const variance = data.reduce((a, b) => a + (b - average) ** 2) / data.length\n // return `数据方差为${variance}。`\n // },\n // '偏度对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n // const skewness = data.reduce((a, b) => a + ((b - average) / standardDeviation) ** 3) / data.length\n // return `数据偏度为${skewness}。`\n // },\n // '峰度对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n // const kurtosis = data.reduce((a, b) => a + ((b - average) / standardDeviation) ** 4) / data.length\n // return `数据峰度为${kurtosis}。`\n // },\n // '波动率对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n // const volatility = (standardDeviation / average * 100).toFixed(2)\n // return `数据波动率为${volatility}%。`\n // },\n // '变异系数对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n\n // const coefficientOfVariation = (standardDeviation / average * 100).toFixed(2)\n // return `数据变异系数为${coefficientOfVariation}%。`\n // },\n // '数据分布对比': chartOptions => {\n // const data = chartOptions.series[0].data\n // const average = (data.reduce((a, b) => a + b) / data.length).toFixed(2)\n\n // const standardDeviation = Math.sqrt(data.reduce((a, b) => a + (b - average) ** 2) / data.length).toFixed(2)\n\n // const coefficientOfVariation = (standardDeviation / average * 100).toFixed(2)\n\n // const mode = data.sort((a, b) =>\n // data.filter(v => v === a).length - data.filter(v => v === b).length\n // ).pop()\n\n // const median = data[Math.floor(data.length / 2)]\n\n // const max = Math.max(...data)\n\n // const min = Math.min(...data)\n // return `数据平均值为${average},标准差为${standardDeviation},变异系数为${coefficientOfVariation}%,众数为${mode},中位数为${median},最大值为${max},最小值为${min}。`\n // }\n // },\n // '相关分析': {\n // handler: ({sourceData, dealJson}) => {\n // console.log('sourceData, dealJson: ', sourceData, dealJson)\n\n // function calculatePearsonCorrelation(dataX, dataY) {\n // if (dataX.length !== dataY.length) {\n // throw new Error('数据长度不一致,无法计算皮尔逊相关系数。')\n // }\n\n // const n = dataX.length\n\n // // 计算平均值\n // const meanX = dataX.reduce((sum, value) => sum + value, 0) / n\n // const meanY = dataY.reduce((sum, value) => sum + value, 0) / n\n\n // // 计算 xi - x̄ 和 yi - ȳ 的数组\n // const diffX = dataX.map(x => x - meanX)\n // const diffY = dataY.map(y => y - meanY)\n\n // // 计算 xi - x̄ 和 yi - ȳ 的平方和\n // const sumDiffX = diffX.reduce((sum, value) => sum + value ** 2, 0)\n // const sumDiffY = diffY.reduce((sum, value) => sum + value ** 2, 0)\n\n // // 计算 xi - x̄ 和 yi - ȳ 的乘积和\n // const sumDiffXY = diffX.reduce((sum, value, index) => sum + value * diffY[index], 0)\n\n // // 计算皮尔逊相关系数\n // const correlation = sumDiffXY / Math.sqrt(sumDiffX * sumDiffY)\n\n // return correlation\n // }\n // function determineCorrelation(dataX, dataY) {\n // const correlation = calculatePearsonCorrelation(dataX, dataY)\n\n // if (correlation > 0.7) {\n // return '强正相关'\n // } else if (correlation > 0.3) {\n // return '较弱正相关'\n // } else if (correlation > -0.3) {\n // return '无线性相关性'\n // } else if (correlation > -0.7) {\n // return '较弱负相关'\n // } else {\n // return '强负相关'\n // }\n // }\n // let dataX = []\n // let dataY = []\n // const correlation = determineCorrelation(dataX, dataY)\n // console.log('两个变量之间的关系:', correlation)\n // return correlation\n // }\n // }\n // '假设探索性分析': {},\n // '机器学习和数据挖掘': {}\n}\n"],"names":["getObjectValue","obj","pathArr","reduce","acc","key","keysMap","描述性分析","平均值","handler","_ref","sourceData","dealJson","dealKey","sortedData","sort","a","b","Number","length","toFixed","中位数","dealOptSchema","label","cascaderProps","value","select","interactionType","_ref2","source","dealOpt","targetKeyPath","keyPath","Math","floor","排序","children","valueVerify","type","default","_ref3","formatStr","includes","target","formatStrKey","sum","slice","map","item","join","replace","趋势分析","整体趋势","_ref4","data","sumX","sumY","sumXY","sumX2","i","slope"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,inject as a,ref as t,computed as r,createElementBlock as n,openBlock as s,createCommentVNode as o,createElementVNode as c}from"vue";import*as i from"echarts";import{getGeoJsonData as l}from"../utils/config.mjs";import{InjectionChartMerge as m}from"../utils/injectionKeys.mjs";import{useCharts as u}from"../utils/useCharts.mjs";const p={class:"data-chart-area-wrap"};var d=e({name:"DataChartArea",__name:"area",props:{chartOptions:{type:null,required:!0},chartData:{type:Object,required:!1,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})}},setup(e){const d=a(m,(e=>e),!0);let h="中国";const f=t({features:[],type:"FeatureCollection"}),D=t(null);let v=null;const y=r((()=>{const{xGroupByDesc:a,groupByDesc:t,colDesc:r,modelName:n,data:s}=e.chartData,o=[];r.forEach((e=>{s.forEach((a=>{o.push(Number(a[e]))}))}));const c={title:{text:n},tooltip:{formatter(e){let a=`${e.name}<br/>`;return c.series?.forEach((t=>{t.data?.forEach((r=>{r.name===e.name&&(a+=`${t.name}:${r.value}</br>`)})),a.includes(t.name)||(a+=`${t.name}:-</br>`)})),a}},visualMap:{min:Math.min(...o,0),max:Math.max(...o,0)},series:r?.map((e=>{const r=[],n=t.find((e=>e.colDesc===("中国"===h?"医院所在省":"医院所在市"))),o={};s.map((t=>{const r=t[("中国"===h?a?.colDesc||"":n?.colDesc)||""],s=f.value.features?.find((({properties:{name:e}})=>e?.includes(r)));return{name:s?.properties?.name||"",value:Number(t[e])}})).forEach((e=>{o[e.name]?o[e.name]=o[e.name]+e.value:o[e.name]=e.value}));for(const e in o)r.push({name:e,value:o[e]});return{name:e,type:"map",map:h,data:r}}))};return d(c,e.chartOptions)}));async function g(e="中国"){if(v&&!v.isDisposed()){v.showLoading();try{const a=await l({adcode:e});if(!a)return void v.hideLoading();f.value=a,h=e;const t=i.registerMap(e,a);return v.hideLoading(),t}catch(e){console.log(e),v.hideLoading()}}}return u({chartDOM:D,chartOptions:y,chartData:r((()=>e.chartData)),initAfter:async function(){await g(),v&&!v.isDisposed()&&(v.getZr()?.on("click",(e=>{e.target||"中国"===h||g("中国")})),v.on("click",(a=>{const t=e.chartData.groupByDesc?.some((e=>"医院所在市"===e.colDesc));"中国"===h&&t&&g(a.name).then((()=>{v&&!v.isDisposed()&&v.setOption(y.value)}))})))},callback:e=>{v=e}}),(e,a)=>(s(),n("div",p,[o(' <el-select\n v-if="isShowSelect"\n v-model="adcode"\n class="city-select"\n size="small"\n @change="selectChina"\n >\n <el-option\n v-for="item in selectList"\n :key="item.value"\n :label="item.label"\n :value="item.value"\n />\n </el-select> '),c("div",{ref_key:"dataChartArea",ref:D,class:"data-chart-area"},null,512)]))}});export{d as default};
1
+ import{defineComponent as e,inject as a,ref as t,computed as r,createElementBlock as o,openBlock as n,createCommentVNode as s,createElementVNode as c}from"vue";import*as i from"echarts";import{getGeoJsonData as l}from"../utils/config.mjs";import{InjectionChartMerge as m}from"../utils/injectionKeys.mjs";import{useCharts as u}from"../utils/useCharts.mjs";const p={class:"data-chart-area-wrap"};var d=e({name:"DataChartArea",__name:"area",props:{chartOptions:{type:null,required:!0},chartData:{type:Object,required:!1,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})}},setup(e){const d=a(m,e=>e,!0);let h="中国";const f=t({features:[],type:"FeatureCollection"}),v=t(null),D=t(null),y=r(()=>{try{const{xGroupByDesc:a,groupByDesc:t,colDesc:r,modelName:o,data:n}=e.chartData,s=[];r.forEach(e=>{n.forEach(a=>{s.push(Number(a[e]))})});const c={title:{text:o},tooltip:{formatter(e){let a=`${e.name}<br/>`;return c.series?.forEach(t=>{t.data?.forEach(r=>{r.name===e.name&&(a+=`${t.name}:${r.value}</br>`)}),a.includes(t.name)||(a+=`${t.name}:-</br>`)}),a}},visualMap:{min:Math.min(...s,0),max:Math.max(...s,0)},series:r?.map(e=>{const r=[],o=t.find(e=>e.colDesc===("中国"===h?"医院所在省":"医院所在市")),s={};n.map(t=>{const r=t[("中国"===h?a?.colDesc||"":o?.colDesc)||""],n=f.value.features?.find(({properties:{name:e}})=>e?.includes(r));return{name:n?.properties?.name||"",value:Number(t[e])}}).forEach(e=>{s[e.name]?s[e.name]=s[e.name]+e.value:s[e.name]=e.value});for(const e in s)r.push({name:e,value:s[e]});return{name:e,type:"map",map:h,data:r}})};return d(c,e.chartOptions)}catch(e){return console.error("Error computing area chart options:",e),{title:{text:"地图加载失败"},series:[]}}});async function g(e="中国"){try{const a=await l({adcode:e});return a&&a.features&&0!==a.features.length?(f.value=a,h=e,void i.registerMap(e,a)):void console.error("Invalid GeoJSON data for:",e)}catch(a){if(console.error("Failed to register map for:",e,a),"中国"!==e)return console.log("Falling back to China map"),g("中国")}}return u({chartDOM:D,chartOptions:y,chartData:r(()=>e.chartData),initAfter:async function(a){v.value=a;try{await g(),a&&!a.isDisposed()&&(a.getZr()?.on("click",e=>{a?.showLoading(),e.target||"中国"===h||g("中国"),a.hideLoading()}),a.on("click",t=>{a?.showLoading();const r=e.chartData.groupByDesc?.some(e=>"医院所在市"===e.colDesc);"中国"===h&&r&&t.name&&g(t.name).then(()=>{a&&!a.isDisposed()&&a.setOption(y.value)}),a?.hideLoading()}))}catch(e){if(console.error("Failed to initialize map:",e),a&&!a.isDisposed())try{await g("中国")}catch(e){console.error("Failed to retry map registration:",e)}}}}),(e,a)=>(n(),o("div",p,[s(' <el-select\n v-if="isShowSelect"\n v-model="adcode"\n class="city-select"\n size="small"\n @change="selectChina"\n >\n <el-option\n v-for="item in selectList"\n :key="item.value"\n :label="item.label"\n :value="item.value"\n />\n </el-select> '),c("div",{ref_key:"dataChartArea",ref:D,class:"data-chart-area"},null,512)]))}});export{d as default};
2
2
  //# sourceMappingURL=area.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"area.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/area.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ECharts } from 'echarts/types/dist/echarts'\nimport type { EChartsOption, GeoJson, IFormatPublicData } from '../utils/types'\nimport * as echarts from 'echarts'\nimport { getGeoJsonData } from '../utils/config'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\ndefineOptions({\n name: 'DataChartArea',\n})\n\nconst {\n chartOptions,\n chartData = {\n colDesc: [],\n xGroupByDesc: {\n colDesc: '',\n groupByDesc: '',\n groupByValues: [],\n xAxis: false,\n },\n groupByDesc: [],\n data: [],\n modelName: '',\n },\n} = defineProps<{\n chartOptions: EChartsOption\n chartData?: IFormatPublicData\n}>()\n\nconst merge = inject(InjectionChartMerge, (v: any) => v, true)\n\nlet adcode = '中国'\nconst currentGeoJson = ref<GeoJson>({\n features: [],\n type: 'FeatureCollection',\n})\nconst dataChartArea = ref(null)\nlet myChart: ECharts | null = null\n\nconst areaChartOptions = computed<EChartsOption>(() => {\n const { xGroupByDesc, groupByDesc, colDesc, modelName, data } = chartData\n const allNums: number[] = []\n colDesc.forEach((item) => {\n data.forEach((dataItem) => {\n allNums.push(Number(dataItem[item]))\n })\n })\n const config = {\n title: {\n text: modelName,\n },\n tooltip: {\n formatter(params: { name: string }) {\n let res = `${params.name}<br/>`\n config.series?.forEach((colDescItem) => {\n colDescItem.data?.forEach((item) => {\n if (item.name === params.name) {\n res += `${colDescItem.name}:${item.value}</br>`\n }\n })\n if (!res.includes(colDescItem.name)) {\n res += `${colDescItem.name}:-</br>`\n }\n })\n return res\n },\n },\n visualMap: {\n min: Math.min(...allNums, 0),\n max: Math.max(...allNums, 0),\n },\n series: colDesc?.map((colDescItem) => {\n const seriesData = []\n const row = groupByDesc.find(item => item.colDesc === (adcode === '中国' ? '医院所在省' : '医院所在市'))\n // 先用省份数据,如果没有再用市级数据\n\n const arr: {\n [key: string]: number\n } = {}\n data.map((item) => {\n const sourceName = item[(adcode === '中国' ? (xGroupByDesc?.colDesc || '') : row?.colDesc) || '']\n const find = currentGeoJson.value.features?.find(({ properties: { name } }: { properties: { name?: string } }) => name?.includes(sourceName as string))\n return {\n name: find?.properties?.name || '',\n value: Number(item[colDescItem]),\n }\n }).forEach((item) => {\n if (!arr[item.name]) {\n arr[item.name] = item.value\n }\n else {\n arr[item.name] = arr[item.name] + item.value\n }\n })\n for (const key in arr) {\n seriesData.push({\n name: key,\n value: arr[key],\n })\n }\n return {\n name: colDescItem,\n type: 'map',\n map: adcode,\n data: seriesData,\n }\n }),\n }\n\n return merge(config, chartOptions)\n})\n\nasync function initAfter() {\n await registerMap()\n // 添加判断,确保图表实例存在且未被销毁\n if (myChart && !myChart.isDisposed()) {\n // charts 监听事件\n myChart.getZr()?.on('click', (params: { target: HTMLElement }) => {\n if (!params.target && adcode !== '中国') {\n registerMap('中国')\n }\n })\n myChart.on('click', (params: { name: string }) => {\n const flag = chartData.groupByDesc?.some(item => item.colDesc === '医院所在市')\n\n if (adcode === '中国' && flag) {\n registerMap(params.name).then(() => {\n if (myChart && !myChart.isDisposed()) {\n myChart.setOption(areaChartOptions.value)\n }\n })\n }\n })\n }\n}\n// function selectChina() {\n// registerMap(adcode)\n// }\nasync function registerMap(keyword = '中国') {\n if (!myChart || myChart.isDisposed()) {\n return\n }\n\n myChart.showLoading()\n try {\n const geoJson = await getGeoJsonData({ adcode: keyword })\n if (!geoJson) {\n myChart.hideLoading() // 添加加载状态的清除\n return\n }\n currentGeoJson.value = geoJson\n adcode = keyword\n\n const result = echarts.registerMap(keyword, geoJson as any)\n myChart.hideLoading() // 添加加载状态的清除\n return result\n }\n catch (error) {\n console.log(error)\n myChart.hideLoading() // 添加加载状态的清除\n }\n}\nuseCharts({\n chartDOM: dataChartArea,\n chartOptions: areaChartOptions,\n chartData: computed(() => chartData),\n initAfter,\n callback: (chart) => {\n myChart = chart\n },\n})\n</script>\n\n<template>\n <div class=\"data-chart-area-wrap\">\n <!-- <el-select\n v-if=\"isShowSelect\"\n v-model=\"adcode\"\n class=\"city-select\"\n size=\"small\"\n @change=\"selectChina\"\n >\n <el-option\n v-for=\"item in selectList\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select> -->\n <div\n ref=\"dataChartArea\"\n class=\"data-chart-area\"\n />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-area-wrap {\n position: relative;\n\n .city-select {\n position: absolute;\n top: 10px;\n right: 100px;\n z-index: 1;\n width: 120px;\n }\n\n .data-chart-area {\n height: 100%;\n }\n}\n</style>\n"],"names":["merge","inject","InjectionChartMerge","v","adcode","currentGeoJson","ref","features","type","dataChartArea","myChart","areaChartOptions","computed","xGroupByDesc","groupByDesc","colDesc","modelName","data","__props","chartData","allNums","forEach","item","dataItem","push","Number","config","title","text","tooltip","formatter","params","res","name","series","colDescItem","value","includes","visualMap","min","Math","max","map","seriesData","row","find","arr","sourceName","properties","key","chartOptions","async","registerMap","keyword","isDisposed","showLoading","geoJson","getGeoJsonData","hideLoading","result","echarts","error","console","log","useCharts","chartDOM","initAfter","getZr","on","target","flag","some","then","setOption","callback","chart"],"mappings":"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"}
1
+ {"version":3,"file":"area.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/area.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ECharts } from 'echarts/types/dist/echarts'\nimport type { EChartsOption, GeoJson, IFormatPublicData } from '../utils/types'\nimport * as echarts from 'echarts'\nimport { getGeoJsonData } from '../utils/config'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\ndefineOptions({\n name: 'DataChartArea',\n})\n\nconst {\n chartOptions,\n chartData = {\n colDesc: [],\n xGroupByDesc: {\n colDesc: '',\n groupByDesc: '',\n groupByValues: [],\n xAxis: false,\n },\n groupByDesc: [],\n data: [],\n modelName: '',\n },\n} = defineProps<{\n chartOptions: EChartsOption\n chartData?: IFormatPublicData\n}>()\n\nconst merge = inject(InjectionChartMerge, (v: any) => v, true)\n\nlet adcode = '中国'\nconst currentGeoJson = ref<GeoJson>({\n features: [],\n type: 'FeatureCollection',\n})\nconst myChart = ref<ECharts | null>(null)\nconst dataChartArea = ref(null)\n\nconst areaChartOptions = computed<EChartsOption>(() => {\n try {\n const { xGroupByDesc, groupByDesc, colDesc, modelName, data } = chartData\n const allNums: number[] = []\n colDesc.forEach((item) => {\n data.forEach((dataItem) => {\n allNums.push(Number(dataItem[item]))\n })\n })\n const config = {\n title: {\n text: modelName,\n },\n tooltip: {\n formatter(params: { name: string }) {\n let res = `${params.name}<br/>`\n config.series?.forEach((colDescItem) => {\n colDescItem.data?.forEach((item) => {\n if (item.name === params.name) {\n res += `${colDescItem.name}:${item.value}</br>`\n }\n })\n if (!res.includes(colDescItem.name)) {\n res += `${colDescItem.name}:-</br>`\n }\n })\n return res\n },\n },\n visualMap: {\n min: Math.min(...allNums, 0),\n max: Math.max(...allNums, 0),\n },\n series: colDesc?.map((colDescItem) => {\n const seriesData = []\n const row = groupByDesc.find(item => item.colDesc === (adcode === '中国' ? '医院所在省' : '医院所在市'))\n // 先用省份数据,如果没有再用市级数据\n const arr: {\n [key: string]: number\n } = {}\n data.map((item) => {\n const sourceName = item[(adcode === '中国' ? (xGroupByDesc?.colDesc || '') : row?.colDesc) || '']\n const find = currentGeoJson.value.features?.find(({ properties: { name } }: { properties: { name?: string } }) => name?.includes(sourceName as string))\n return {\n name: find?.properties?.name || '',\n value: Number(item[colDescItem]),\n }\n }).forEach((item) => {\n if (!arr[item.name]) {\n arr[item.name] = item.value\n }\n else {\n arr[item.name] = arr[item.name] + item.value\n }\n })\n for (const key in arr) {\n seriesData.push({\n name: key,\n value: arr[key],\n })\n }\n return {\n name: colDescItem,\n type: 'map',\n map: adcode,\n data: seriesData,\n }\n }),\n }\n\n return merge(config, chartOptions)\n }\n catch (error) {\n console.error('Error computing area chart options:', error)\n return {\n title: { text: '地图加载失败' },\n series: [],\n }\n }\n})\n\nasync function initAfter(mc: ECharts | null) {\n myChart.value = mc\n try {\n await registerMap()\n // 添加判断,确保图表实例存在且未被销毁\n if (mc && !mc.isDisposed()) {\n // charts 监听事件\n mc.getZr()?.on('click', (params: { target: HTMLElement }) => {\n mc?.showLoading()\n if (!params.target && adcode !== '中国') {\n registerMap('中国')\n }\n mc.hideLoading()\n })\n mc.on('click', (params: { name: string }) => {\n mc?.showLoading()\n const flag = chartData.groupByDesc?.some(item => item.colDesc === '医院所在市')\n if (adcode === '中国' && flag && params.name) {\n registerMap(params.name).then(() => {\n if (mc && !mc.isDisposed()) {\n mc.setOption(areaChartOptions.value)\n }\n })\n }\n mc?.hideLoading()\n })\n }\n }\n catch (error) {\n console.error('Failed to initialize map:', error)\n // 如果初始化失败,尝试重新注册地图\n if (mc && !mc.isDisposed()) {\n try {\n await registerMap('中国')\n }\n catch (retryError) {\n console.error('Failed to retry map registration:', retryError)\n }\n }\n }\n}\n\n// function selectChina() {\n// registerMap(adcode)\n// }\nasync function registerMap(keyword = '中国') {\n try {\n const geoJson = await getGeoJsonData({ adcode: keyword })\n if (!geoJson || !geoJson.features || geoJson.features.length === 0) {\n console.error('Invalid GeoJSON data for:', keyword)\n return\n }\n currentGeoJson.value = geoJson\n adcode = keyword\n\n echarts.registerMap(keyword, geoJson as any)\n return\n }\n catch (error) {\n console.error('Failed to register map for:', keyword, error)\n // 如果注册失败,尝试使用默认的中国地图数据\n if (keyword !== '中国') {\n console.log('Falling back to China map')\n return registerMap('中国')\n }\n }\n}\nuseCharts({\n chartDOM: dataChartArea,\n chartOptions: areaChartOptions,\n chartData: computed(() => chartData),\n initAfter\n})\n</script>\n\n<template>\n <div class=\"data-chart-area-wrap\">\n <!-- <el-select\n v-if=\"isShowSelect\"\n v-model=\"adcode\"\n class=\"city-select\"\n size=\"small\"\n @change=\"selectChina\"\n >\n <el-option\n v-for=\"item in selectList\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select> -->\n <div\n ref=\"dataChartArea\"\n class=\"data-chart-area\"\n />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-area-wrap {\n position: relative;\n\n .city-select {\n position: absolute;\n top: 10px;\n right: 100px;\n z-index: 1;\n width: 120px;\n }\n\n .data-chart-area {\n height: 100%;\n }\n}\n</style>\n"],"names":["merge","inject","InjectionChartMerge","v","adcode","currentGeoJson","ref","features","type","myChart","dataChartArea","areaChartOptions","computed","xGroupByDesc","groupByDesc","colDesc","modelName","data","__props","chartData","allNums","forEach","item","dataItem","push","Number","config","title","text","tooltip","formatter","params","res","name","series","colDescItem","value","includes","visualMap","min","Math","max","map","seriesData","row","find","arr","sourceName","properties","key","chartOptions","error","console","async","registerMap","keyword","geoJson","getGeoJsonData","length","echarts","log","useCharts","chartDOM","initAfter","mc","isDisposed","getZr","on","showLoading","target","hideLoading","flag","some","then","setOption","retryError","_openBlock","_createElementBlock","_hoisted_1","_createCommentVNode","_createElementVNode","class"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,inject as a,ref as t,computed as s,createElementBlock as r,openBlock as l}from"vue";import{uniq as o}from"lodash-es";import{InjectionChartMerge as c}from"../utils/injectionKeys.mjs";import{useCharts as i}from"../utils/useCharts.mjs";var n=e({name:"DataChartBar",__name:"bar",props:{chartData:{type:Object,required:!0},subShowType:{type:String,required:!0,default:"bar-simple"},chartOptions:{type:null,required:!0}},setup(e){const n=a(c,(e=>e),!0),p=t(null),u=s((()=>{const{colDesc:a,xGroupByDesc:t,groupByDesc:s,data:r=[],modelName:l}=e.chartData,c=Array.from(new Set(r.map((e=>e[t.colDesc||""])))).filter((e=>null!=e))||[],i={...s.find((e=>!e.xAxis))||{groupByDesc:null,groupByValues:[],colDesc:"",xAxis:!1},groupByValues:o(r.map((e=>s.find((e=>!e.xAxis))?.colDesc?String(e[s.find((e=>!e.xAxis))?.colDesc||""]):"")))},p=t?{...t,groupByValues:o(r.map((e=>t.colDesc?String(e[t.colDesc]):"")))}:t,u={title:{text:l},xAxis:{name:"",type:"category",axisLabel:{interval:0,formatter:e=>e.length>5?`${e.substring(0,5)}...`:e},data:c},yAxis:{type:"value"},legend:{data:[]},dataZoom:[{type:"inside",disabled:c.length<15}]};if(1===s.length)u.series=a.map((e=>({name:e,data:r.map((a=>a[e])),type:"bar",emphasis:{focus:"series"},label:{show:!0,position:"inside"}}))),u.legend.data=a;else if(2===s.length){const e=a.map((e=>i.groupByValues?.map((a=>{const t={name:`${a||"/"}-${e}`,type:"bar",stack:e,emphasis:{focus:"series"},data:[],label:{show:!0,position:"inside"}};return t.data=(p?.groupByValues||[]).map((e=>{let s=null;return r.forEach((r=>{i.colDesc&&r[i.colDesc]===a&&p?.colDesc&&r[p.colDesc]===e&&t.stack&&(s=r[t.stack]??null)})),s||""})).filter((e=>""!==e)),t}))||[])).flat();u.series=e,delete u.legend}function y(e,a,t,s){Array.isArray(e)?e.forEach((e=>{e&&(e.type=a,"category"===a&&(e.data=t||[],e.name=s||""))})):e&&(e.type=a,"category"===a&&(e.data=t||[],e.name=s||""))}switch(e.subShowType){case"bar-simple":case"default":y(u.xAxis,"category",c,t?.colDesc||""),y(u.yAxis,"value");break;case"bar-y-category":y(u.xAxis,"value"),y(u.yAxis,"category",c,t?.colDesc||"")}return n(u,e.chartOptions)}));return i({chartDOM:p,chartOptions:u,chartData:s((()=>e.chartData))}),(e,a)=>(l(),r("div",{ref_key:"dataChartBar",ref:p,class:"data-chart-bar"},null,512))}});export{n as default};
1
+ import{defineComponent as e,inject as a,ref as t,computed as s,createElementBlock as r,openBlock as l}from"vue";import{uniq as o}from"lodash-es";import{InjectionChartMerge as c}from"../utils/injectionKeys.mjs";import{useCharts as i}from"../utils/useCharts.mjs";var n=e({name:"DataChartBar",__name:"bar",props:{chartData:{type:Object,required:!0},subShowType:{type:String,required:!0,default:"bar-simple"},chartOptions:{type:null,required:!0}},setup(e){const n=a(c,e=>e,!0),p=t(null),u=s(()=>{const{colDesc:a,xGroupByDesc:t,groupByDesc:s,data:r=[],modelName:l}=e.chartData,c=Array.from(new Set(r.map(e=>e[t.colDesc||""]))).filter(e=>null!=e)||[],i={...s.find(e=>!e.xAxis)||{groupByDesc:null,groupByValues:[],colDesc:"",xAxis:!1},groupByValues:o(r.map(e=>s.find(e=>!e.xAxis)?.colDesc?String(e[s.find(e=>!e.xAxis)?.colDesc||""]):""))},p=t?{...t,groupByValues:o(r.map(e=>t.colDesc?String(e[t.colDesc]):""))}:t,u={title:{text:l},xAxis:{name:"",type:"category",axisLabel:{interval:0,formatter:e=>e.length>5?`${e.substring(0,5)}...`:e},data:c},yAxis:{type:"value"},legend:{data:[]},dataZoom:[{type:"inside",disabled:c.length<15}]};if(1===s.length)u.series=a.map(e=>({name:e,data:r.map(a=>a[e]),type:"bar",emphasis:{focus:"series"},label:{show:!0,position:"inside"}})),u.legend.data=a;else if(2===s.length){const e=a.map(e=>i.groupByValues?.map(a=>{const t={name:`${a||"/"}-${e}`,type:"bar",stack:e,emphasis:{focus:"series"},data:[],label:{show:!0,position:"inside"}};return t.data=(p?.groupByValues||[]).map(e=>{let s=null;return r.forEach(r=>{i.colDesc&&r[i.colDesc]===a&&p?.colDesc&&r[p.colDesc]===e&&t.stack&&(s=r[t.stack]??null)}),s||""}).filter(e=>""!==e),t})||[]).flat();u.series=e,delete u.legend}function y(e,a,t,s){Array.isArray(e)?e.forEach(e=>{e&&(e.type=a,"category"===a&&(e.data=t||[],e.name=s||""))}):e&&(e.type=a,"category"===a&&(e.data=t||[],e.name=s||""))}switch(e.subShowType){case"bar-simple":case"default":y(u.xAxis,"category",c,t?.colDesc||""),y(u.yAxis,"value");break;case"bar-y-category":y(u.xAxis,"value"),y(u.yAxis,"category",c,t?.colDesc||"")}return n(u,e.chartOptions)});return i({chartDOM:p,chartOptions:u,chartData:s(()=>e.chartData)}),(e,a)=>(l(),r("div",{ref_key:"dataChartBar",ref:p,class:"data-chart-bar"},null,512))}});export{n as default};
2
2
  //# sourceMappingURL=bar.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bar.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/bar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { LegendComponentOption, XAXisComponentOption, YAXisComponentOption } from 'echarts'\nimport type {\n EChartsOption,\n IFormatPublicData,\n SeriesOption,\n} from '../utils/types'\nimport { uniq } from 'lodash-es'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\n// 定义组件名称\ndefineOptions({\n name: 'DataChartBar',\n})\n\n// 定义组件属性\nconst {\n chartOptions,\n chartData,\n subShowType = 'bar-simple',\n} = defineProps<{\n chartData: IFormatPublicData\n subShowType: string\n chartOptions: EChartsOption\n}>()\n\n// 注入合并函数,并明确类型\nconst merge = inject(InjectionChartMerge, (v: any) => v, true) as (config: EChartsOption, chartOptions: EChartsOption) => EChartsOption\nconst dataChartBar = ref<HTMLElement | null>(null)\n\n// 计算图表选项\nconst barChartOptions = computed<EChartsOption>(() => {\n const { colDesc, xGroupByDesc, groupByDesc, data = [], modelName } = chartData\n\n const axisData = Array.from(new Set(data.map(item => item[xGroupByDesc.colDesc || '']))).filter(item => item !== undefined && item !== null) || []\n\n // 创建新的对象而不是修改原对象\n const yGroupByDesc = {\n ...groupByDesc.find(item => !item.xAxis) || {\n groupByDesc: null,\n groupByValues: [],\n colDesc: '',\n xAxis: false,\n },\n groupByValues: uniq(data.map(item => groupByDesc.find(item => !item.xAxis)?.colDesc ? String(item[groupByDesc.find(item => !item.xAxis)?.colDesc || '']) : '')),\n }\n\n // 创建新的 xGroupByDesc 对象\n const newXGroupByDesc = xGroupByDesc\n ? {\n ...xGroupByDesc,\n groupByValues: uniq(data.map(item => xGroupByDesc.colDesc ? String(item[xGroupByDesc.colDesc]) : '')),\n }\n : xGroupByDesc\n\n const config: EChartsOption = {\n title: {\n text: modelName,\n },\n xAxis: {\n name: '',\n type: 'category',\n axisLabel: {\n interval: 0, // 强制显示所有标签\n formatter(value: string) {\n const screenshotLength = 5\n return value.length > screenshotLength ? `${value.substring(0, screenshotLength)}...` : value // 截取前5个字符并添加省略号\n },\n },\n data: axisData,\n },\n yAxis: {\n type: 'value',\n },\n legend: {\n data: [],\n },\n dataZoom: [{\n type: 'inside',\n disabled: axisData.length < 15,\n }],\n }\n\n // 堆叠图\n if (groupByDesc.length === 1) {\n config.series = colDesc.map((yItem) => {\n return {\n name: yItem,\n data: data.map(item => item[yItem]),\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n label: {\n show: true,\n position: 'inside',\n },\n }\n });\n (config.legend as LegendComponentOption).data = colDesc\n }\n else if (groupByDesc.length === 2) {\n const arr = colDesc.map((colDescItem) => {\n return yGroupByDesc.groupByValues?.map((yGroupByDescItem) => {\n const obj: SeriesOption = {\n name: `${yGroupByDescItem || '/'}-${colDescItem}`,\n type: 'bar',\n stack: colDescItem,\n emphasis: {\n focus: 'series',\n },\n data: [],\n label: {\n show: true,\n position: 'inside',\n },\n }\n obj.data = (newXGroupByDesc?.groupByValues || []).map((xGroupByDescItem) => {\n let targetVal: number | string | null = null\n data.forEach((item) => {\n if (yGroupByDesc.colDesc && item[yGroupByDesc.colDesc] === yGroupByDescItem && newXGroupByDesc?.colDesc && item[newXGroupByDesc.colDesc] === xGroupByDescItem) {\n if (obj.stack) {\n targetVal = item[obj.stack] ?? null\n }\n }\n })\n return targetVal || ''\n }).filter(v => v !== '')\n return obj\n }) || []\n }).flat()\n\n config.series = arr\n delete config.legend\n }\n\n // 1. 定义轴类型\n type CategoryAxisOption = XAXisComponentOption & {\n type: 'category'\n data: (string | number)[]\n }\n\n // 2. 创建配置轴的辅助函数\n function configureAxis(\n axis: XAXisComponentOption | XAXisComponentOption[] | YAXisComponentOption | YAXisComponentOption[] | undefined,\n type: 'category' | 'value',\n data?: (string | number)[],\n name?: string,\n ) {\n if (Array.isArray(axis)) {\n axis.forEach((item) => {\n if (item) {\n item.type = type\n if (type === 'category') {\n (item as CategoryAxisOption).data = data || []\n item.name = name || ''\n }\n }\n })\n }\n else if (axis) {\n axis.type = type\n if (type === 'category') {\n (axis as CategoryAxisOption).data = data || []\n axis.name = name || ''\n }\n }\n }\n\n // 3. 使用配置函数\n switch (subShowType) {\n case 'bar-simple':\n case 'default':\n configureAxis(config.xAxis, 'category', axisData, xGroupByDesc?.colDesc || '')\n configureAxis(config.yAxis, 'value')\n break\n\n case 'bar-y-category':\n configureAxis(config.xAxis, 'value')\n configureAxis(config.yAxis, 'category', axisData, xGroupByDesc?.colDesc || '')\n break\n }\n\n return merge(config, chartOptions)\n})\n\nuseCharts({ chartDOM: dataChartBar, chartOptions: barChartOptions, chartData: computed(() => chartData) })\n</script>\n\n<template>\n <div\n ref=\"dataChartBar\"\n class=\"data-chart-bar\"\n />\n</template>\n"],"names":["merge","inject","InjectionChartMerge","v","dataChartBar","ref","barChartOptions","computed","colDesc","xGroupByDesc","groupByDesc","data","modelName","__props","chartData","axisData","Array","from","Set","map","item","filter","yGroupByDesc","find","xAxis","groupByValues","uniq","String","newXGroupByDesc","config","title","text","name","type","axisLabel","interval","formatter","value","length","substring","yAxis","legend","dataZoom","disabled","series","yItem","emphasis","focus","label","show","position","arr","colDescItem","yGroupByDescItem","obj","stack","xGroupByDescItem","targetVal","forEach","flat","configureAxis","axis","isArray","subShowType","chartOptions","useCharts","chartDOM"],"mappings":"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"}
1
+ {"version":3,"file":"bar.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/bar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { LegendComponentOption, XAXisComponentOption, YAXisComponentOption } from 'echarts'\nimport type {\n EChartsOption,\n IFormatPublicData,\n SeriesOption,\n} from '../utils/types'\nimport { uniq } from 'lodash-es'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\n// 定义组件名称\ndefineOptions({\n name: 'DataChartBar',\n})\n\n// 定义组件属性\nconst {\n chartOptions,\n chartData,\n subShowType = 'bar-simple',\n} = defineProps<{\n chartData: IFormatPublicData\n subShowType: string\n chartOptions: EChartsOption\n}>()\n\n// 注入合并函数,并明确类型\nconst merge = inject(InjectionChartMerge, (v: any) => v, true) as (config: EChartsOption, chartOptions: EChartsOption) => EChartsOption\nconst dataChartBar = ref<HTMLElement | null>(null)\n\n// 计算图表选项\nconst barChartOptions = computed<EChartsOption>(() => {\n const { colDesc, xGroupByDesc, groupByDesc, data = [], modelName } = chartData\n\n const axisData = Array.from(new Set(data.map(item => item[xGroupByDesc.colDesc || '']))).filter(item => item !== undefined && item !== null) || []\n\n // 创建新的对象而不是修改原对象\n const yGroupByDesc = {\n ...groupByDesc.find(item => !item.xAxis) || {\n groupByDesc: null,\n groupByValues: [],\n colDesc: '',\n xAxis: false,\n },\n groupByValues: uniq(data.map(item => groupByDesc.find(item => !item.xAxis)?.colDesc ? String(item[groupByDesc.find(item => !item.xAxis)?.colDesc || '']) : '')),\n }\n\n // 创建新的 xGroupByDesc 对象\n const newXGroupByDesc = xGroupByDesc\n ? {\n ...xGroupByDesc,\n groupByValues: uniq(data.map(item => xGroupByDesc.colDesc ? String(item[xGroupByDesc.colDesc]) : '')),\n }\n : xGroupByDesc\n\n const config: EChartsOption = {\n title: {\n text: modelName,\n },\n xAxis: {\n name: '',\n type: 'category',\n axisLabel: {\n interval: 0, // 强制显示所有标签\n formatter(value: string) {\n const screenshotLength = 5\n return value.length > screenshotLength ? `${value.substring(0, screenshotLength)}...` : value // 截取前5个字符并添加省略号\n },\n },\n data: axisData,\n },\n yAxis: {\n type: 'value',\n },\n legend: {\n data: [],\n },\n dataZoom: [{\n type: 'inside',\n disabled: axisData.length < 15,\n }],\n }\n\n // 堆叠图\n if (groupByDesc.length === 1) {\n config.series = colDesc.map((yItem) => {\n return {\n name: yItem,\n data: data.map(item => item[yItem]),\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n label: {\n show: true,\n position: 'inside',\n },\n }\n });\n (config.legend as LegendComponentOption).data = colDesc\n }\n else if (groupByDesc.length === 2) {\n const arr = colDesc.map((colDescItem) => {\n return yGroupByDesc.groupByValues?.map((yGroupByDescItem) => {\n const obj: SeriesOption = {\n name: `${yGroupByDescItem || '/'}-${colDescItem}`,\n type: 'bar',\n stack: colDescItem,\n emphasis: {\n focus: 'series',\n },\n data: [],\n label: {\n show: true,\n position: 'inside',\n },\n }\n obj.data = (newXGroupByDesc?.groupByValues || []).map((xGroupByDescItem) => {\n let targetVal: number | string | null = null\n data.forEach((item) => {\n if (yGroupByDesc.colDesc && item[yGroupByDesc.colDesc] === yGroupByDescItem && newXGroupByDesc?.colDesc && item[newXGroupByDesc.colDesc] === xGroupByDescItem) {\n if (obj.stack) {\n targetVal = item[obj.stack] ?? null\n }\n }\n })\n return targetVal || ''\n }).filter(v => v !== '')\n return obj\n }) || []\n }).flat()\n\n config.series = arr\n delete config.legend\n }\n\n // 1. 定义轴类型\n type CategoryAxisOption = XAXisComponentOption & {\n type: 'category'\n data: (string | number)[]\n }\n\n // 2. 创建配置轴的辅助函数\n function configureAxis(\n axis: XAXisComponentOption | XAXisComponentOption[] | YAXisComponentOption | YAXisComponentOption[] | undefined,\n type: 'category' | 'value',\n data?: (string | number)[],\n name?: string,\n ) {\n if (Array.isArray(axis)) {\n axis.forEach((item) => {\n if (item) {\n item.type = type\n if (type === 'category') {\n (item as CategoryAxisOption).data = data || []\n item.name = name || ''\n }\n }\n })\n }\n else if (axis) {\n axis.type = type\n if (type === 'category') {\n (axis as CategoryAxisOption).data = data || []\n axis.name = name || ''\n }\n }\n }\n\n // 3. 使用配置函数\n switch (subShowType) {\n case 'bar-simple':\n case 'default':\n configureAxis(config.xAxis, 'category', axisData, xGroupByDesc?.colDesc || '')\n configureAxis(config.yAxis, 'value')\n break\n\n case 'bar-y-category':\n configureAxis(config.xAxis, 'value')\n configureAxis(config.yAxis, 'category', axisData, xGroupByDesc?.colDesc || '')\n break\n }\n\n return merge(config, chartOptions)\n})\n\nuseCharts({ chartDOM: dataChartBar, chartOptions: barChartOptions, chartData: computed(() => chartData) })\n</script>\n\n<template>\n <div\n ref=\"dataChartBar\"\n class=\"data-chart-bar\"\n />\n</template>\n"],"names":["merge","inject","InjectionChartMerge","v","dataChartBar","ref","barChartOptions","computed","colDesc","xGroupByDesc","groupByDesc","data","modelName","__props","chartData","axisData","Array","from","Set","map","item","filter","yGroupByDesc","find","xAxis","groupByValues","uniq","String","newXGroupByDesc","config","title","text","name","type","axisLabel","interval","formatter","value","length","substring","yAxis","legend","dataZoom","disabled","series","yItem","emphasis","focus","label","show","position","arr","colDescItem","yGroupByDescItem","obj","stack","xGroupByDescItem","targetVal","forEach","flat","configureAxis","axis","isArray","subShowType","chartOptions","useCharts","chartDOM","_createElementBlock","class"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{ElScrollbar as a}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/scrollbar/style/index";import{defineComponent as t,createElementBlock as e,openBlock as c,createElementVNode as r,createBlock as l,toDisplayString as s,Fragment as o,withCtx as d,normalizeClass as n,renderList as i,normalizeStyle as m,createTextVNode as u,createCommentVNode as h}from"vue";import p from"./data-chart-card-bg-left.svg.mjs";import D from"./data-chart-card-bg-right.svg.mjs";import y from"./empty.vue.mjs";const g={class:"data-chart-card"},v={class:"title"},f=["title"],k={class:"context"},x={class:"suffix-icon"},$={key:1,class:"data-chart-card-wrap"},b=["title"],j={class:"context"};var B=t({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(t){const B=t,N=`url(${p})`,_=`url(${D})`;function C(a){const t=B.chartData.xGroupByDesc?.colDesc||"";return t?t+a[t]:""}return(p,D)=>{const B=a;return c(),e("div",g,[r("p",v,s(t.chartData.modelName),1),t.chartData.data.length?(c(),e(o,{key:0},[t.chartData.groupByDesc.length?(c(),l(B,{key:0},{default:d((()=>[r("div",{class:n({"data-chart-card-grid-layout":t.chartData.groupByDesc.length})},[(c(!0),e(o,null,i(t.chartData.data,((a,l)=>(c(),e("div",{key:l,class:"card-item",style:m({"background-image":`${N}, ${_}`})},[r("div",{class:"card-title",title:C(a)},s(C(a)),9,f),r("div",k,[(c(!0),e(o,null,i(t.chartData.colDesc,((l,o)=>(c(),e("span",{key:l},[u(s(`${l}: `||"-"),1),r("strong",null,s(a[l]||"-"),1),u(" "+s(o===t.chartData.colDesc.length-1?"":","),1)])))),128))]),r("div",x,s(l+1),1)],4)))),128))],2)])),_:1})):(c(),e("div",$,[(c(!0),e(o,null,i(t.chartData.data,((a,l)=>(c(),e("div",{key:l,class:"card-item",style:m({"background-image":`${N}, ${_}`})},[r("div",{class:"card-title",title:t.chartData.modelName},s(t.chartData.modelName),9,b),r("div",j,[(c(!0),e(o,null,i(t.chartData.colDesc,((l,d)=>(c(),e("span",{key:l},[a?(c(),e(o,{key:0},[u(s(`${l}: `||"-"),1),r("strong",null,s(a[l]||"-"),1),u(" "+s(d===t.chartData.colDesc.length-1?"":","),1)],64)):h("v-if",!0)])))),128))])],4)))),128))]))],64)):(c(),l(y,{key:1}))])}}});export{B as default};
1
+ import{ElScrollbar as a}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/scrollbar/style/index";import{defineComponent as t,createElementBlock as e,openBlock as c,createElementVNode as r,createBlock as l,toDisplayString as s,Fragment as o,withCtx as d,normalizeClass as n,renderList as i,normalizeStyle as m,createTextVNode as u,createCommentVNode as h}from"vue";import p from"./data-chart-card-bg-left.svg.mjs";import D from"./data-chart-card-bg-right.svg.mjs";import y from"./empty.vue.mjs";const g={class:"data-chart-card"},v={class:"title"},f=["title"],k={class:"context"},x={class:"suffix-icon"},$={key:1,class:"data-chart-card-wrap"},b=["title"],j={class:"context"};var B=t({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(t){const B=t,N=`url(${p})`,_=`url(${D})`;function C(a){const t=B.chartData.xGroupByDesc?.colDesc||"";return t?t+a[t]:""}return(p,D)=>{const B=a;return c(),e("div",g,[r("p",v,s(t.chartData.modelName),1),t.chartData.data.length?(c(),e(o,{key:0},[t.chartData.groupByDesc.length?(c(),l(B,{key:0},{default:d(()=>[r("div",{class:n({"data-chart-card-grid-layout":t.chartData.groupByDesc.length})},[(c(!0),e(o,null,i(t.chartData.data,(a,l)=>(c(),e("div",{key:l,class:"card-item",style:m({"background-image":`${N}, ${_}`})},[r("div",{class:"card-title",title:C(a)},s(C(a)),9,f),r("div",k,[(c(!0),e(o,null,i(t.chartData.colDesc,(l,o)=>(c(),e("span",{key:l},[u(s(`${l}: `||"-"),1),r("strong",null,s(a[l]||"-"),1),u(" "+s(o===t.chartData.colDesc.length-1?"":","),1)]))),128))]),r("div",x,s(l+1),1)],4))),128))],2)]),_:1})):(c(),e("div",$,[(c(!0),e(o,null,i(t.chartData.data,(a,l)=>(c(),e("div",{key:l,class:"card-item",style:m({"background-image":`${N}, ${_}`})},[r("div",{class:"card-title",title:t.chartData.modelName},s(t.chartData.modelName),9,b),r("div",j,[(c(!0),e(o,null,i(t.chartData.colDesc,(l,d)=>(c(),e("span",{key:l},[a?(c(),e(o,{key:0},[u(s(`${l}: `||"-"),1),r("strong",null,s(a[l]||"-"),1),u(" "+s(d===t.chartData.colDesc.length-1?"":","),1)],64)):h("v-if",!0)]))),128))])],4))),128))]))],64)):(c(),l(y,{key:1}))])}}});export{B as default};
2
2
  //# sourceMappingURL=card.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/card.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { EChartData, IFormatPublicData } from '../utils/types'\nimport bgLeft from './data-chart-card-bg-left.svg'\nimport bgRight from './data-chart-card-bg-right.svg'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartCard',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\n// 将 SVG 文件转换为 URL\nconst bgLeftUrl = `url(${bgLeft})`\nconst bgRightUrl = `url(${bgRight})`\n\nfunction cardTitle(dataItem: EChartData['data'][0]) {\n const colDesc = props.chartData.xGroupByDesc?.colDesc || ''\n\n return colDesc ? (colDesc + dataItem[colDesc]) : ''\n}\n</script>\n\n<template>\n <div class=\"data-chart-card\">\n <p class=\"title\">\n {{ chartData.modelName }}\n </p>\n <template v-if=\"chartData.data.length\">\n <el-scrollbar v-if=\"chartData.groupByDesc.length\">\n <div :class=\"{ 'data-chart-card-grid-layout': chartData.groupByDesc.length }\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"cardTitle(dataItem)\"\n >\n {{ cardTitle(dataItem) }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </span>\n </div>\n <div class=\"suffix-icon\">\n {{ dataIndex + 1 }}\n </div>\n </div>\n </div>\n </el-scrollbar>\n <div\n v-else\n class=\"data-chart-card-wrap\"\n >\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"chartData.modelName\"\n >\n {{ chartData.modelName }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n <template v-if=\"dataItem\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </template>\n </span>\n </div>\n </div>\n </div>\n </template>\n <Empty v-else />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-card {\n display: flex;\n flex-direction: column;\n\n .title {\n margin: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5.5px;\n line-height: 26px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n color: #464646;\n }\n\n .data-chart-card-grid-layout {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 10px;\n width: calc(100% - 3px);\n }\n\n .data-chart-card-wrap {\n height: 100% !important;\n\n .card-item {\n width: 100% !important;\n }\n }\n\n .card-item {\n position: relative;\n background-repeat: no-repeat;\n background-position: left top, right top;\n background-size: contain, contain;\n border: 2px solid #2196f3;\n border-radius: 6px;\n\n .suffix-icon {\n position: absolute;\n right: 1px;\n bottom: calc(25% - 14px);\n width: 20px;\n font-size: 20px;\n font-weight: bold;\n color: #fff;\n text-align: center;\n }\n\n .card-title {\n padding-left: 15px;\n margin-top: 10px;\n margin-bottom: 5px;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n color: #2196f3;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .context {\n padding: 0 30px 10px 20px;\n font-size: 14px;\n color: #464646;\n }\n }\n}\n</style>\n"],"names":["props","__props","bgLeftUrl","bgLeft","bgRightUrl","bgRight","cardTitle","dataItem","colDesc","chartData","xGroupByDesc"],"mappings":"g3BAWA,MAAMA,EAAQC,EAaRC,EAAY,OAAOC,KACnBC,EAAa,OAAOC,KAE1B,SAASC,EAAUC,GACjB,MAAMC,EAAUR,EAAMS,UAAUC,cAAcF,SAAW,GAEzD,OAAOA,EAAWA,EAAUD,EAASC,GAAY,EAAA"}
1
+ {"version":3,"file":"card.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/card.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { EChartData, IFormatPublicData } from '../utils/types'\nimport bgLeft from './data-chart-card-bg-left.svg'\nimport bgRight from './data-chart-card-bg-right.svg'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartCard',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\n// 将 SVG 文件转换为 URL\nconst bgLeftUrl = `url(${bgLeft})`\nconst bgRightUrl = `url(${bgRight})`\n\nfunction cardTitle(dataItem: EChartData['data'][0]) {\n const colDesc = props.chartData.xGroupByDesc?.colDesc || ''\n\n return colDesc ? (colDesc + dataItem[colDesc]) : ''\n}\n</script>\n\n<template>\n <div class=\"data-chart-card\">\n <p class=\"title\">\n {{ chartData.modelName }}\n </p>\n <template v-if=\"chartData.data.length\">\n <el-scrollbar v-if=\"chartData.groupByDesc.length\">\n <div :class=\"{ 'data-chart-card-grid-layout': chartData.groupByDesc.length }\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"cardTitle(dataItem)\"\n >\n {{ cardTitle(dataItem) }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </span>\n </div>\n <div class=\"suffix-icon\">\n {{ dataIndex + 1 }}\n </div>\n </div>\n </div>\n </el-scrollbar>\n <div\n v-else\n class=\"data-chart-card-wrap\"\n >\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"chartData.modelName\"\n >\n {{ chartData.modelName }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n <template v-if=\"dataItem\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </template>\n </span>\n </div>\n </div>\n </div>\n </template>\n <Empty v-else />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-card {\n display: flex;\n flex-direction: column;\n\n .title {\n margin: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5.5px;\n line-height: 26px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n color: #464646;\n }\n\n .data-chart-card-grid-layout {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 10px;\n width: calc(100% - 3px);\n }\n\n .data-chart-card-wrap {\n height: 100% !important;\n\n .card-item {\n width: 100% !important;\n }\n }\n\n .card-item {\n position: relative;\n background-repeat: no-repeat;\n background-position: left top, right top;\n background-size: contain, contain;\n border: 2px solid #2196f3;\n border-radius: 6px;\n\n .suffix-icon {\n position: absolute;\n right: 1px;\n bottom: calc(25% - 14px);\n width: 20px;\n font-size: 20px;\n font-weight: bold;\n color: #fff;\n text-align: center;\n }\n\n .card-title {\n padding-left: 15px;\n margin-top: 10px;\n margin-bottom: 5px;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n color: #2196f3;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .context {\n padding: 0 30px 10px 20px;\n font-size: 14px;\n color: #464646;\n }\n }\n}\n</style>\n"],"names":["props","__props","bgLeftUrl","bgLeft","bgRightUrl","bgRight","cardTitle","dataItem","colDesc","chartData","xGroupByDesc","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","modelName","data","length","_Fragment","key","groupByDesc","_createBlock","_component_el_scrollbar","class","_normalizeClass","dataIndex","style","_normalizeStyle","title","_hoisted_3","_hoisted_4","item","index","_createTextVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","Empty"],"mappings":"g3BAWA,MAAMA,EAAQC,EAaRC,EAAY,OAAOC,KACnBC,EAAa,OAAOC,KAE1B,SAASC,EAAUC,GACjB,MAAMC,EAAUR,EAAMS,UAAUC,cAAcF,SAAW,GAEzD,OAAOA,EAAWA,EAAUD,EAASC,GAAY,EACnD,yBAIE,OAAAG,IAAAC,EAqEM,MArENC,EAqEM,CApEJC,EAEI,IAFJC,EAEIC,EADCf,EAAAQ,UAAUQ,WAAS,GAERhB,EAAAQ,UAAUS,KAAKC,YAA/BP,EA+DWQ,EAAA,CAAAC,IAAA,GAAA,CA9DWpB,EAAAQ,UAAUa,YAAYH,YAA1CI,EA8BeC,EAAA,CAAAH,IAAA,GAAA,WA7Bb,IA4BM,CA5BNP,EA4BM,MAAA,CA5BAW,MAAKC,EAAA,CAAA,8BAAmCzB,EAAAQ,UAAUa,YAAYH,YAClER,GAAA,GAAAC,EA0BMQ,SAzB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUoB,SADpBf,EA0BM,MAAA,CAxBHS,IAAKM,EACNF,MAAM,YACLG,MAAKC,EAAA,CAAyC,mBAAA,GAAA3B,MAAcE,QAI7DU,EAKM,MAAA,CAJJW,MAAM,aACLK,MAAOxB,EAAUC,IAEfS,EAAAV,EAAUC,IAAQ,EAAAwB,GAEvBjB,EAQM,MARNkB,EAQM,EAPJrB,GAAA,GAAAC,EAMOQ,SALmBnB,EAAAQ,UAAUD,QAAO,CAAjCyB,EAAMC,SADhBtB,EAMO,OAAA,CAJJS,IAAKY,GAAI,QAEJA,OAAI,KAAA,GAAcnB,EAA4C,SAAA,KAAAE,EAAjCT,EAAS0B,IAAI,KAAA,GAAoBE,EAAA,MAAID,IAAUjC,YAAUO,QAAQW,gCAIxGL,EAEM,MAFNsB,EAEMpB,EADDW,EAAS,GAAA,6BAKpBhB,IAAAC,EA8BM,MA9BNyB,EA8BM,EA1BJ1B,GAAA,GAAAC,EAyBMQ,SAxB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUoB,SADpBf,EAyBM,MAAA,CAvBHS,IAAKM,EACNF,MAAM,YACLG,MAAKC,EAAA,CAAuC,mBAAA,GAAA3B,MAAcE,QAI3DU,EAKM,MAAA,CAJJW,MAAM,aACLK,MAAO7B,EAAAQ,UAAUQ,WAEfD,EAAAf,EAAAQ,UAAUQ,WAAS,EAAAqB,GAExBxB,EAUM,MAVNyB,EAUM,EATJ5B,GAAA,GAAAC,EAQOQ,SAPmBnB,EAAAQ,UAAUD,QAAO,CAAjCyB,EAAMC,SADhBtB,EAQO,OAAA,CANJS,IAAKY,GAAI,CAEM1B,OAAhBK,EAGWQ,EAAA,CAAAC,IAAA,GAAA,QAFHY,OAAI,KAAA,GAAcnB,EAA4C,SAAA,KAAAE,EAAjCT,EAAS0B,IAAI,KAAA,GAAoBE,EAAA,MAAID,IAAUjC,YAAUO,QAAQW,6EAQhHI,EAAgBiB,EAAA,CAAAnB,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-chart-card-bg-left.svg.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/data-chart-card-bg-left.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20width%3D%2260%22%20height%3D%22115%22%20viewBox%3D%220%200%2060%20115%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.0%22%3E%20%20%3Cpath%20d%3D%22m0.25005%2C137.62501l15.625%2C0l-0.075%2C-42.475c-0.175%2C-37.25%200.75%2C-43.125%202.15%2C-45.825c0.9%2C-1.8%204.925%2C-6.675%208.925%2C-11.075c11.275%2C-10.875%2011.36335%2C-10.92808%2011.15752%2C-24.664c-0.0767%2C-13.461%20-0.19369%2C-13.52265%20-0.04757%2C-13.661l-37.73495%2C0%22%20%20%20%20%20%20%20%20fill%3D%22%23F2F2F2%22%20%2F%3E%3C%2Fsvg%3E\""],"names":["bgLeft"],"mappings":"AAAA,IAAeA,EAAA"}
1
+ {"version":3,"file":"data-chart-card-bg-left.svg.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/data-chart-card-bg-left.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20width%3D%2260%22%20height%3D%22115%22%20viewBox%3D%220%200%2060%20115%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.0%22%3E%20%20%3Cpath%20d%3D%22m0.25005%2C137.62501l15.625%2C0l-0.075%2C-42.475c-0.175%2C-37.25%200.75%2C-43.125%202.15%2C-45.825c0.9%2C-1.8%204.925%2C-6.675%208.925%2C-11.075c11.275%2C-10.875%2011.36335%2C-10.92808%2011.15752%2C-24.664c-0.0767%2C-13.461%20-0.19369%2C-13.52265%20-0.04757%2C-13.661l-37.73495%2C0%22%20%20%20%20%20%20%20%20fill%3D%22%23F2F2F2%22%20%2F%3E%3C%2Fsvg%3E\""],"names":["bgLeft"],"mappings":"AAAA,IAAAA,EAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-chart-card-bg-right.svg.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/data-chart-card-bg-right.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20width%3D%2250%22%20height%3D%22115%22%20viewBox%3D%220%200%2050%20115%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.0%22%3E%20%20%3Cpath%20fill%3D%22%232096f3%22%20%20%20%20%20%20%20%20d%3D%22m22.90361%2C35.16812c-0.47044%2C29.57319%200.59424%2C27.27527%20-11.58759%2C40.16359c-10.69624%2C11.28976%20-11.31674%2C12.23822%20-11.19174%2C36.96648l-0.07428%2C25.57681l51.575%2C0l0%2C-137.875l-28.52331%2C0l-0.19808%2C35.16812z%22%20%2F%3E%3C%2Fsvg%3E\""],"names":["bgRight"],"mappings":"AAAA,IAAeA,EAAA"}
1
+ {"version":3,"file":"data-chart-card-bg-right.svg.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/data-chart-card-bg-right.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20width%3D%2250%22%20height%3D%22115%22%20viewBox%3D%220%200%2050%20115%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.0%22%3E%20%20%3Cpath%20fill%3D%22%232096f3%22%20%20%20%20%20%20%20%20d%3D%22m22.90361%2C35.16812c-0.47044%2C29.57319%200.59424%2C27.27527%20-11.58759%2C40.16359c-10.69624%2C11.28976%20-11.31674%2C12.23822%20-11.19174%2C36.96648l-0.07428%2C25.57681l51.575%2C0l0%2C-137.875l-28.52331%2C0l-0.19808%2C35.16812z%22%20%2F%3E%3C%2Fsvg%3E\""],"names":["bgRight"],"mappings":"AAAA,IAAAA,EAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"empty.svg.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/empty.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2264%22%20height%3D%2241%22%3E%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%20transform%3D%22translate%280%201%29%22%3E%20%20%20%20%3Cellipse%20cx%3D%2232%22%20cy%3D%2233%22%20fill%3D%22%23F5F5F5%22%20rx%3D%2232%22%20ry%3D%227%22%20%2F%3E%20%20%20%20%3Cg%20fill-rule%3D%22nonzero%22%3E%20%20%20%20%20%20%3Cpath%20fill%3D%22%23FAFAFA%22%20stroke%3D%22%23D9D9D9%22%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22M55%2012.76%2044.854%201.258C44.367.474%2043.656%200%2042.907%200H21.093c-.749%200-1.46.474-1.947%201.257L9%2012.761V22h46v-9.24z%22%20%2F%3E%20%20%20%20%20%20%3Cpath%20fill%3D%22%23FFF%22%20stroke%3D%22%23D9D9D9%22%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22M41.613%2015.931c0-1.605.994-2.93%202.227-2.931H55v18.137C55%2033.26%2053.68%2035%2052.05%2035h-40.1C10.32%2035%209%2033.259%209%2031.137V13h11.16c1.233%200%202.227%201.323%202.227%202.928v.022c0%201.605%201.005%202.901%202.237%202.901h14.752c1.232%200%202.237-1.308%202.237-2.913v-.007z%22%20%2F%3E%20%20%20%20%20%20%3Cpath%20stroke%3D%22%23E8E8E8%22%20stroke-linecap%3D%22round%22%20stroke-width%3D%221.5%22%20d%3D%22M25%2024h14m-14%204h14m-14%204h14%22%20%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E\""],"names":["emptyIcon"],"mappings":"AAAA,IAAeA,EAAA"}
1
+ {"version":3,"file":"empty.svg.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/empty.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2264%22%20height%3D%2241%22%3E%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%20transform%3D%22translate%280%201%29%22%3E%20%20%20%20%3Cellipse%20cx%3D%2232%22%20cy%3D%2233%22%20fill%3D%22%23F5F5F5%22%20rx%3D%2232%22%20ry%3D%227%22%20%2F%3E%20%20%20%20%3Cg%20fill-rule%3D%22nonzero%22%3E%20%20%20%20%20%20%3Cpath%20fill%3D%22%23FAFAFA%22%20stroke%3D%22%23D9D9D9%22%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22M55%2012.76%2044.854%201.258C44.367.474%2043.656%200%2042.907%200H21.093c-.749%200-1.46.474-1.947%201.257L9%2012.761V22h46v-9.24z%22%20%2F%3E%20%20%20%20%20%20%3Cpath%20fill%3D%22%23FFF%22%20stroke%3D%22%23D9D9D9%22%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22M41.613%2015.931c0-1.605.994-2.93%202.227-2.931H55v18.137C55%2033.26%2053.68%2035%2052.05%2035h-40.1C10.32%2035%209%2033.259%209%2031.137V13h11.16c1.233%200%202.227%201.323%202.227%202.928v.022c0%201.605%201.005%202.901%202.237%202.901h14.752c1.232%200%202.237-1.308%202.237-2.913v-.007z%22%20%2F%3E%20%20%20%20%20%20%3Cpath%20stroke%3D%22%23E8E8E8%22%20stroke-linecap%3D%22round%22%20stroke-width%3D%221.5%22%20d%3D%22M25%2024h14m-14%204h14m-14%204h14%22%20%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E\""],"names":["emptyIcon"],"mappings":"AAAA,IAAAA,EAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"empty.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/empty.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\n// 导入 SVG\nimport emptyIcon from './empty.svg'\n\ndefineOptions({\n name: 'Empty',\n})\n\nconst {\n image = emptyIcon,\n description = '暂无数据',\n imageSize = { width: '100px', height: 'auto' },\n} = defineProps<Props>()\n\ninterface Props {\n image?: string\n description?: string\n imageSize?: { width: string, height: string }\n}\n\nconst ns = useNamespace('data-chart')\n</script>\n\n<template>\n <div :class=\"[ns.e('empty')]\">\n <div :class=\"[ns.e('empty-content')]\">\n <img\n :style=\"imageSize\"\n :src=\"image\"\n :alt=\"description\"\n ><span :class=\"[ns.e('empty-description')]\">{{ description }}</span>\n </div>\n </div>\n</template>\n"],"names":["ns","useNamespace"],"mappings":"yfAqBM,MAAAA,EAAKC,EAAa"}
1
+ {"version":3,"file":"empty.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/empty.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\n// 导入 SVG\nimport emptyIcon from './empty.svg'\n\ndefineOptions({\n name: 'Empty',\n})\n\nconst {\n image = emptyIcon,\n description = '暂无数据',\n imageSize = { width: '100px', height: 'auto' },\n} = defineProps<Props>()\n\ninterface Props {\n image?: string\n description?: string\n imageSize?: { width: string, height: string }\n}\n\nconst ns = useNamespace('data-chart')\n</script>\n\n<template>\n <div :class=\"[ns.e('empty')]\">\n <div :class=\"[ns.e('empty-content')]\">\n <img\n :style=\"imageSize\"\n :src=\"image\"\n :alt=\"description\"\n ><span :class=\"[ns.e('empty-description')]\">{{ description }}</span>\n </div>\n </div>\n</template>\n"],"names":["ns","useNamespace","_createElementBlock","class","_normalizeClass","_unref","e","_createElementVNode","style","imageSize","src","image","alt","description"],"mappings":"yfAqBA,MAAMA,EAAKC,EAAa,gCAItBC,EAQM,MAAA,CARAC,MAAKC,EAAA,CAAGC,EAAAL,GAAGM,EAAC,aAChBC,EAMM,MAAA,CANAJ,MAAKC,EAAA,CAAGC,EAAAL,GAAGM,EAAC,qBAChBC,EAIC,MAAA,CAHEC,QAAOC,EAAAA,WACPC,IAAKC,EAAAA,MACLC,IAAKC,EAAAA,wBACPN,EAAmE,OAAA,CAA5DJ,MAAKC,EAAA,CAAGC,EAAAL,GAAGM,EAAC,0BAA2BO,EAAAA,aAAW"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as t,ref as e,inject as a,computed as r,createElementBlock as n,openBlock as l}from"vue";import{InjectionChartMerge as s}from"../utils/injectionKeys.mjs";import{useCharts as i}from"../utils/useCharts.mjs";var o=t({name:"DataChartFunnel",__name:"funnel",props:{chartData:{type:Object,required:!0},chartOptions:{type:null,required:!0}},setup(t){const o=e(),c=a(s,(t=>t),!0),m=r((()=>{const{colDesc:e,xGroupByDesc:a,modelName:r,data:n}=t.chartData,l={title:{text:r},legend:{},series:e.map((t=>({name:t,type:"funnel",left:"10%",width:"80%",label:{formatter:"{c}"},labelLine:{show:!1},itemStyle:{opacity:.7},emphasis:{label:{position:"inside",formatter:`{b}${t}: {c}`}},data:n.map((e=>({name:e[a?.colDesc||""],value:e[t]||""})))})))};return 1!==e.length&&(l.legend.data=e),c(l,t.chartOptions)}));return i({chartDOM:o,chartOptions:m,chartData:r((()=>t.chartData))}),(t,e)=>(l(),n("div",{ref_key:"dataChartFunnel",ref:o,class:"data-chart-funnel"},null,512))}});export{o as default};
1
+ import{defineComponent as t,ref as e,inject as a,computed as r,createElementBlock as n,openBlock as l}from"vue";import{InjectionChartMerge as s}from"../utils/injectionKeys.mjs";import{useCharts as i}from"../utils/useCharts.mjs";var o=t({name:"DataChartFunnel",__name:"funnel",props:{chartData:{type:Object,required:!0},chartOptions:{type:null,required:!0}},setup(t){const o=e(),c=a(s,t=>t,!0),m=r(()=>{const{colDesc:e,xGroupByDesc:a,modelName:r,data:n}=t.chartData,l={title:{text:r},legend:{},series:e.map(t=>({name:t,type:"funnel",left:"10%",width:"80%",label:{formatter:"{c}"},labelLine:{show:!1},itemStyle:{opacity:.7},emphasis:{label:{position:"inside",formatter:`{b}${t}: {c}`}},data:n.map(e=>({name:e[a?.colDesc||""],value:e[t]||""}))}))};return 1!==e.length&&(l.legend.data=e),c(l,t.chartOptions)});return i({chartDOM:o,chartOptions:m,chartData:r(()=>t.chartData)}),(t,e)=>(l(),n("div",{ref_key:"dataChartFunnel",ref:o,class:"data-chart-funnel"},null,512))}});export{o as default};
2
2
  //# sourceMappingURL=funnel.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"funnel.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/funnel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { LegendOption } from 'echarts/types/dist/shared'\nimport type { EChartsOption, IFormatPublicData } from '../utils/types'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\ndefineOptions({\n name: 'DataChartFunnel',\n})\nconst {\n chartOptions,\n chartData,\n} = defineProps<{\n chartData: IFormatPublicData\n chartOptions: EChartsOption\n}>()\nconst dataChartFunnel = ref()\nconst merge = inject(InjectionChartMerge, (v: any) => v, true)\nconst funnelChartOptions = computed<EChartsOption>(() => {\n const { colDesc, xGroupByDesc, modelName, data } = chartData\n\n const config = {\n title: {\n text: modelName,\n },\n legend: {},\n series: colDesc.map((item) => {\n return {\n name: item,\n type: 'funnel',\n left: '10%',\n width: '80%',\n label: {\n formatter: '{c}',\n },\n labelLine: {\n show: false,\n },\n itemStyle: {\n opacity: 0.7,\n },\n emphasis: {\n label: {\n position: 'inside',\n formatter: `{b}${item}: {c}`,\n },\n },\n data: data.map(yItem => ({\n name: yItem[xGroupByDesc?.colDesc || ''],\n value: yItem[item] || '',\n })),\n }\n }),\n }\n if (colDesc.length !== 1) {\n (config.legend as LegendOption).data = colDesc\n }\n return merge(config, chartOptions)\n})\nuseCharts({ chartDOM: dataChartFunnel, chartOptions: funnelChartOptions, chartData: computed(() => chartData) })\n</script>\n\n<template>\n <div\n ref=\"dataChartFunnel\"\n class=\"data-chart-funnel\"\n />\n</template>\n"],"names":["dataChartFunnel","ref","merge","inject","InjectionChartMerge","v","funnelChartOptions","computed","colDesc","xGroupByDesc","modelName","data","__props","chartData","config","title","text","legend","series","map","item","name","type","left","width","label","formatter","labelLine","show","itemStyle","opacity","emphasis","position","yItem","value","length","chartOptions","useCharts","chartDOM"],"mappings":"8WAgBA,MAAMA,EAAkBC,IAClBC,EAAQC,EAAOC,GAAsBC,GAAWA,IAAG,GACnDC,EAAqBC,GAAwB,KACjD,MAAMC,QAAEA,EAASC,aAAAA,EAAAC,UAAcA,EAAWC,KAAAA,GAASC,EAAAC,UAE7CC,EAAS,CACbC,MAAO,CACLC,KAAMN,GAERO,OAAQ,CAAC,EACTC,OAAQV,EAAQW,KAAKC,IACZ,CACLC,KAAMD,EACNE,KAAM,SACNC,KAAM,MACNC,MAAO,MACPC,MAAO,CACLC,UAAW,OAEbC,UAAW,CACTC,MAAM,GAERC,UAAW,CACTC,QAAS,IAEXC,SAAU,CACRN,MAAO,CACLO,SAAU,SACVN,UAAW,MAAMN,WAGrBT,KAAMA,EAAKQ,KAAcc,IAAA,CACvBZ,KAAMY,EAAMxB,GAAcD,SAAW,IACrC0B,MAAOD,EAAMb,IAAS,YAQvB,OAHgB,IAAnBZ,EAAQ2B,SACTrB,EAAOG,OAAwBN,KAAOH,GAElCN,EAAMY,EAAQF,EAAYwB,aAAA,WAEzBC,EAAA,CAAEC,SAAUtC,EAAiBoC,aAAc9B,EAAoBO,UAAWN,GAAS,IAAMK,EAAAC"}
1
+ {"version":3,"file":"funnel.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/funnel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { LegendOption } from 'echarts/types/dist/shared'\nimport type { EChartsOption, IFormatPublicData } from '../utils/types'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\ndefineOptions({\n name: 'DataChartFunnel',\n})\nconst {\n chartOptions,\n chartData,\n} = defineProps<{\n chartData: IFormatPublicData\n chartOptions: EChartsOption\n}>()\nconst dataChartFunnel = ref()\nconst merge = inject(InjectionChartMerge, (v: any) => v, true)\nconst funnelChartOptions = computed<EChartsOption>(() => {\n const { colDesc, xGroupByDesc, modelName, data } = chartData\n\n const config = {\n title: {\n text: modelName,\n },\n legend: {},\n series: colDesc.map((item) => {\n return {\n name: item,\n type: 'funnel',\n left: '10%',\n width: '80%',\n label: {\n formatter: '{c}',\n },\n labelLine: {\n show: false,\n },\n itemStyle: {\n opacity: 0.7,\n },\n emphasis: {\n label: {\n position: 'inside',\n formatter: `{b}${item}: {c}`,\n },\n },\n data: data.map(yItem => ({\n name: yItem[xGroupByDesc?.colDesc || ''],\n value: yItem[item] || '',\n })),\n }\n }),\n }\n if (colDesc.length !== 1) {\n (config.legend as LegendOption).data = colDesc\n }\n return merge(config, chartOptions)\n})\nuseCharts({ chartDOM: dataChartFunnel, chartOptions: funnelChartOptions, chartData: computed(() => chartData) })\n</script>\n\n<template>\n <div\n ref=\"dataChartFunnel\"\n class=\"data-chart-funnel\"\n />\n</template>\n"],"names":["dataChartFunnel","ref","merge","inject","InjectionChartMerge","v","funnelChartOptions","computed","colDesc","xGroupByDesc","modelName","data","__props","chartData","config","title","text","legend","series","map","item","name","type","left","width","label","formatter","labelLine","show","itemStyle","opacity","emphasis","position","yItem","value","length","chartOptions","useCharts","chartDOM","_createElementBlock","class"],"mappings":"8WAgBA,MAAMA,EAAkBC,IAClBC,EAAQC,EAAOC,EAAsBC,GAAWA,GAAG,GACnDC,EAAqBC,EAAwB,KACjD,MAAMC,QAAEA,EAAAC,aAASA,EAAAC,UAAcA,EAAAC,KAAWA,GAASC,EAAAC,UAE7CC,EAAS,CACbC,MAAO,CACLC,KAAMN,GAERO,OAAQ,CAAA,EACRC,OAAQV,EAAQW,IAAKC,IACZ,CACLC,KAAMD,EACNE,KAAM,SACNC,KAAM,MACNC,MAAO,MACPC,MAAO,CACLC,UAAW,OAEbC,UAAW,CACTC,MAAM,GAERC,UAAW,CACTC,QAAS,IAEXC,SAAU,CACRN,MAAO,CACLO,SAAU,SACVN,UAAW,MAAMN,WAGrBT,KAAMA,EAAKQ,IAAIc,IAAA,CACbZ,KAAMY,EAAMxB,GAAcD,SAAW,IACrC0B,MAAOD,EAAMb,IAAS,UAQ9B,OAHuB,IAAnBZ,EAAQ2B,SACTrB,EAAOG,OAAwBN,KAAOH,GAElCN,EAAMY,EAAQF,EAAAwB,uBAEvBC,EAAU,CAAEC,SAAUtC,EAAiBoC,aAAc9B,EAAoBO,UAAWN,EAAS,IAAMK,EAAAC,yBAIjG0B,EAGE,MAAA,SAFI,kBAAJtC,IAAID,EACJwC,MAAM"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,ref as t,inject as a,computed as r,createElementBlock as s,openBlock as n}from"vue";import{InjectionChartMerge as i}from"../utils/injectionKeys.mjs";import{useCharts as l}from"../utils/useCharts.mjs";var c=e({name:"DataChartLine",__name:"line",props:{chartData:{type:Object,required:!0},subShowType:{type:String,required:!0,default:"line-simple"},chartOptions:{type:null,required:!0}},setup(e){const c=t(),o=a(i,(e=>e),!0),p=15,d="Total",m=!0;const u=r((()=>{const{colDesc:t,xGroupByDesc:a,groupByDesc:r,data:s,modelName:n}=e.chartData,i=Array.from(new Set(s?.map((e=>e[a?.colDesc||""])))).filter((e=>null!=e))||[],l=r?.find((e=>!e.xAxis)),c={title:{text:n},legend:{data:[]},xAxis:{name:a?.colDesc||"",data:i},dataZoom:[{type:"inside",disabled:i.length<p}]};if(1===r?.length)c.series=t.map((e=>({name:e,type:"line",smooth:m,data:s.map((t=>t[e])).filter((e=>null!=e))}))),c.legend.data=t;else if(2===r?.length){const e=[...new Set(s.map((e=>String(e[l?.colDesc||""]))))];c.legend.data=e,c.series=e.map((e=>function(e,t,a,r,s,n){const i=[];return t.forEach((t=>{const l=a.find((a=>a[r?.colDesc]===t&&a[s?.colDesc]===e));l?i.push(l[n[0]]):i.push(0)})),{name:e,type:"line",smooth:m,stack:d,areaStyle:{},data:i}}(e,i,s,a,l,t)))}return c.series=c.series?.map((t=>{const a={...t};switch(e.subShowType){case"line-simple":default:delete a.areaStyle;break;case"area-basic":a.areaStyle={}}return a})),o(c,e.chartOptions)}));return l({chartDOM:c,chartOptions:u,chartData:r((()=>e.chartData))}),(e,t)=>(n(),s("div",{ref_key:"dataChartLine",ref:c,class:"data-chart-line"},null,512))}});export{c as default};
1
+ import{defineComponent as e,ref as t,inject as a,computed as r,createElementBlock as s,openBlock as n}from"vue";import{InjectionChartMerge as i}from"../utils/injectionKeys.mjs";import{useCharts as l}from"../utils/useCharts.mjs";var c=e({name:"DataChartLine",__name:"line",props:{chartData:{type:Object,required:!0},subShowType:{type:String,required:!0,default:"line-simple"},chartOptions:{type:null,required:!0}},setup(e){const c=t(),o=a(i,e=>e,!0),p=15,d="Total",m=!0;const u=r(()=>{const{colDesc:t,xGroupByDesc:a,groupByDesc:r,data:s,modelName:n}=e.chartData,i=Array.from(new Set(s?.map(e=>e[a?.colDesc||""]))).filter(e=>null!=e)||[],l=r?.find(e=>!e.xAxis),c={title:{text:n},legend:{data:[]},xAxis:{name:a?.colDesc||"",data:i},dataZoom:[{type:"inside",disabled:i.length<p}]};if(1===r?.length)c.series=t.map(e=>({name:e,type:"line",smooth:m,data:s.map(t=>t[e]).filter(e=>null!=e)})),c.legend.data=t;else if(2===r?.length){const e=[...new Set(s.map(e=>String(e[l?.colDesc||""])))];c.legend.data=e,c.series=e.map(e=>function(e,t,a,r,s,n){const i=[];return t.forEach(t=>{const l=a.find(a=>a[r?.colDesc]===t&&a[s?.colDesc]===e);l?i.push(l[n[0]]):i.push(0)}),{name:e,type:"line",smooth:m,stack:d,areaStyle:{},data:i}}(e,i,s,a,l,t))}return c.series=c.series?.map(t=>{const a={...t};switch(e.subShowType){case"line-simple":default:delete a.areaStyle;break;case"area-basic":a.areaStyle={}}return a}),o(c,e.chartOptions)});return l({chartDOM:c,chartOptions:u,chartData:r(()=>e.chartData)}),(e,t)=>(n(),s("div",{ref_key:"dataChartLine",ref:c,class:"data-chart-line"},null,512))}});export{c as default};
2
2
  //# sourceMappingURL=line.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"line.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/line.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { LegendComponentOption } from 'echarts'\nimport type { EChartsOption, IFormatPublicData } from '../utils/types'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\ndefineOptions({\n name: 'DataChartLine',\n})\nconst {\n chartData,\n subShowType = 'line-simple',\n chartOptions,\n} = defineProps<{\n chartData: IFormatPublicData\n subShowType: string\n chartOptions: EChartsOption\n}>()\nconst dataChartLine = ref()\nconst merge = inject(InjectionChartMerge, (v: any) => v, true)\n\n// 抽取类型定义\ninterface SeriesItem {\n name: string\n type: 'line'\n stack?: string\n smooth?: boolean\n areaStyle?: Record<string, any>\n data: Array<string | number>\n}\n\n// 将配置提取为常量\nconst CHART_CONSTANTS = {\n MIN_ZOOM_LENGTH: 15,\n STACK_NAME: 'Total',\n SMOOTH: true,\n} as const\n\n// 提取处理图表系列数据的函数\nfunction processSeriesData(legendDataItem: string,\n xAxisData: (string | number)[],\n data: any[],\n xGroupByDesc: any,\n yGroupByDesc: any,\n colDesc: string[]): SeriesItem {\n const seriesData: (string | number)[] = []\n\n xAxisData.forEach((xAxisItem) => {\n const targetData = data\n .find(dataItem =>\n dataItem[xGroupByDesc?.colDesc] === xAxisItem\n && dataItem[yGroupByDesc?.colDesc] === legendDataItem,\n )\n\n if (targetData) {\n seriesData.push(targetData[colDesc[0]])\n }\n else {\n seriesData.push(0) // 或者其他默认值\n }\n })\n\n return {\n name: legendDataItem,\n type: 'line',\n smooth: CHART_CONSTANTS.SMOOTH,\n stack: CHART_CONSTANTS.STACK_NAME,\n areaStyle: {},\n data: seriesData,\n }\n}\n\nconst lineChartOptions = computed<EChartsOption>(() => {\n const { colDesc, xGroupByDesc, groupByDesc, data, modelName } = chartData\n const xAxisData = Array.from(new Set(data?.map(item => item[xGroupByDesc?.colDesc || '']))).filter(item => item !== undefined && item !== null) || []\n const yGroupByDesc = groupByDesc?.find(item => !item.xAxis)\n\n const config: EChartsOption & { series?: SeriesItem[] } = {\n title: { text: modelName },\n legend: { data: [] },\n xAxis: {\n name: xGroupByDesc?.colDesc || '',\n data: xAxisData,\n },\n dataZoom: [{\n type: 'inside',\n disabled: xAxisData.length < CHART_CONSTANTS.MIN_ZOOM_LENGTH,\n }],\n }\n\n // 处理系列数据\n if (groupByDesc?.length === 1) {\n config.series = colDesc.map(yItem => ({\n name: yItem,\n type: 'line',\n smooth: CHART_CONSTANTS.SMOOTH,\n data: data.map(item => item[yItem]).filter(item => item !== undefined && item !== null),\n }));\n (config.legend as LegendComponentOption).data = colDesc\n }\n else if (groupByDesc?.length === 2) {\n const legendData = [...new Set(data.map(item => String(item[yGroupByDesc?.colDesc || ''])))]\n ;(config.legend as LegendComponentOption).data = legendData\n\n config.series = legendData.map(legendDataItem =>\n processSeriesData(legendDataItem, xAxisData, data, xGroupByDesc, yGroupByDesc, colDesc),\n )\n }\n\n // 处理图表展示类型\n config.series = config.series?.map((item) => {\n const seriesItem = { ...item }\n\n switch (subShowType) {\n case 'line-simple':\n delete seriesItem.areaStyle\n break\n case 'area-basic':\n seriesItem.areaStyle = {}\n break\n default:\n delete seriesItem.areaStyle\n }\n\n return seriesItem\n })\n\n return merge(config, chartOptions)\n})\nuseCharts({\n chartDOM: dataChartLine,\n chartOptions: lineChartOptions,\n chartData: computed(() => chartData),\n})\n</script>\n\n<template>\n <div\n ref=\"dataChartLine\"\n class=\"data-chart-line\"\n />\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-line {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"names":["dataChartLine","ref","merge","inject","InjectionChartMerge","v","CHART_CONSTANTS","lineChartOptions","computed","colDesc","xGroupByDesc","groupByDesc","data","modelName","__props","chartData","xAxisData","Array","from","Set","map","item","filter","yGroupByDesc","find","xAxis","config","title","text","legend","name","dataZoom","type","disabled","length","series","yItem","smooth","legendData","String","legendDataItem","seriesData","forEach","xAxisItem","targetData","dataItem","push","stack","areaStyle","processSeriesData","seriesItem","subShowType","chartOptions","useCharts","chartDOM"],"mappings":"saAkBA,MAAMA,EAAgBC,IAChBC,EAAQC,EAAOC,GAAsBC,GAAWA,IAAG,GAanDC,EACa,GADbA,EAEQ,QAFRA,GAGI,EAqCJ,MAAAC,EAAmBC,GAAwB,KAC/C,MAAMC,QAAEA,EAASC,aAAAA,EAAAC,YAAcA,OAAaC,EAAMC,UAAAA,GAAcC,EAAAC,UAC1DC,EAAYC,MAAMC,KAAK,IAAIC,IAAIP,GAAMQ,KAAYC,GAAAA,EAAKX,GAAcD,SAAW,QAAOa,QAAOD,GAAQA,WAAwC,GAC7IE,EAAeZ,GAAaa,MAAaH,IAACA,EAAKI,QAE/CC,EAAoD,CACxDC,MAAO,CAAEC,KAAMf,GACfgB,OAAQ,CAAEjB,KAAM,IAChBa,MAAO,CACLK,KAAMpB,GAAcD,SAAW,GAC/BG,KAAMI,GAERe,SAAU,CAAC,CACTC,KAAM,SACNC,SAAUjB,EAAUkB,OAAS5B,KAK7B,GAAwB,IAAxBK,GAAauB,OACRR,EAAAS,OAAS1B,EAAQW,KAAcgB,IAAA,CACpCN,KAAMM,EACNJ,KAAM,OACNK,OAAQ/B,EACRM,KAAMA,EAAKQ,KAAIC,GAAQA,EAAKe,KAAQd,QAAOD,GAAQA,cAEpDK,EAAOG,OAAiCjB,KAAOH,OAClD,GACiC,IAAxBE,GAAauB,OAAc,CAClC,MAAMI,EAAa,IAAI,IAAInB,IAAIP,EAAKQ,KAAIC,GAAQkB,OAAOlB,EAAKE,GAAcd,SAAW,SACnFiB,EAAOG,OAAiCjB,KAAO0B,EAEjDZ,EAAOS,OAASG,EAAWlB,QAjE/B,SAA2BoB,EACzBxB,EACAJ,EACAF,EACAa,EACAd,GACA,MAAMgC,EAAkC,GAiBjC,OAfGzB,EAAA0B,SAASC,IACjB,MAAMC,EAAahC,EAChBY,MAAKqB,GACJA,EAASnC,GAAcD,WAAakC,GACjCE,EAAStB,GAAcd,WAAa+B,IAGvCI,EACFH,EAAWK,KAAKF,EAAWnC,EAAQ,KAGnCgC,EAAWK,KAAK,EAAC,IAId,CACLhB,KAAMU,EACNR,KAAM,OACNK,OAAQ/B,EACRyC,MAAOzC,EACP0C,UAAW,CAAC,EACZpC,KAAM6B,EACR,CAoCIQ,CAAkBT,EAAgBxB,EAAWJ,EAAMF,EAAca,EAAcd,IACjF,CAqBK,OAjBPiB,EAAOS,OAAST,EAAOS,QAAQf,KAAKC,IAC5B,MAAA6B,EAAa,IAAK7B,GAExB,OAAQP,EAAAqC,aACN,IAAK,cAML,eACSD,EAAWF,gBAJpB,IAAK,aACHE,EAAWF,UAAY,CAAC,EAMrB,OAAAE,CAAA,IAGFhD,EAAMwB,EAAQZ,EAAYsC,aAAA,WAEzBC,EAAA,CACRC,SAAUtD,EACVoD,aAAc7C,EACdQ,UAAWP,GAAS,IAAMM,EAAAC"}
1
+ {"version":3,"file":"line.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/line.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { LegendComponentOption } from 'echarts'\nimport type { EChartsOption, IFormatPublicData } from '../utils/types'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\ndefineOptions({\n name: 'DataChartLine',\n})\nconst {\n chartData,\n subShowType = 'line-simple',\n chartOptions,\n} = defineProps<{\n chartData: IFormatPublicData\n subShowType: string\n chartOptions: EChartsOption\n}>()\nconst dataChartLine = ref()\nconst merge = inject(InjectionChartMerge, (v: any) => v, true)\n\n// 抽取类型定义\ninterface SeriesItem {\n name: string\n type: 'line'\n stack?: string\n smooth?: boolean\n areaStyle?: Record<string, any>\n data: Array<string | number>\n}\n\n// 将配置提取为常量\nconst CHART_CONSTANTS = {\n MIN_ZOOM_LENGTH: 15,\n STACK_NAME: 'Total',\n SMOOTH: true,\n} as const\n\n// 提取处理图表系列数据的函数\nfunction processSeriesData(legendDataItem: string,\n xAxisData: (string | number)[],\n data: any[],\n xGroupByDesc: any,\n yGroupByDesc: any,\n colDesc: string[]): SeriesItem {\n const seriesData: (string | number)[] = []\n\n xAxisData.forEach((xAxisItem) => {\n const targetData = data\n .find(dataItem =>\n dataItem[xGroupByDesc?.colDesc] === xAxisItem\n && dataItem[yGroupByDesc?.colDesc] === legendDataItem,\n )\n\n if (targetData) {\n seriesData.push(targetData[colDesc[0]])\n }\n else {\n seriesData.push(0) // 或者其他默认值\n }\n })\n\n return {\n name: legendDataItem,\n type: 'line',\n smooth: CHART_CONSTANTS.SMOOTH,\n stack: CHART_CONSTANTS.STACK_NAME,\n areaStyle: {},\n data: seriesData,\n }\n}\n\nconst lineChartOptions = computed<EChartsOption>(() => {\n const { colDesc, xGroupByDesc, groupByDesc, data, modelName } = chartData\n const xAxisData = Array.from(new Set(data?.map(item => item[xGroupByDesc?.colDesc || '']))).filter(item => item !== undefined && item !== null) || []\n const yGroupByDesc = groupByDesc?.find(item => !item.xAxis)\n\n const config: EChartsOption & { series?: SeriesItem[] } = {\n title: { text: modelName },\n legend: { data: [] },\n xAxis: {\n name: xGroupByDesc?.colDesc || '',\n data: xAxisData,\n },\n dataZoom: [{\n type: 'inside',\n disabled: xAxisData.length < CHART_CONSTANTS.MIN_ZOOM_LENGTH,\n }],\n }\n\n // 处理系列数据\n if (groupByDesc?.length === 1) {\n config.series = colDesc.map(yItem => ({\n name: yItem,\n type: 'line',\n smooth: CHART_CONSTANTS.SMOOTH,\n data: data.map(item => item[yItem]).filter(item => item !== undefined && item !== null),\n }));\n (config.legend as LegendComponentOption).data = colDesc\n }\n else if (groupByDesc?.length === 2) {\n const legendData = [...new Set(data.map(item => String(item[yGroupByDesc?.colDesc || ''])))]\n ;(config.legend as LegendComponentOption).data = legendData\n\n config.series = legendData.map(legendDataItem =>\n processSeriesData(legendDataItem, xAxisData, data, xGroupByDesc, yGroupByDesc, colDesc),\n )\n }\n\n // 处理图表展示类型\n config.series = config.series?.map((item) => {\n const seriesItem = { ...item }\n\n switch (subShowType) {\n case 'line-simple':\n delete seriesItem.areaStyle\n break\n case 'area-basic':\n seriesItem.areaStyle = {}\n break\n default:\n delete seriesItem.areaStyle\n }\n\n return seriesItem\n })\n\n return merge(config, chartOptions)\n})\nuseCharts({\n chartDOM: dataChartLine,\n chartOptions: lineChartOptions,\n chartData: computed(() => chartData),\n})\n</script>\n\n<template>\n <div\n ref=\"dataChartLine\"\n class=\"data-chart-line\"\n />\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-line {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"names":["dataChartLine","ref","merge","inject","InjectionChartMerge","v","CHART_CONSTANTS","lineChartOptions","computed","colDesc","xGroupByDesc","groupByDesc","data","modelName","__props","chartData","xAxisData","Array","from","Set","map","item","filter","yGroupByDesc","find","xAxis","config","title","text","legend","name","dataZoom","type","disabled","length","series","yItem","smooth","legendData","String","legendDataItem","seriesData","forEach","xAxisItem","targetData","dataItem","push","stack","areaStyle","processSeriesData","seriesItem","subShowType","chartOptions","useCharts","chartDOM","_createElementBlock","class"],"mappings":"saAkBA,MAAMA,EAAgBC,IAChBC,EAAQC,EAAOC,EAAsBC,GAAWA,GAAG,GAanDC,EACa,GADbA,EAEQ,QAFRA,GAGI,EAqCV,MAAMC,EAAmBC,EAAwB,KAC/C,MAAMC,QAAEA,EAAAC,aAASA,EAAAC,YAAcA,OAAaC,EAAAC,UAAMA,GAAcC,EAAAC,UAC1DC,EAAYC,MAAMC,KAAK,IAAIC,IAAIP,GAAMQ,IAAIC,GAAQA,EAAKX,GAAcD,SAAW,OAAOa,OAAOD,GAAQA,UAAwC,GAC7IE,EAAeZ,GAAaa,KAAKH,IAASA,EAAKI,OAE/CC,EAAoD,CACxDC,MAAO,CAAEC,KAAMf,GACfgB,OAAQ,CAAEjB,KAAM,IAChBa,MAAO,CACLK,KAAMpB,GAAcD,SAAW,GAC/BG,KAAMI,GAERe,SAAU,CAAC,CACTC,KAAM,SACNC,SAAUjB,EAAUkB,OAAS5B,KAKjC,GAA4B,IAAxBK,GAAauB,OACfR,EAAOS,OAAS1B,EAAQW,IAAIgB,IAAA,CAC1BN,KAAMM,EACNJ,KAAM,OACNK,OAAQ/B,EACRM,KAAMA,EAAKQ,IAAIC,GAAQA,EAAKe,IAAQd,OAAOD,GAAQA,YAEpDK,EAAOG,OAAiCjB,KAAOH,OAClD,GACiC,IAAxBE,GAAauB,OAAc,CAClC,MAAMI,EAAa,IAAI,IAAInB,IAAIP,EAAKQ,IAAIC,GAAQkB,OAAOlB,EAAKE,GAAcd,SAAW,QACnFiB,EAAOG,OAAiCjB,KAAO0B,EAEjDZ,EAAOS,OAASG,EAAWlB,OAjE/B,SAA2BoB,EACzBxB,EACAJ,EACAF,EACAa,EACAd,GACA,MAAMgC,EAAkC,GAiBxC,OAfAzB,EAAU0B,QAASC,IACjB,MAAMC,EAAahC,EAChBY,KAAKqB,GACJA,EAASnC,GAAcD,WAAakC,GACjCE,EAAStB,GAAcd,WAAa+B,GAGvCI,EACFH,EAAWK,KAAKF,EAAWnC,EAAQ,KAGnCgC,EAAWK,KAAK,KAIb,CACLhB,KAAMU,EACNR,KAAM,OACNK,OAAQ/B,EACRyC,MAAOzC,EACP0C,UAAW,CAAA,EACXpC,KAAM6B,EAEV,CAmCMQ,CAAkBT,EAAgBxB,EAAWJ,EAAMF,EAAca,EAAcd,GAEnF,CAoBA,OAjBAiB,EAAOS,OAAST,EAAOS,QAAQf,IAAKC,IAClC,MAAM6B,EAAa,IAAK7B,GAExB,OAAQP,EAAAqC,aACN,IAAK,cAML,eACSD,EAAWF,gBAJpB,IAAK,aACHE,EAAWF,UAAY,CAAA,EAM3B,OAAOE,IAGFhD,EAAMwB,EAAQZ,EAAAsC,uBAEvBC,EAAU,CACRC,SAAUtD,EACVoD,aAAc7C,EACdQ,UAAWP,EAAS,IAAMM,EAAAC,yBAK1BwC,EAGE,MAAA,SAFI,gBAAJtD,IAAID,EACJwD,MAAM"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,inject as t,ref as r,computed as a,createElementBlock as o,openBlock as i}from"vue";import{orderBy as s}from"lodash-es";import{InjectionChartMerge as c}from"../utils/injectionKeys.mjs";import{useCharts as l}from"../utils/useCharts.mjs";var n=e({name:"DataChartPie",__name:"pie",props:{chartData:{type:Object,required:!0},subShowType:{type:String,required:!0,default:"pie-simple"},chartOptions:{type:null,required:!0}},setup(e){const n=t(c,(e=>e),!0),h=r(null),m=a((()=>{const{colDesc:t,xGroupByDesc:r,data:a,modelName:o}=e.chartData,i=t.length,c={title:{text:o},series:t.map(((t,o)=>{const c={name:t,type:"pie",center:["50%","50%"],data:[],emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}},label:{formatter:"{b}:{c}({d}%)",rich:{b:{color:"#4C5058",fontSize:14,fontWeight:"bold",lineHeight:33}}}};let l=5;const n=a.filter((e=>void 0!==e[t])),h=s(n,[t],["desc"]),m=h.reduce(((e,r)=>{const a=Number(r[t])||0;return Number.isNaN(a)?e:e+a}),0);if(n.length>l)for(;l<9;){const e=h.slice(0,l);if(e.reduce(((e,r)=>e+Number(r[t])),0)/m>.9||8===l){const a=h.slice(l,h.length-1);c.data=n.map((a=>{let o={};return e.forEach((e=>{JSON.stringify(e)===JSON.stringify(a)&&(o={name:r?.colDesc?a[r.colDesc]:"",value:a[t]})})),o})).filter((e=>e&&Object.keys(e).length>0)),c.data.push({name:"其它",value:a.reduce(((e,r)=>e+Number(r[t])),0)});break}l++}else c.data=n.map((e=>({name:r?.colDesc&&e[r.colDesc]||"",value:Number(e[t]||0)})));if(1===i?c.center=["50%","60%"]:2===i?0===o?(c.right="40%",c.left="",c.center=["40%","60%"]):(c.right="",c.left="40%",c.center=["60%","60%"]):3===i?0===o?(c.right="40%",c.bottom="50%",c.top="",c.left="",c.center=["40%","78%"]):1===o?(c.right="",c.bottom="50%",c.top="",c.left="40%",c.center=["60%","78%"]):(c.right="40%",c.bottom="",c.top="50%",c.left="",c.center=["40%","60%"]):4===i&&(0===o?(c.right="40%",c.bottom="50%",c.top="",c.left="",c.center=["40%","78%"]):1===o?(c.right="",c.bottom="50%",c.top="",c.left="40%",c.center=["60%","78%"]):2===o?(c.right="40%",c.bottom="",c.top="50%",c.left="",c.center=["40%","60%"]):(c.right="",c.bottom="",c.top="50%",c.left="40%",c.center=["60%","60%"])),"pie-borderRadius"===e.subShowType)c.radius=["50%","70%"];else c.radius="50%";return c}))};return n(c,e.chartOptions)}));return l({chartDOM:h,chartOptions:m,chartData:a((()=>e.chartData))}),(e,t)=>(i(),o("div",{ref_key:"dataChartPie",ref:h,class:"data-chart-pie"},null,512))}});export{n as default};
1
+ import{defineComponent as e,inject as t,ref as r,computed as a,createElementBlock as o,openBlock as i}from"vue";import{orderBy as s}from"lodash-es";import{InjectionChartMerge as c}from"../utils/injectionKeys.mjs";import{useCharts as l}from"../utils/useCharts.mjs";var n=e({name:"DataChartPie",__name:"pie",props:{chartData:{type:Object,required:!0},subShowType:{type:String,required:!0,default:"pie-simple"},chartOptions:{type:null,required:!0}},setup(e){const n=t(c,e=>e,!0),h=r(null),m=a(()=>{const{colDesc:t,xGroupByDesc:r,data:a,modelName:o}=e.chartData,i=t.length,c={title:{text:o},series:t.map((t,o)=>{const c={name:t,type:"pie",center:["50%","50%"],data:[],emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}},label:{formatter:"{b}:{c}({d}%)",rich:{b:{color:"#4C5058",fontSize:14,fontWeight:"bold",lineHeight:33}}}};let l=5;const n=a.filter(e=>void 0!==e[t]),h=s(n,[t],["desc"]),m=h.reduce((e,r)=>{const a=Number(r[t])||0;return Number.isNaN(a)?e:e+a},0);if(n.length>l)for(;l<9;){const e=h.slice(0,l);if(e.reduce((e,r)=>e+Number(r[t]),0)/m>.9||8===l){const a=h.slice(l,h.length-1);c.data=n.map(a=>{let o={};return e.forEach(e=>{JSON.stringify(e)===JSON.stringify(a)&&(o={name:r?.colDesc?a[r.colDesc]:"",value:a[t]})}),o}).filter(e=>e&&Object.keys(e).length>0),c.data.push({name:"其它",value:a.reduce((e,r)=>e+Number(r[t]),0)});break}l++}else c.data=n.map(e=>({name:r?.colDesc&&e[r.colDesc]||"",value:Number(e[t]||0)}));if(1===i?c.center=["50%","60%"]:2===i?0===o?(c.right="40%",c.left="",c.center=["40%","60%"]):(c.right="",c.left="40%",c.center=["60%","60%"]):3===i?0===o?(c.right="40%",c.bottom="50%",c.top="",c.left="",c.center=["40%","78%"]):1===o?(c.right="",c.bottom="50%",c.top="",c.left="40%",c.center=["60%","78%"]):(c.right="40%",c.bottom="",c.top="50%",c.left="",c.center=["40%","60%"]):4===i&&(0===o?(c.right="40%",c.bottom="50%",c.top="",c.left="",c.center=["40%","78%"]):1===o?(c.right="",c.bottom="50%",c.top="",c.left="40%",c.center=["60%","78%"]):2===o?(c.right="40%",c.bottom="",c.top="50%",c.left="",c.center=["40%","60%"]):(c.right="",c.bottom="",c.top="50%",c.left="40%",c.center=["60%","60%"])),"pie-borderRadius"===e.subShowType)c.radius=["50%","70%"];else c.radius="50%";return c})};return n(c,e.chartOptions)});return l({chartDOM:h,chartOptions:m,chartData:a(()=>e.chartData)}),(e,t)=>(i(),o("div",{ref_key:"dataChartPie",ref:h,class:"data-chart-pie"},null,512))}});export{n as default};
2
2
  //# sourceMappingURL=pie.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"pie.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/pie.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PieSeriesOption } from 'echarts/charts'\nimport type { EChartsOption, IFormatPublicData } from '../utils/types'\nimport { orderBy } from 'lodash-es'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\ndefineOptions({\n name: 'DataChartPie',\n})\nconst {\n chartData,\n subShowType = 'pie-simple',\n chartOptions,\n} = defineProps<{\n chartData: IFormatPublicData\n subShowType: string\n chartOptions: EChartsOption\n}>()\nconst merge = inject(InjectionChartMerge, (v: any) => v, true)\n\nconst dataChartPie = ref(null)\nconst pieChartOptions = computed<EChartsOption>(() => {\n const { colDesc, xGroupByDesc, data, modelName } = chartData\n const colDescLength = colDesc.length\n const config = {\n title: { text: modelName },\n series: colDesc.map((item, index) => {\n const seriesItem: PieSeriesOption = {\n name: item,\n type: 'pie',\n center: ['50%', '50%'],\n data: [],\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)',\n },\n },\n label: {\n formatter: '{b}:{c}({d}%)',\n rich: {\n b: {\n color: '#4C5058',\n fontSize: 14,\n fontWeight: 'bold',\n lineHeight: 33,\n },\n },\n },\n }\n\n let cutNum = 5\n const currentItemData = data.filter(row => row[item] !== undefined)\n const orderByData = orderBy(currentItemData, [item], ['desc'])\n // 总数\n const totalDesc = orderByData.reduce((prev, cur) => {\n const value = Number(cur[item]) || 0\n return Number.isNaN(value) ? prev : prev + value\n }, 0)\n if (currentItemData.length > cutNum) {\n while (cutNum < 9) {\n const headerData = orderByData.slice(0, cutNum)\n // 前 cutNum 个总数\n const headerTotal = headerData.reduce(\n (prev, cur) => prev + Number(cur[item]),\n 0,\n )\n // 前五总占比\n const headerScale = headerTotal / totalDesc\n if (headerScale > 0.9 || cutNum === 8) {\n const footerData = orderByData.slice(\n cutNum,\n orderByData.length - 1,\n )\n seriesItem.data = currentItemData\n .map((yItem) => {\n let obj = {}\n headerData.forEach((headerDataItem) => {\n if (JSON.stringify(headerDataItem) === JSON.stringify(yItem)) {\n obj = {\n name: xGroupByDesc?.colDesc\n ? yItem[xGroupByDesc.colDesc]\n : '',\n value: yItem[item],\n }\n }\n })\n return obj\n })\n .filter(v => v && Object.keys(v).length > 0)\n seriesItem.data.push({\n name: '其它',\n value: footerData.reduce(\n (prev, cur) => prev + Number(cur[item]),\n 0,\n ),\n })\n\n break\n }\n else {\n cutNum++\n }\n }\n }\n else {\n seriesItem.data = currentItemData.map(yItem => ({\n name: xGroupByDesc?.colDesc ? (yItem[xGroupByDesc.colDesc] || '') : '',\n value: Number(yItem[item] || 0),\n }))\n }\n\n if (colDescLength === 1) {\n seriesItem.center = ['50%', '60%']\n }\n else if (colDescLength === 2) {\n if (index === 0) {\n seriesItem.right = '40%'\n seriesItem.left = ''\n seriesItem.center = ['40%', '60%']\n }\n else {\n seriesItem.right = ''\n seriesItem.left = '40%'\n seriesItem.center = ['60%', '60%']\n }\n }\n else if (colDescLength === 3) {\n if (index === 0) {\n seriesItem.right = '40%'\n seriesItem.bottom = '50%'\n seriesItem.top = ''\n seriesItem.left = ''\n seriesItem.center = ['40%', '78%']\n }\n else if (index === 1) {\n seriesItem.right = ''\n seriesItem.bottom = '50%'\n seriesItem.top = ''\n seriesItem.left = '40%'\n seriesItem.center = ['60%', '78%']\n }\n else {\n seriesItem.right = '40%'\n seriesItem.bottom = ''\n seriesItem.top = '50%'\n seriesItem.left = ''\n seriesItem.center = ['40%', '60%']\n }\n }\n else if (colDescLength === 4) {\n if (index === 0) {\n seriesItem.right = '40%'\n seriesItem.bottom = '50%'\n seriesItem.top = ''\n seriesItem.left = ''\n seriesItem.center = ['40%', '78%']\n }\n else if (index === 1) {\n seriesItem.right = ''\n seriesItem.bottom = '50%'\n seriesItem.top = ''\n seriesItem.left = '40%'\n seriesItem.center = ['60%', '78%']\n }\n else if (index === 2) {\n seriesItem.right = '40%'\n seriesItem.bottom = ''\n seriesItem.top = '50%'\n seriesItem.left = ''\n seriesItem.center = ['40%', '60%']\n }\n else {\n seriesItem.right = ''\n seriesItem.bottom = ''\n seriesItem.top = '50%'\n seriesItem.left = '40%'\n seriesItem.center = ['60%', '60%']\n }\n }\n // 处理图表形状\n switch (subShowType) {\n case 'pie-borderRadius':\n seriesItem.radius = ['50%', '70%']\n break\n case 'pie-simple':\n seriesItem.radius = '50%'\n break\n default:\n seriesItem.radius = '50%'\n break\n }\n return seriesItem\n }),\n }\n\n return merge(config, chartOptions)\n})\n\nuseCharts({\n chartDOM: dataChartPie,\n chartOptions: pieChartOptions,\n chartData: computed(() => chartData),\n})\n</script>\n\n<template>\n <div\n ref=\"dataChartPie\"\n class=\"data-chart-pie\"\n />\n</template>\n"],"names":["merge","inject","InjectionChartMerge","v","dataChartPie","ref","pieChartOptions","computed","colDesc","xGroupByDesc","data","modelName","__props","chartData","colDescLength","length","config","title","text","series","map","item","index","seriesItem","name","type","center","emphasis","itemStyle","shadowBlur","shadowOffsetX","shadowColor","label","formatter","rich","b","color","fontSize","fontWeight","lineHeight","cutNum","currentItemData","filter","row","orderByData","orderBy","totalDesc","reduce","prev","cur","value","Number","isNaN","headerData","slice","footerData","yItem","obj","forEach","headerDataItem","JSON","stringify","Object","keys","push","right","left","bottom","top","subShowType","radius","chartOptions","useCharts","chartDOM"],"mappings":"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"}
1
+ {"version":3,"file":"pie.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/pie.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PieSeriesOption } from 'echarts/charts'\nimport type { EChartsOption, IFormatPublicData } from '../utils/types'\nimport { orderBy } from 'lodash-es'\nimport { InjectionChartMerge } from '../utils/injectionKeys'\nimport { useCharts } from '../utils/useCharts'\n\ndefineOptions({\n name: 'DataChartPie',\n})\nconst {\n chartData,\n subShowType = 'pie-simple',\n chartOptions,\n} = defineProps<{\n chartData: IFormatPublicData\n subShowType: string\n chartOptions: EChartsOption\n}>()\nconst merge = inject(InjectionChartMerge, (v: any) => v, true)\n\nconst dataChartPie = ref(null)\nconst pieChartOptions = computed<EChartsOption>(() => {\n const { colDesc, xGroupByDesc, data, modelName } = chartData\n const colDescLength = colDesc.length\n const config = {\n title: { text: modelName },\n series: colDesc.map((item, index) => {\n const seriesItem: PieSeriesOption = {\n name: item,\n type: 'pie',\n center: ['50%', '50%'],\n data: [],\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)',\n },\n },\n label: {\n formatter: '{b}:{c}({d}%)',\n rich: {\n b: {\n color: '#4C5058',\n fontSize: 14,\n fontWeight: 'bold',\n lineHeight: 33,\n },\n },\n },\n }\n\n let cutNum = 5\n const currentItemData = data.filter(row => row[item] !== undefined)\n const orderByData = orderBy(currentItemData, [item], ['desc'])\n // 总数\n const totalDesc = orderByData.reduce((prev, cur) => {\n const value = Number(cur[item]) || 0\n return Number.isNaN(value) ? prev : prev + value\n }, 0)\n if (currentItemData.length > cutNum) {\n while (cutNum < 9) {\n const headerData = orderByData.slice(0, cutNum)\n // 前 cutNum 个总数\n const headerTotal = headerData.reduce(\n (prev, cur) => prev + Number(cur[item]),\n 0,\n )\n // 前五总占比\n const headerScale = headerTotal / totalDesc\n if (headerScale > 0.9 || cutNum === 8) {\n const footerData = orderByData.slice(\n cutNum,\n orderByData.length - 1,\n )\n seriesItem.data = currentItemData\n .map((yItem) => {\n let obj = {}\n headerData.forEach((headerDataItem) => {\n if (JSON.stringify(headerDataItem) === JSON.stringify(yItem)) {\n obj = {\n name: xGroupByDesc?.colDesc\n ? yItem[xGroupByDesc.colDesc]\n : '',\n value: yItem[item],\n }\n }\n })\n return obj\n })\n .filter(v => v && Object.keys(v).length > 0)\n seriesItem.data.push({\n name: '其它',\n value: footerData.reduce(\n (prev, cur) => prev + Number(cur[item]),\n 0,\n ),\n })\n\n break\n }\n else {\n cutNum++\n }\n }\n }\n else {\n seriesItem.data = currentItemData.map(yItem => ({\n name: xGroupByDesc?.colDesc ? (yItem[xGroupByDesc.colDesc] || '') : '',\n value: Number(yItem[item] || 0),\n }))\n }\n\n if (colDescLength === 1) {\n seriesItem.center = ['50%', '60%']\n }\n else if (colDescLength === 2) {\n if (index === 0) {\n seriesItem.right = '40%'\n seriesItem.left = ''\n seriesItem.center = ['40%', '60%']\n }\n else {\n seriesItem.right = ''\n seriesItem.left = '40%'\n seriesItem.center = ['60%', '60%']\n }\n }\n else if (colDescLength === 3) {\n if (index === 0) {\n seriesItem.right = '40%'\n seriesItem.bottom = '50%'\n seriesItem.top = ''\n seriesItem.left = ''\n seriesItem.center = ['40%', '78%']\n }\n else if (index === 1) {\n seriesItem.right = ''\n seriesItem.bottom = '50%'\n seriesItem.top = ''\n seriesItem.left = '40%'\n seriesItem.center = ['60%', '78%']\n }\n else {\n seriesItem.right = '40%'\n seriesItem.bottom = ''\n seriesItem.top = '50%'\n seriesItem.left = ''\n seriesItem.center = ['40%', '60%']\n }\n }\n else if (colDescLength === 4) {\n if (index === 0) {\n seriesItem.right = '40%'\n seriesItem.bottom = '50%'\n seriesItem.top = ''\n seriesItem.left = ''\n seriesItem.center = ['40%', '78%']\n }\n else if (index === 1) {\n seriesItem.right = ''\n seriesItem.bottom = '50%'\n seriesItem.top = ''\n seriesItem.left = '40%'\n seriesItem.center = ['60%', '78%']\n }\n else if (index === 2) {\n seriesItem.right = '40%'\n seriesItem.bottom = ''\n seriesItem.top = '50%'\n seriesItem.left = ''\n seriesItem.center = ['40%', '60%']\n }\n else {\n seriesItem.right = ''\n seriesItem.bottom = ''\n seriesItem.top = '50%'\n seriesItem.left = '40%'\n seriesItem.center = ['60%', '60%']\n }\n }\n // 处理图表形状\n switch (subShowType) {\n case 'pie-borderRadius':\n seriesItem.radius = ['50%', '70%']\n break\n case 'pie-simple':\n seriesItem.radius = '50%'\n break\n default:\n seriesItem.radius = '50%'\n break\n }\n return seriesItem\n }),\n }\n\n return merge(config, chartOptions)\n})\n\nuseCharts({\n chartDOM: dataChartPie,\n chartOptions: pieChartOptions,\n chartData: computed(() => chartData),\n})\n</script>\n\n<template>\n <div\n ref=\"dataChartPie\"\n class=\"data-chart-pie\"\n />\n</template>\n"],"names":["merge","inject","InjectionChartMerge","v","dataChartPie","ref","pieChartOptions","computed","colDesc","xGroupByDesc","data","modelName","__props","chartData","colDescLength","length","config","title","text","series","map","item","index","seriesItem","name","type","center","emphasis","itemStyle","shadowBlur","shadowOffsetX","shadowColor","label","formatter","rich","b","color","fontSize","fontWeight","lineHeight","cutNum","currentItemData","filter","row","orderByData","orderBy","totalDesc","reduce","prev","cur","value","Number","isNaN","headerData","slice","footerData","yItem","obj","forEach","headerDataItem","JSON","stringify","Object","keys","push","right","left","bottom","top","subShowType","radius","chartOptions","useCharts","chartDOM","_createElementBlock","class"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as a,ref as r,inject as t,computed as e,createElementBlock as o,openBlock as s}from"vue";import{uniq as m}from"lodash-es";import{InjectionChartMerge as u}from"../utils/injectionKeys.mjs";import{useCharts as p}from"../utils/useCharts.mjs";var c=a({name:"DataChartRadar",__name:"radar",props:{chartData:{type:Object,required:!0},chartOptions:{type:null,required:!0}},setup(a){const c=r(),l=t(u,(a=>a),!0),i=e((()=>{const{colDesc:r,xGroupByDesc:t,modelName:e,data:o}=a.chartData;t?.groupByValues||(t.groupByValues=[]),t.groupByValues=m(o.map((a=>a[t.colDesc||""])).filter((a=>a)));const s={title:{text:e},radar:{indicator:t?.groupByValues?.map((a=>({name:a,max:Math.max(...o.map((a=>Number(a[r[0]]))))})))||[]},series:[{name:t?.colDesc,type:"radar",tooltip:{trigger:"item"},data:r.map((a=>({name:a,value:t?.groupByValues?.map((r=>o.map((e=>r===e[t.colDesc||""]?e[a]:null)).filter((a=>a)).reduce(((a,r)=>Number(a||0)+Number(r||0)),0)))})))}]};return l(s,a.chartOptions)}));return p({chartDOM:c,chartOptions:i,chartData:e((()=>a.chartData))}),(a,r)=>(s(),o("div",{ref_key:"dataChartRadar",ref:c,class:"data-chart-radar"},null,512))}});export{c as default};
1
+ import{defineComponent as a,ref as r,inject as t,computed as e,createElementBlock as o,openBlock as s}from"vue";import{uniq as m}from"lodash-es";import{InjectionChartMerge as u}from"../utils/injectionKeys.mjs";import{useCharts as p}from"../utils/useCharts.mjs";var c=a({name:"DataChartRadar",__name:"radar",props:{chartData:{type:Object,required:!0},chartOptions:{type:null,required:!0}},setup(a){const c=r(),l=t(u,a=>a,!0),i=e(()=>{const{colDesc:r,xGroupByDesc:t,modelName:e,data:o}=a.chartData;t?.groupByValues||(t.groupByValues=[]),t.groupByValues=m(o.map(a=>a[t.colDesc||""]).filter(a=>a));const s={title:{text:e},radar:{indicator:t?.groupByValues?.map(a=>({name:a,max:Math.max(...o.map(a=>Number(a[r[0]])))}))||[]},series:[{name:t?.colDesc,type:"radar",tooltip:{trigger:"item"},data:r.map(a=>({name:a,value:t?.groupByValues?.map(r=>o.map(e=>r===e[t.colDesc||""]?e[a]:null).filter(a=>a).reduce((a,r)=>Number(a||0)+Number(r||0),0))}))}]};return l(s,a.chartOptions)});return p({chartDOM:c,chartOptions:i,chartData:e(()=>a.chartData)}),(a,r)=>(s(),o("div",{ref_key:"dataChartRadar",ref:c,class:"data-chart-radar"},null,512))}});export{c as default};
2
2
  //# sourceMappingURL=radar.vue.mjs.map