@ibiz-template/vue3-components 0.1.0 → 0.1.2

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 (113) hide show
  1. package/dist/chart-efad8ee0.js.map +1 -1
  2. package/dist/index.min.css +1 -1
  3. package/dist/index.system.min.js +3 -3
  4. package/dist/index.system.min.js.map +1 -1
  5. package/es/_virtual/_commonjsHelpers.mjs +1 -4
  6. package/es/common/control-base/control-base.d.ts +2 -2
  7. package/es/common/control-base/control-base.mjs +6 -6
  8. package/es/control/exp-bar/exp-bar.controller.mjs +8 -6
  9. package/es/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.mjs +1 -1
  10. package/es/control/form/form-detail/form-group-panel/form-group-panel.mjs +7 -3
  11. package/es/control/grid/grid/grid-column.controller.d.ts +1 -1
  12. package/es/control/grid/grid/grid-column.controller.mjs +1 -1
  13. package/es/control/grid/grid/grid.css +1 -1
  14. package/es/control/grid/grid/grid.d.ts +2 -2
  15. package/es/control/grid/grid/grid.mjs +4 -4
  16. package/es/control/grid/grid/index.d.ts +3 -1
  17. package/es/control/grid/grid-column/grid-field-column/grid-field-column.css +1 -1
  18. package/es/control/grid/grid-column/grid-field-column/grid-field-column.d.ts +0 -1
  19. package/es/control/grid/grid-column/grid-field-column/grid-field-column.mjs +1 -20
  20. package/es/control/grid/grid-column/grid-field-column/index.d.ts +0 -1
  21. package/es/control/grid/grid-column/grid-field-edit-column/grid-edit-item/grid-edit-item.css +1 -1
  22. package/es/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.d.ts +0 -1
  23. package/es/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.mjs +1 -20
  24. package/es/control/grid/grid-column/grid-field-edit-column/index.d.ts +0 -1
  25. package/es/control/grid/grid-column/grid-ua-column/grid-ua-column.css +1 -1
  26. package/es/control/grid/grid-column/grid-ua-column/grid-ua-column.d.ts +0 -1
  27. package/es/control/grid/grid-column/grid-ua-column/grid-ua-column.mjs +1 -20
  28. package/es/control/grid/grid-column/grid-ua-column/index.d.ts +0 -1
  29. package/es/control/panel/view-layout-panel/view-layout-panel.mjs +1 -1
  30. package/es/control/pickup-view-panel/index.d.ts +10 -0
  31. package/es/control/pickup-view-panel/pickup-view-panel.d.ts +10 -0
  32. package/es/control/pickup-view-panel/pickup-view-panel.mjs +17 -5
  33. package/es/control/tab-exp-panel/tab-exp-panel.controller.d.ts +2 -7
  34. package/es/control/wizard-panel/wizard-panel.controller.d.ts +14 -0
  35. package/es/control/wizard-panel/wizard-panel.controller.mjs +29 -4
  36. package/es/control/wizard-panel/wizard-panel.css +1 -1
  37. package/es/control/wizard-panel/wizard-panel.mjs +33 -10
  38. package/es/editor/code/monaco-editor/monaco-editor.mjs +3 -3
  39. package/es/editor/data-picker/ibiz-picker-link/ibiz-picker-link.css +1 -1
  40. package/es/editor/text-box/input/input.css +1 -1
  41. package/es/panel-component/panel-button/index.d.ts +1 -1
  42. package/es/panel-component/panel-button/panel-button.d.ts +1 -1
  43. package/es/panel-component/panel-button/panel-button.mjs +17 -14
  44. package/es/panel-component/panel-ctrl-pos/panel-ctrl-pos.mjs +1 -1
  45. package/es/panel-component/single-data-container/single-data-container.controller.d.ts +29 -0
  46. package/es/panel-component/single-data-container/single-data-container.controller.mjs +88 -1
  47. package/es/view/common/index.d.ts +1 -1
  48. package/es/view/common/view.d.ts +2 -2
  49. package/es/view/common/view.mjs +7 -7
  50. package/es/view-engine/data-view.engine.d.ts +1 -1
  51. package/es/view-engine/data-view.engine.mjs +2 -2
  52. package/es/view-engine/edit-view.engine.d.ts +1 -1
  53. package/es/view-engine/edit-view.engine.mjs +4 -5
  54. package/es/view-engine/index.mjs +14 -0
  55. package/es/view-engine/opt-view.engine.d.ts +1 -1
  56. package/es/view-engine/opt-view.engine.mjs +5 -3
  57. package/es/view-engine/pickup-data-view.engine.d.ts +18 -0
  58. package/es/view-engine/pickup-data-view.engine.mjs +41 -0
  59. package/es/view-engine/pickup-view2.engine.d.ts +61 -0
  60. package/es/view-engine/pickup-view2.engine.mjs +116 -0
  61. package/lib/_virtual/_commonjsHelpers.cjs +1 -4
  62. package/lib/common/control-base/control-base.cjs +6 -6
  63. package/lib/control/exp-bar/exp-bar.controller.cjs +8 -6
  64. package/lib/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.cjs +1 -1
  65. package/lib/control/form/form-detail/form-group-panel/form-group-panel.cjs +7 -3
  66. package/lib/control/grid/grid/grid-column.controller.cjs +1 -1
  67. package/lib/control/grid/grid/grid.cjs +4 -4
  68. package/lib/control/grid/grid/grid.css +1 -1
  69. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.cjs +0 -19
  70. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.css +1 -1
  71. package/lib/control/grid/grid-column/grid-field-edit-column/grid-edit-item/grid-edit-item.css +1 -1
  72. package/lib/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.cjs +1 -20
  73. package/lib/control/grid/grid-column/grid-ua-column/grid-ua-column.cjs +0 -19
  74. package/lib/control/grid/grid-column/grid-ua-column/grid-ua-column.css +1 -1
  75. package/lib/control/panel/view-layout-panel/view-layout-panel.cjs +1 -1
  76. package/lib/control/pickup-view-panel/pickup-view-panel.cjs +17 -5
  77. package/lib/control/wizard-panel/wizard-panel.cjs +32 -9
  78. package/lib/control/wizard-panel/wizard-panel.controller.cjs +29 -4
  79. package/lib/control/wizard-panel/wizard-panel.css +1 -1
  80. package/lib/editor/code/monaco-editor/monaco-editor.cjs +3 -3
  81. package/lib/editor/data-picker/ibiz-picker-link/ibiz-picker-link.css +1 -1
  82. package/lib/editor/text-box/input/input.css +1 -1
  83. package/lib/panel-component/panel-button/panel-button.cjs +17 -14
  84. package/lib/panel-component/panel-ctrl-pos/panel-ctrl-pos.cjs +1 -1
  85. package/lib/panel-component/single-data-container/single-data-container.controller.cjs +88 -1
  86. package/lib/view/common/view.cjs +7 -7
  87. package/lib/view-engine/data-view.engine.cjs +2 -2
  88. package/lib/view-engine/edit-view.engine.cjs +4 -5
  89. package/lib/view-engine/index.cjs +14 -0
  90. package/lib/view-engine/opt-view.engine.cjs +5 -3
  91. package/lib/view-engine/pickup-data-view.engine.cjs +43 -0
  92. package/lib/view-engine/pickup-view2.engine.cjs +118 -0
  93. package/package.json +28 -29
  94. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/_virtual/_rollupPluginBabelHelpers.mjs +0 -0
  95. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/config/index.mjs +0 -0
  96. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/index.mjs +0 -0
  97. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/loader/index.mjs +0 -0
  98. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/compose.mjs +0 -0
  99. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/curry.mjs +0 -0
  100. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/deepMerge.mjs +0 -0
  101. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/isObject.mjs +0 -0
  102. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/makeCancelable.mjs +0 -0
  103. /package/es/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/validators/index.mjs +0 -0
  104. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/_virtual/_rollupPluginBabelHelpers.cjs +0 -0
  105. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/config/index.cjs +0 -0
  106. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/index.cjs +0 -0
  107. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/loader/index.cjs +0 -0
  108. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/compose.cjs +0 -0
  109. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/curry.cjs +0 -0
  110. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/deepMerge.cjs +0 -0
  111. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/isObject.cjs +0 -0
  112. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/utils/makeCancelable.cjs +0 -0
  113. /package/lib/node_modules/.pnpm/{@monaco-editor_loader@1.3.3_monaco-editor@0.40.0 → @monaco-editor_loader@1.3.3_monaco-editor@0.41.0}/node_modules/@monaco-editor/loader/lib/es/validators/index.cjs +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"chart-efad8ee0.js","sources":["../src/control/chart/generator/base-series-generator.ts","../src/control/chart/generator/line-series-generator.ts","../src/control/chart/generator/bar-series-generator.ts","../src/control/chart/generator/funnel-series-generator.ts","../src/control/chart/generator/pie-series-generator.ts","../src/control/chart/generator/scatter-series-generator.ts","../src/control/chart/generator/radar-coord-system.ts","../src/control/chart/generator/radar-series-generator.ts","../src/control/chart/generator/chart-options-generator.ts","../src/control/chart/chart.service.ts","../src/control/chart/chart.controller.ts","../src/control/chart/chart.tsx"],"sourcesContent":["import { RuntimeModelError, toNumberOrNil } from '@ibiz-template/core';\nimport {\n IChartSeriesCSCartesian2DEncode,\n IDEChartSeries,\n} from '@ibiz/model-core';\nimport { ECElementEvent, SeriesOption } from 'echarts';\nimport { isNil, mergeDeepRight } from 'ramda';\nimport {\n ChartOptionsGenerator,\n parseUserParams,\n} from './chart-options-generator';\n\n/** 序列的单条数据 */\nexport type SingleData = {\n /**\n * 值属性的值\n */\n value: number;\n\n /**\n * 完整的实体数据\n * @author lxm\n * @date 2023-06-09 09:31:27\n * @type {IData}\n */\n deData?: IData;\n};\n/** 分类数据,key是分类属性的值 */\nexport type CatalogData = Record<string, SingleData>;\n\n/** 分组数据,key是分组属性的值 */\nexport type GroupData = Record<string, CatalogData>;\n\nexport const DEFAULT_GROUP = '$default_group';\n\nexport class BaseSeriesGenerator<T extends IDEChartSeries = IDEChartSeries> {\n /**\n * 分类属性(小写)\n * @author lxm\n * @date 2023-06-09 02:44:57\n * @type {string}\n */\n catalogField: string;\n\n /**\n * 值属性(小写)\n * @author lxm\n * @date 2023-06-09 02:45:15\n * @type {string}\n */\n valueField: string;\n\n /**\n * 分组属性(小写)\n * @author lxm\n * @date 2023-06-09 02:46:05\n * @type {string}\n */\n groupField?: string;\n\n /**\n * X轴坐标索引\n * @author lxm\n * @date 2023-06-09 02:47:54\n * @type {number}\n */\n xAxisIndex?: number;\n\n /**\n * y轴坐标索引\n * @author lxm\n * @date 2023-06-09 02:48:13\n * @type {number}\n */\n yAxisIndex?: number;\n\n /**\n * 序列名称\n * @author lxm\n * @date 2023-06-09 02:49:35\n * @type {string}\n */\n seriesName: string;\n\n /**\n * 根据后台数据处理出来的分组数据\n * @author lxm\n * @date 2023-06-09 02:58:28\n * @type {GroupData}\n */\n groupData?: GroupData;\n\n /**\n * 静态的序列options\n * @author lxm\n * @date 2023-06-09 03:08:47\n * @type {SeriesOption}\n */\n staticOptions: SeriesOption = {};\n\n /**\n * 序列的自定义Options\n * @author lxm\n * @date 2023-06-09 08:59:40\n * @type {SeriesOption}\n */\n seriesUserParam?: SeriesOption;\n\n /**\n * 是否根据代码表自动补全分类\n * @author lxm\n * @date 2023-06-09 09:28:04\n * @type {boolean}\n */\n autoCompleteCategory: boolean = true;\n\n /**\n * Creates an instance of BaseSeriesGenerator.\n * @author lxm\n * @date 2023-06-09 02:46:54\n * @param {T} model 序列模型\n * @param {ChartOptionsGenerator} chartGenerator 图表生成器\n */\n constructor(\n public model: T,\n protected chartGenerator: ChartOptionsGenerator,\n ) {\n this.model = model;\n this.chartGenerator = chartGenerator;\n\n const { chartSeriesEncode, caption, id, userParam } = model;\n if (!model.catalogField) {\n throw new RuntimeModelError(model, '缺少分类属性配置');\n }\n if (!model.valueField) {\n throw new RuntimeModelError(model, '缺少值属性配置');\n }\n this.catalogField = model.catalogField!.toLowerCase();\n this.valueField = model.valueField!.toLowerCase();\n this.groupField = model.seriesField?.toLowerCase();\n\n const { chartXAxisId, chartYAxisId } = (chartSeriesEncode ||\n {}) as IChartSeriesCSCartesian2DEncode;\n this.xAxisIndex = toNumberOrNil(chartXAxisId);\n this.yAxisIndex = toNumberOrNil(chartYAxisId);\n this.seriesName = caption || id!;\n\n this.staticOptions = this.calcStaticOptions();\n\n if (userParam) {\n this.seriesUserParam = parseUserParams(userParam);\n }\n }\n\n /**\n * 计算静态序列的options\n * @author lxm\n * @date 2023-06-09 03:09:34\n */\n protected calcStaticOptions(): SeriesOption {\n const options: SeriesOption = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: this.model.seriesType! as any,\n name: this.seriesName,\n emphasis: {\n label: {\n fontSize: 20,\n show: true,\n },\n },\n label: {\n position: 'top',\n show: true,\n },\n };\n return options;\n }\n\n /**\n * 有代码就转换,值为空直接返回空\n *\n * @author lxm\n * @date 2023-06-09 08:42:50\n * @author lxm\n * @date 2023-06-09 08:46:00\n * @param {(string | undefined)} codeListKey 代码表值\n * @param {(string | undefined)} val 数据值\n * @param {boolean} isExclude 是否排除非代码表的值,true时,匹配不到代码表返回undefined,反之返回原值\n * @return {*} {(string | undefined)}\n */\n translateVal(\n codeListKey: string | undefined,\n val: string | undefined,\n isExclude: boolean = false,\n ): string | undefined {\n if (isNil(val)) {\n return undefined;\n }\n if (isNil(codeListKey)) {\n return val;\n }\n const codeListItems = this.chartGenerator.codeListMap.get(codeListKey);\n if (codeListItems?.length) {\n const find = codeListItems.find(x => x.value === val);\n if (find) {\n return find.text;\n }\n }\n return isExclude ? undefined : val;\n }\n\n /**\n * 计算分组数据\n * @author lxm\n * @date 2023-06-09 03:42:53\n * @param {IData[]} data\n * @return {*} {GroupData}\n */\n protected calcGroupData(data: IData[]): GroupData {\n // 清空分组数据\n this.groupData = {};\n const groupData = this.groupData!;\n // 分组属性代码表和分类属性代码表\n const { seriesCodeListId, catalogCodeListId } = this.model;\n\n data.forEach(item => {\n // 计算分组名称标识\n let group = DEFAULT_GROUP;\n if (this.groupField) {\n const groupVal = this.translateVal(\n seriesCodeListId,\n item[this.groupField],\n );\n // 存在分组属性,但是分组属性没值的数据排除在外\n if (isNil(groupVal)) {\n return;\n }\n group = groupVal;\n }\n\n // 分组对应的分类数据不存在时新建一个\n if (!groupData[group]) {\n groupData[group] = {};\n\n // 有代码表的时候补全代码表项个数的数据条数\n if (catalogCodeListId && this.autoCompleteCategory) {\n const codeListItems =\n this.chartGenerator.codeListMap.get(catalogCodeListId)!;\n codeListItems.forEach(x => {\n groupData[group][x.text] = {\n value: 0,\n };\n });\n }\n }\n\n // 分类属性值计算和转换\n const catalog = this.translateVal(\n catalogCodeListId,\n item[this.catalogField],\n true,\n );\n // 分类属性没值的数据排除\n if (!catalog) {\n return;\n }\n\n // 该分类属性对应的单条数据不存在时新建一个\n if (!groupData[group][catalog]) {\n groupData[group][catalog] = {\n value: 0,\n };\n }\n // 相同分类属性的值属性数据累加\n groupData[group][catalog].value += item[this.valueField];\n groupData[group][catalog].deData = item;\n });\n\n return groupData;\n }\n\n /**\n * 根据分组数据算出多个序列的options\n * 大多数图表分组都是一个分组数据生成一条series\n * @author lxm\n * @date 2023-06-09 03:34:24\n * @param {GroupData} groupData\n * @return {*} {SeriesOption[]}\n */\n protected calcGroupSeries(groupData: GroupData): SeriesOption[] {\n return Object.keys(groupData).map(group => {\n // 处理每个序列的数据\n const catalogData = groupData[group];\n const data: IData[] = this.calcSeriesData(catalogData);\n\n // 合并静态的seriesOptions\n let options: IData = { ...this.staticOptions, data };\n\n // 非默认分组的时候name是分组属性的值\n if (group !== DEFAULT_GROUP) {\n options.name = group;\n }\n\n // 合并自定义参数\n if (this.seriesUserParam) {\n options = mergeDeepRight(options, this.seriesUserParam);\n }\n\n return options as SeriesOption;\n });\n }\n\n /**\n * 生成每条序列的data,由于不同图表类型格式不同所以为any\n * 默认提供的是二维数组,按[X轴,y轴]格式\n * @author lxm\n * @date 2023-06-09 03:38:07\n * @param {CatalogData} catalogData\n * @return {*} {*}\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected calcSeriesData(catalogData: CatalogData): any {\n return Object.keys(catalogData).map(catalog => {\n const data = catalogData[catalog];\n return [catalog, data.value, data.deData?.srfkey];\n });\n }\n\n /**\n * 根据数据计算出序列的options\n * @author lxm\n * @date 2023-06-09 03:44:31\n * @param {IData[]} data\n * @return {*} {(SeriesOption[] | SeriesOption)}\n */\n calcByData(data: IData[]): SeriesOption[] | SeriesOption {\n const groupData = this.calcGroupData(data);\n return this.calcGroupSeries(groupData);\n }\n\n /**\n * 通过事件的params获取主键\n * @author lxm\n * @date 2023-06-09 10:56:25\n * @param {ECElementEvent} params\n * @return {*} {string}\n */\n getSrfkeyByParams(params: ECElementEvent): string {\n return (params.value as IData)[2];\n }\n}\n","import { RuntimeModelError } from '@ibiz-template/core';\nimport { IChartSeriesLine } from '@ibiz/model-core';\nimport { LineSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator } from './base-series-generator';\n\n/**\n * 折线图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:15\n * @export\n * @class LineSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesLine>}\n */\nexport class LineSeriesGenerator extends BaseSeriesGenerator<IChartSeriesLine> {\n protected calcStaticOptions(): SeriesOption {\n if (this.xAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置X坐标轴');\n }\n if (this.yAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置Y坐标轴');\n }\n const options = super.calcStaticOptions() as LineSeriesOption;\n options.xAxisIndex = this.xAxisIndex;\n options.yAxisIndex = this.yAxisIndex;\n\n const { stack, step } = this.model;\n if (stack) {\n // todo 堆叠\n }\n\n // 是否是阶梯线图\n if (step) {\n options.step = 'middle';\n }\n return options;\n }\n}\n","import { RuntimeModelError } from '@ibiz-template/core';\nimport { IChartSeriesBar } from '@ibiz/model-core';\nimport { BarSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator } from './base-series-generator';\n\n/**\n * 柱状图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:25\n * @export\n * @class BarSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesBar>}\n */\nexport class BarSeriesGenerator extends BaseSeriesGenerator<IChartSeriesBar> {\n protected calcStaticOptions(): SeriesOption {\n if (this.xAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置X坐标轴');\n }\n if (this.yAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置Y坐标轴');\n }\n const options = super.calcStaticOptions() as BarSeriesOption;\n options.xAxisIndex = this.xAxisIndex;\n options.yAxisIndex = this.yAxisIndex;\n\n const { stack } = this.model;\n if (stack) {\n // todo 堆叠\n }\n return options;\n }\n}\n","import { IChartSeriesFunnel } from '@ibiz/model-core';\nimport { ECElementEvent, FunnelSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator, CatalogData } from './base-series-generator';\n\n/**\n * 漏斗图序列生成器\n * @author lxm\n * @date 2023-06-11 06:18:46\n * @export\n * @class FunnelSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesFunnel>}\n */\nexport class FunnelSeriesGenerator extends BaseSeriesGenerator<IChartSeriesFunnel> {\n protected calcStaticOptions(): SeriesOption {\n const options = super.calcStaticOptions() as FunnelSeriesOption;\n\n options.label!.formatter = '{b}: {d}%({c})';\n options.label!.position = 'outer';\n\n return options;\n }\n\n protected calcSeriesData(catalogData: CatalogData) {\n return Object.keys(catalogData).map(catalog => {\n const data = catalogData[catalog];\n return { name: catalog, value: [data.value, data.deData?.srfkey] };\n });\n }\n\n getSrfkeyByParams(params: ECElementEvent): string {\n return (params.value as IData)[1];\n }\n}\n","import { IChartSeriesPie } from '@ibiz/model-core';\nimport { ECElementEvent, PieSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator, CatalogData } from './base-series-generator';\n\n/**\n * 饼图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:03\n * @export\n * @class PieSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesPie>}\n */\nexport class PieSeriesGenerator extends BaseSeriesGenerator<IChartSeriesPie> {\n protected calcStaticOptions(): SeriesOption {\n const options = super.calcStaticOptions() as PieSeriesOption;\n\n options.label!.formatter = '{b}: {d}%({c})';\n options.label!.position = 'outside';\n\n return options;\n }\n\n protected calcSeriesData(catalogData: CatalogData) {\n return Object.keys(catalogData).map(catalog => {\n const data = catalogData[catalog];\n return { name: catalog, value: [data.value, data.deData?.srfkey] };\n });\n }\n\n getSrfkeyByParams(params: ECElementEvent): string {\n return (params.value as IData)[1];\n }\n}\n","import { RuntimeModelError } from '@ibiz-template/core';\nimport { IChartSeriesScatter } from '@ibiz/model-core';\nimport { ScatterSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator } from './base-series-generator';\n\n/**\n * 散点图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:34\n * @export\n * @class ScatterSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesScatter>}\n */\nexport class ScatterSeriesGenerator extends BaseSeriesGenerator<IChartSeriesScatter> {\n protected calcStaticOptions(): SeriesOption {\n if (this.xAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置X坐标轴');\n }\n if (this.yAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置Y坐标轴');\n }\n const options = super.calcStaticOptions() as ScatterSeriesOption;\n options.xAxisIndex = this.xAxisIndex;\n options.yAxisIndex = this.yAxisIndex;\n\n return options;\n }\n}\n","import { RadarComponentOption } from 'echarts';\n\n/**\n * 雷达坐标系对象\n * @author lxm\n * @date 2023-06-11 06:27:22\n * @export\n * @class RadarCoordSystem\n */\nexport class RadarCoordSystem {\n /**\n * 坐标系的序号\n * @author lxm\n * @date 2023-06-11 06:28:04\n * @type {number}\n */\n index: number;\n\n /**\n * 指示器映射\n * @author lxm\n * @date 2023-06-11 06:34:26\n * @type {{ [p: string]: { max: number } }}\n */\n indicator: { [p: string]: { max: number } } = {};\n\n private _indicatorKeys?: string[];\n\n /**\n * 获取指示器的字段集合\n * @author lxm\n * @date 2023-06-11 06:41:13\n * @readonly\n */\n get indicatorKeys() {\n if (\n !this._indicatorKeys ||\n this._indicatorKeys.length !== Object.keys(this.indicator).length\n ) {\n this._indicatorKeys = Object.keys(this.indicator).sort();\n }\n return this._indicatorKeys;\n }\n\n constructor(index: number) {\n this.index = index;\n }\n\n /**\n * 更新或创建指示器\n * @author lxm\n * @date 2023-06-11 06:46:02\n * @param {string} name\n * @param {number} max\n */\n updateIndicator(name: string, max: number) {\n const indicator = this.indicator[name];\n if (!indicator || indicator.max < max) {\n this.indicator[name] = {\n max,\n };\n }\n }\n\n /**\n * 转换成雷达坐标系的options\n * @author lxm\n * @date 2023-06-11 06:42:04\n * @return {*} {RadarComponentOption}\n */\n toOptions(): RadarComponentOption {\n // 计算指示器里最大的的值\n const maxValue = Math.max(\n ...Object.values(this.indicator).map(item => item.max),\n );\n return {\n indicator: this.indicatorKeys.map(key => {\n return {\n name: key,\n max: maxValue,\n };\n }),\n };\n }\n}\n","import { IChartSeriesRadar } from '@ibiz/model-core';\nimport { ECElementEvent, RadarSeriesOption, SeriesOption } from 'echarts';\nimport { mergeDeepRight } from 'ramda';\nimport { BaseSeriesGenerator, DEFAULT_GROUP } from './base-series-generator';\nimport { RadarCoordSystem } from './radar-coord-system';\n\n/**\n * 饼图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:03\n * @export\n * @class RadarSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesRadar>}\n */\nexport class RadarSeriesGenerator extends BaseSeriesGenerator<IChartSeriesRadar> {\n protected calcStaticOptions(): SeriesOption {\n const options = super.calcStaticOptions() as RadarSeriesOption;\n\n return options;\n }\n\n /**\n * 计算雷达坐标系\n * @author lxm\n * @date 2023-06-11 07:08:30\n * @param {IData[]} data\n */\n calcRadarCoordSystem(data: IData[]) {\n const groupData = this.calcGroupData(data);\n\n // 创建雷达坐标系对象\n if (!this.chartGenerator.radarMap.has(this.catalogField)) {\n this.chartGenerator.radarMap.set(\n this.catalogField,\n new RadarCoordSystem(this.chartGenerator.radarMap.size),\n );\n }\n const radar = this.chartGenerator.radarMap.get(this.catalogField)!;\n\n // 更新雷达坐标系指示器和最大值\n Object.values(groupData).forEach(catalogData => {\n Object.keys(catalogData).forEach(catalog => {\n radar.updateIndicator(catalog, catalogData[catalog].value);\n });\n });\n }\n\n calcByData(_data: IData[]): SeriesOption | SeriesOption[] {\n const groupData = this.groupData!;\n const radar = this.chartGenerator.radarMap.get(this.catalogField)!;\n\n const radarData = Object.keys(groupData).map(group => {\n const catalogData = groupData[group];\n const value = radar.indicatorKeys.map(key => {\n return catalogData[key] === undefined ? 0 : catalogData[key].value;\n });\n return {\n name: group === DEFAULT_GROUP ? this.seriesName : group,\n value,\n };\n });\n\n // 合并静态的seriesOptions\n let options: IData = { ...this.staticOptions, data: radarData };\n\n // 合并自定义参数\n if (this.seriesUserParam) {\n options = mergeDeepRight(options, this.seriesUserParam);\n }\n\n return options as SeriesOption;\n }\n\n getSrfkeyByParams(params: ECElementEvent): string {\n return (params.value as IData)[1];\n }\n}\n","import {\n EChartsOption,\n SeriesOption,\n XAXisComponentOption,\n YAXisComponentOption,\n ECElementEvent,\n} from 'echarts';\nimport {\n IChartXAxis,\n IChartYAxis,\n IDEChart,\n IDEChartLegend,\n IDEChartTitle,\n} from '@ibiz/model-core';\nimport { mergeDeepRight } from 'ramda';\nimport { CodeListItem } from '@ibiz-template/runtime';\nimport { RuntimeError } from '@ibiz-template/core';\nimport { BaseSeriesGenerator } from './base-series-generator';\nimport { LineSeriesGenerator } from './line-series-generator';\nimport { BarSeriesGenerator } from './bar-series-generator';\nimport { FunnelSeriesGenerator } from './funnel-series-generator';\nimport { PieSeriesGenerator } from './pie-series-generator';\nimport { ScatterSeriesGenerator } from './scatter-series-generator';\nimport { RadarCoordSystem } from './radar-coord-system';\nimport { RadarSeriesGenerator } from './radar-series-generator';\n\n/**\n * 解析userParams\n * @author lxm\n * @date 2023-06-09 09:03:07\n * @export\n * @param {Record<string, string>} userParams\n * @return {*}\n */\nexport function parseUserParams(userParams: Record<string, string>) {\n const option: IData = {};\n if (userParams) {\n Object.keys(userParams).forEach(key => {\n const index = key.indexOf('.');\n if (index === -1) {\n return;\n }\n const customKey = key.slice(index + 1);\n if (customKey) {\n try {\n option[customKey] = JSON.parse(userParams[key]);\n } catch (error) {\n ibiz.log.error(`解析自定义参数${key}失败!`);\n }\n }\n });\n }\n return option;\n}\n\nexport class ChartOptionsGenerator {\n /**\n * 根据模型配置算出来的静态echarts配置\n * @author lxm\n * @date 2023-06-07 09:50:44\n * @type {EChartsOption}\n */\n staticOptions: EChartsOption = {\n tooltip: {\n show: true,\n },\n };\n\n /**\n * 最终计算产物\n * @author lxm\n * @date 2023-06-08 09:23:40\n * @type {EChartsOption}\n */\n options: EChartsOption = {};\n\n /**\n * 图表整体的自定义Options\n * @author lxm\n * @date 2023-06-09 08:59:40\n * @type {EChartsOption}\n */\n chartUserParam?: EChartsOption;\n\n /**\n * 序列生成器集合\n * @author lxm\n * @date 2023-06-09 05:47:41\n * @type {BaseSeriesGenerator[]}\n */\n seriesGenerators: BaseSeriesGenerator[] = [];\n\n /**\n * 雷达坐标系映射\n * key是分类属性,值是雷达坐标的序号\n * @author lxm\n * @date 2023-06-08 03:51:03\n */\n radarMap = new Map<string, RadarCoordSystem>();\n\n /**\n * 缓存已经加载的代码表数据\n * @author lxm\n * @date 2023-06-09 07:47:35\n */\n codeListMap: Map<string, Readonly<CodeListItem[]>> = new Map();\n\n constructor(private model: IDEChart) {\n this.initSeriesGenerators();\n const {\n dechartTitle,\n dechartLegend,\n chartXAxises,\n chartYAxises,\n userParam,\n } = model;\n\n // 标题\n if (dechartTitle) {\n this.staticOptions.title = this.calcTitleOption(dechartTitle);\n }\n\n // 图例\n if (dechartLegend) {\n this.staticOptions.legend = this.calcLegendOption(dechartLegend);\n }\n // x轴\n if (chartXAxises?.length) {\n this.staticOptions.xAxis = this.calcXYAxisOption(\n chartXAxises,\n ) as XAXisComponentOption[];\n }\n // y轴\n if (chartYAxises?.length) {\n this.staticOptions.yAxis = this.calcXYAxisOption(\n chartYAxises,\n ) as YAXisComponentOption[];\n }\n\n if (userParam) {\n this.chartUserParam = parseUserParams(userParam);\n }\n }\n\n protected initSeriesGenerators() {\n this.model.dechartSerieses?.forEach(series => {\n let seriesGenerator;\n switch (series.seriesType) {\n case 'line':\n seriesGenerator = new LineSeriesGenerator(series, this);\n break;\n case 'bar':\n seriesGenerator = new BarSeriesGenerator(series, this);\n break;\n case 'scatter':\n seriesGenerator = new ScatterSeriesGenerator(series, this);\n break;\n case 'pie':\n seriesGenerator = new PieSeriesGenerator(series, this);\n break;\n case 'funnel':\n seriesGenerator = new FunnelSeriesGenerator(series, this);\n break;\n case 'radar':\n seriesGenerator = new RadarSeriesGenerator(series, this);\n break;\n default:\n ibiz.log.error(`图表暂未支持序列类型${series.seriesType}`);\n break;\n }\n if (seriesGenerator) {\n this.seriesGenerators.push(seriesGenerator);\n }\n });\n }\n\n protected calcTitleOption(chartTitle: IDEChartTitle): EChartsOption['title'] {\n const { showTitle, title, subTitle, titlePos } = chartTitle;\n const titleOption: EChartsOption['title'] = {\n show: showTitle,\n text: title,\n subtext: subTitle,\n };\n\n // 标题位置\n titleOption.left = 'center';\n const position = titlePos?.toLowerCase();\n if (position === 'left' || position === 'right') {\n titleOption.left = position;\n } else if (position === 'bottom' || position === 'top') {\n titleOption.top = position;\n }\n return titleOption;\n }\n\n protected calcLegendOption(\n chartLegend: IDEChartLegend,\n ): EChartsOption['legend'] {\n const { showLegend, legendPos } = chartLegend;\n const legendOption: EChartsOption['legend'] = {};\n legendOption.show = showLegend;\n const position = legendPos?.toLowerCase();\n if (position === 'left' || position === 'right') {\n legendOption.left = position;\n legendOption.top = 'middle';\n legendOption.orient = 'vertical';\n } else if (position === 'bottom') {\n legendOption.top = position;\n }\n return legendOption;\n }\n\n protected calcXYAxisOption(\n chartAxises: IChartYAxis[] | IChartXAxis[],\n ): XAXisComponentOption[] | YAXisComponentOption[] {\n const AxisOption: EChartsOption['xAxis'] | EChartsOption['yAxis'] = [];\n chartAxises.forEach(chartAxis => {\n const { position, dataShowMode, userParam } = chartAxis;\n let option = {\n type: chartAxis.echartsType,\n name: chartAxis.caption,\n max: chartAxis.maxValue,\n min: chartAxis.minValue,\n position,\n axisLabel: {\n formatter: (value: string) => {\n if (dataShowMode === 1) {\n if (value.length > 4) {\n return `${value.slice(0, 4).split('').join('\\n')}\\n...`;\n }\n return value.split('').join('\\n');\n }\n if (dataShowMode === 2) {\n if (value.length > 4) {\n return `${value.slice(0, 4)}...`;\n }\n }\n return value;\n },\n rotate: dataShowMode === 3 ? 45 : 0,\n },\n };\n\n // 有自定义参数的合并自定义参数\n if (userParam) {\n option = mergeDeepRight(option, parseUserParams(userParam));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AxisOption.push(option as any);\n });\n return AxisOption;\n }\n\n /**\n * 加载代码表,\n * - 如果已经加载过会清空缓存重新加载\n * - 相同的代码表之后加载一次\n * @author lxm\n * @date 2023-06-09 08:05:28\n * @param {IContext} context\n * @param {IParams} params\n * @return {*} {Promise<void>}\n */\n async loadCodeList(context: IContext, params: IParams): Promise<void> {\n // 先清空缓存;\n this.codeListMap.clear();\n if (!this.model.dechartSerieses?.length) {\n return;\n }\n\n const app = ibiz.hub.getApp(context.srfappid);\n const loadCodeList = async (key: string | undefined) => {\n if (!key || this.codeListMap.has(key)) {\n return;\n }\n const codeListItems = await app.codeList.get(key, context, params);\n this.codeListMap.set(key, codeListItems);\n };\n\n await Promise.all(\n this.model.dechartSerieses.map(async series => {\n const { seriesCodeListId, catalogCodeListId } = series;\n await loadCodeList(seriesCodeListId);\n await loadCodeList(catalogCodeListId);\n }),\n );\n }\n\n /**\n * 根据数据计算出最终的options\n * @author lxm\n * @date 2023-06-09 08:10:52\n * @param {IData[]} data\n * @return {*} {EChartsOption}\n */\n calcOptionsByData(data: IData[]): EChartsOption {\n // 清空操作\n this.radarMap.clear();\n this.options = {\n series: [],\n radar: [],\n };\n\n // 雷达图表先计算坐标系\n this.seriesGenerators.forEach(generator => {\n if (generator.model.seriesType === 'radar') {\n (generator as RadarSeriesGenerator).calcRadarCoordSystem(data);\n }\n });\n // 生成雷达坐标系\n if (this.radarMap.size) {\n this.options.radar = [...this.radarMap.values()].map(radar =>\n radar.toOptions(),\n );\n }\n\n // 生成seriesOptions\n const seriesOption: SeriesOption[] = [];\n this.seriesGenerators.forEach(generator => {\n const series = generator.calcByData(data);\n if (series instanceof Array) {\n seriesOption.push(...series);\n } else {\n seriesOption.push(series);\n }\n });\n this.options.series = seriesOption;\n\n // 合并静态和动态的options\n this.options = mergeDeepRight(\n this.staticOptions,\n this.options,\n ) as EChartsOption;\n\n // 有自定义参数的合并自定义参数\n if (this.chartUserParam) {\n this.options = mergeDeepRight(\n this.options,\n this.chartUserParam,\n ) as EChartsOption;\n }\n\n return this.options;\n }\n\n getSrfkeyByParams(params: ECElementEvent): string {\n const generator = this.seriesGenerators[params.seriesIndex!];\n if (!generator) {\n throw new RuntimeError(`找不到${params.seriesIndex}序列的generator!`);\n }\n return generator.getSrfkeyByParams(params);\n }\n\n // protected calcRadarSeries(data: IData[], series: IChartSeriesFunnel) {\n // // 初始化radarMap\n // let radarIndex = this.radarMap.size; // 默认新坐标系的索引\n // let radarMapObj: Record<string, number>;\n // if (this.radarMap.has(catalogField)) {\n // radarMapObj = this.radarMap.get(catalogField)!;\n // radarIndex = radarMapObj.radarIndex;\n // } else {\n // radarMapObj = {\n // radarIndex,\n // };\n // this.radarMap.set(catalogField, radarMapObj);\n // }\n\n // // 雷达坐标系维度顺序\n // let indicatorKeys: string[] = [];\n // if (Object.values(radarMapObj).length > 1) {\n // indicatorKeys = Object.keys(radarMapObj).slice(1);\n // }\n\n // // 生成雷达数据,多个分组在一起\n // const radarData = Object.keys(groupChartData).map(group => {\n // // 处理每个序列的数据\n // const catalogData = groupChartData[group];\n // if (indicatorKeys.length === 0) {\n // indicatorKeys = Object.keys(catalogData);\n // }\n\n // const value = indicatorKeys.map(key => {\n // // 更新radar坐标系的最大值\n // if (\n // radarMapObj[key] === undefined ||\n // radarMapObj[key] < catalogData[key]\n // ) {\n // radarMapObj[key] = catalogData[key];\n // }\n // return catalogData[key];\n // });\n\n // return {\n // value,\n // name: group !== 'default' ? group : seriesName,\n // };\n // });\n\n // const seriesOption: SeriesOption = {\n // type: 'radar',\n // ...this.seriesDefaultOptions,\n // radarIndex,\n // data: radarData,\n // };\n\n // return seriesOption;\n // }\n}\n","import { MDControlService } from '@ibiz-template/runtime';\nimport { IDEChart } from '@ibiz/model-core';\n\n/**\n * 图表部件服务\n * @author lxm\n * @date 2023-05-15 09:53:35\n * @export\n * @class GridService\n * @extends {MDControlService<IDEChart>}\n */\nexport class ChartService extends MDControlService<IDEChart> {}\n","import { RuntimeError } from '@ibiz-template/core';\nimport {\n MDControlController,\n IChartEvent,\n IChartController,\n IChartState,\n MDCtrlLoadParams,\n} from '@ibiz-template/runtime';\nimport { IDEChart } from '@ibiz/model-core';\nimport { EChartsOption, EChartsType, init } from 'echarts';\nimport { ChartOptionsGenerator } from './generator/chart-options-generator';\nimport { ChartService } from './chart.service';\n\nexport class ChartController\n extends MDControlController<IDEChart, IChartState, IChartEvent>\n implements IChartController\n{\n declare service: ChartService;\n\n /**\n * echarts对象\n * @author lxm\n * @date 2023-06-07 09:36:58\n * @type {EChartsType}\n */\n chart?: EChartsType;\n\n generator!: ChartOptionsGenerator;\n\n /**\n * 最终使用的echarts配置\n * @author lxm\n * @date 2023-06-07 09:51:09\n * @type {EChartsOption}\n */\n options?: EChartsOption;\n\n protected async onCreated(): Promise<void> {\n await super.onCreated();\n this.service = new ChartService(this.model);\n await this.service.init(this.context);\n this.generator = new ChartOptionsGenerator(this.model);\n await this.generator.loadCodeList(this.context, this.params);\n\n // 监听resize调整图表大小\n window.addEventListener('resize', this.resizeChart);\n }\n\n async afterLoad(args: MDCtrlLoadParams, items: IData[]): Promise<IData[]> {\n const result = await super.afterLoad(args, items);\n this.calcOptions();\n return result;\n }\n\n /**\n * 初始化echarts对象\n * @author lxm\n * @date 2023-06-07 09:37:05\n * @param {HTMLElement} dom\n */\n initChart(dom: HTMLElement): void {\n if (!dom) {\n throw new RuntimeError('图表初始化的dom元素不存在!');\n }\n this.chart = init(dom);\n this.chart.on('click', params => {\n const srfkey = this.generator.getSrfkeyByParams(params);\n const activeData = this.state.items.find(item => item.srfkey === srfkey);\n console.log('实体数据', activeData);\n });\n }\n\n /**\n * 根据数据计算最终的options\n * 并刷新echarts\n * @author lxm\n * @date 2023-06-07 09:58:00\n * @param {IData[]} [data=this.state.items]\n */\n calcOptions(data: IData[] = this.state.items): void {\n this.options = this.generator.calcOptionsByData(data);\n this.updateChart();\n }\n\n /**\n * 更新echart图表\n * @author lxm\n * @date 2023-06-07 10:03:48\n */\n updateChart(): void {\n if (!this.chart) {\n throw new RuntimeError('chart对象没有正确初始化');\n }\n if (!this.options) {\n throw new RuntimeError('options还没计算');\n }\n this.chart.setOption(this.options);\n this.resizeChart();\n }\n\n /**\n * 刷新图表的大小\n * @author lxm\n * @date 2023-06-09 09:37:25\n */\n resizeChart() {\n if (this.chart) {\n this.chart.resize();\n }\n }\n\n protected async onDestroyed(): Promise<void> {\n window.removeEventListener('resize', this.resizeChart);\n await super.onDestroyed();\n this.chart?.dispose();\n }\n}\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nimport { IDEChart } from '@ibiz/model-core';\nimport { ChartController } from './chart.controller';\nimport './chart.scss';\n\nconst ChartControl = defineComponent({\n name: 'IBizChartControl',\n props: {\n modelData: { type: Object as PropType<IDEChart>, required: true },\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n },\n setup() {\n const c = useControlController((...args) => new ChartController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const chartRef = ref();\n\n onMounted(() => {\n c.initChart(chartRef.value);\n });\n\n return {\n c,\n ns,\n chartRef,\n };\n },\n render() {\n return (\n <iBizControlBase controller={this.c}>\n <div ref='chartRef' class={this.ns.e('chart')}>\n 图表\n </div>\n </iBizControlBase>\n );\n },\n});\n\nexport default ChartControl;\n"],"names":["__defProp","__defNormalProp","obj","key","value","__publicField","DEFAULT_GROUP","BaseSeriesGenerator","model","chartGenerator","_a","chartSeriesEncode","caption","id","userParam","RuntimeModelError","chartXAxisId","chartYAxisId","toNumberOrNil","parseUserParams","codeListKey","val","isExclude","isNil","codeListItems","find","x","data","groupData","seriesCodeListId","catalogCodeListId","item","group","groupVal","catalog","catalogData","options","mergeDeepRight","params","LineSeriesGenerator","stack","step","BarSeriesGenerator","FunnelSeriesGenerator","PieSeriesGenerator","ScatterSeriesGenerator","RadarCoordSystem","index","name","max","indicator","maxValue","RadarSeriesGenerator","radar","_data","radarData","userParams","option","customKey","ChartOptionsGenerator","dechartTitle","dechartLegend","chartXAxises","chartYAxises","series","seriesGenerator","chartTitle","showTitle","title","subTitle","titlePos","titleOption","position","chartLegend","showLegend","legendPos","legendOption","chartAxises","AxisOption","chartAxis","dataShowMode","context","app","loadCodeList","generator","seriesOption","RuntimeError","ChartService","MDControlService","ChartController","MDControlController","args","items","result","dom","init","srfkey","activeData","ChartControl","exports","defineComponent","props","modelData","type","Object","required","default","setup","c","useControlController","ns","useNamespace","controlType","toLowerCase","chartRef","ref","onMounted","initChart","render","_createVNode","_resolveComponent","e","_createTextVNode"],"mappings":"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"}
1
+ {"version":3,"file":"chart-efad8ee0.js","sources":["../src/control/chart/generator/base-series-generator.ts","../src/control/chart/generator/line-series-generator.ts","../src/control/chart/generator/bar-series-generator.ts","../src/control/chart/generator/funnel-series-generator.ts","../src/control/chart/generator/pie-series-generator.ts","../src/control/chart/generator/scatter-series-generator.ts","../src/control/chart/generator/radar-coord-system.ts","../src/control/chart/generator/radar-series-generator.ts","../src/control/chart/generator/chart-options-generator.ts","../src/control/chart/chart.service.ts","../src/control/chart/chart.controller.ts","../src/control/chart/chart.tsx"],"sourcesContent":["import { RuntimeModelError, toNumberOrNil } from '@ibiz-template/core';\nimport {\n IChartSeriesCSCartesian2DEncode,\n IDEChartSeries,\n} from '@ibiz/model-core';\nimport { ECElementEvent, SeriesOption } from 'echarts';\nimport { isNil, mergeDeepRight } from 'ramda';\nimport {\n ChartOptionsGenerator,\n parseUserParams,\n} from './chart-options-generator';\n\n/** 序列的单条数据 */\nexport type SingleData = {\n /**\n * 值属性的值\n */\n value: number;\n\n /**\n * 完整的实体数据\n * @author lxm\n * @date 2023-06-09 09:31:27\n * @type {IData}\n */\n deData?: IData;\n};\n/** 分类数据,key是分类属性的值 */\nexport type CatalogData = Record<string, SingleData>;\n\n/** 分组数据,key是分组属性的值 */\nexport type GroupData = Record<string, CatalogData>;\n\nexport const DEFAULT_GROUP = '$default_group';\n\nexport class BaseSeriesGenerator<T extends IDEChartSeries = IDEChartSeries> {\n /**\n * 分类属性(小写)\n * @author lxm\n * @date 2023-06-09 02:44:57\n * @type {string}\n */\n catalogField: string;\n\n /**\n * 值属性(小写)\n * @author lxm\n * @date 2023-06-09 02:45:15\n * @type {string}\n */\n valueField: string;\n\n /**\n * 分组属性(小写)\n * @author lxm\n * @date 2023-06-09 02:46:05\n * @type {string}\n */\n groupField?: string;\n\n /**\n * X轴坐标索引\n * @author lxm\n * @date 2023-06-09 02:47:54\n * @type {number}\n */\n xAxisIndex?: number;\n\n /**\n * y轴坐标索引\n * @author lxm\n * @date 2023-06-09 02:48:13\n * @type {number}\n */\n yAxisIndex?: number;\n\n /**\n * 序列名称\n * @author lxm\n * @date 2023-06-09 02:49:35\n * @type {string}\n */\n seriesName: string;\n\n /**\n * 根据后台数据处理出来的分组数据\n * @author lxm\n * @date 2023-06-09 02:58:28\n * @type {GroupData}\n */\n groupData?: GroupData;\n\n /**\n * 静态的序列options\n * @author lxm\n * @date 2023-06-09 03:08:47\n * @type {SeriesOption}\n */\n staticOptions: SeriesOption = {};\n\n /**\n * 序列的自定义Options\n * @author lxm\n * @date 2023-06-09 08:59:40\n * @type {SeriesOption}\n */\n seriesUserParam?: SeriesOption;\n\n /**\n * 是否根据代码表自动补全分类\n * @author lxm\n * @date 2023-06-09 09:28:04\n * @type {boolean}\n */\n autoCompleteCategory: boolean = true;\n\n /**\n * Creates an instance of BaseSeriesGenerator.\n * @author lxm\n * @date 2023-06-09 02:46:54\n * @param {T} model 序列模型\n * @param {ChartOptionsGenerator} chartGenerator 图表生成器\n */\n constructor(\n public model: T,\n protected chartGenerator: ChartOptionsGenerator,\n ) {\n this.model = model;\n this.chartGenerator = chartGenerator;\n\n const { chartSeriesEncode, caption, id, userParam } = model;\n if (!model.catalogField) {\n throw new RuntimeModelError(model, '缺少分类属性配置');\n }\n if (!model.valueField) {\n throw new RuntimeModelError(model, '缺少值属性配置');\n }\n this.catalogField = model.catalogField!.toLowerCase();\n this.valueField = model.valueField!.toLowerCase();\n this.groupField = model.seriesField?.toLowerCase();\n\n const { chartXAxisId, chartYAxisId } = (chartSeriesEncode ||\n {}) as IChartSeriesCSCartesian2DEncode;\n this.xAxisIndex = toNumberOrNil(chartXAxisId);\n this.yAxisIndex = toNumberOrNil(chartYAxisId);\n this.seriesName = caption || id!;\n\n this.staticOptions = this.calcStaticOptions();\n\n if (userParam) {\n this.seriesUserParam = parseUserParams(userParam);\n }\n }\n\n /**\n * 计算静态序列的options\n * @author lxm\n * @date 2023-06-09 03:09:34\n */\n protected calcStaticOptions(): SeriesOption {\n const options: SeriesOption = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: this.model.seriesType! as any,\n name: this.seriesName,\n emphasis: {\n label: {\n fontSize: 20,\n show: true,\n },\n },\n label: {\n position: 'top',\n show: true,\n },\n };\n return options;\n }\n\n /**\n * 有代码就转换,值为空直接返回空\n *\n * @author lxm\n * @date 2023-06-09 08:42:50\n * @author lxm\n * @date 2023-06-09 08:46:00\n * @param {(string | undefined)} codeListKey 代码表值\n * @param {(string | undefined)} val 数据值\n * @param {boolean} isExclude 是否排除非代码表的值,true时,匹配不到代码表返回undefined,反之返回原值\n * @return {*} {(string | undefined)}\n */\n translateVal(\n codeListKey: string | undefined,\n val: string | undefined,\n isExclude: boolean = false,\n ): string | undefined {\n if (isNil(val)) {\n return undefined;\n }\n if (isNil(codeListKey)) {\n return val;\n }\n const codeListItems = this.chartGenerator.codeListMap.get(codeListKey);\n if (codeListItems?.length) {\n const find = codeListItems.find(x => x.value === val);\n if (find) {\n return find.text;\n }\n }\n return isExclude ? undefined : val;\n }\n\n /**\n * 计算分组数据\n * @author lxm\n * @date 2023-06-09 03:42:53\n * @param {IData[]} data\n * @return {*} {GroupData}\n */\n protected calcGroupData(data: IData[]): GroupData {\n // 清空分组数据\n this.groupData = {};\n const groupData = this.groupData!;\n // 分组属性代码表和分类属性代码表\n const { seriesCodeListId, catalogCodeListId } = this.model;\n\n data.forEach(item => {\n // 计算分组名称标识\n let group = DEFAULT_GROUP;\n if (this.groupField) {\n const groupVal = this.translateVal(\n seriesCodeListId,\n item[this.groupField],\n );\n // 存在分组属性,但是分组属性没值的数据排除在外\n if (isNil(groupVal)) {\n return;\n }\n group = groupVal;\n }\n\n // 分组对应的分类数据不存在时新建一个\n if (!groupData[group]) {\n groupData[group] = {};\n\n // 有代码表的时候补全代码表项个数的数据条数\n if (catalogCodeListId && this.autoCompleteCategory) {\n const codeListItems =\n this.chartGenerator.codeListMap.get(catalogCodeListId)!;\n codeListItems.forEach(x => {\n groupData[group][x.text] = {\n value: 0,\n };\n });\n }\n }\n\n // 分类属性值计算和转换\n const catalog = this.translateVal(\n catalogCodeListId,\n item[this.catalogField],\n true,\n );\n // 分类属性没值的数据排除\n if (!catalog) {\n return;\n }\n\n // 该分类属性对应的单条数据不存在时新建一个\n if (!groupData[group][catalog]) {\n groupData[group][catalog] = {\n value: 0,\n };\n }\n // 相同分类属性的值属性数据累加\n groupData[group][catalog].value += item[this.valueField];\n groupData[group][catalog].deData = item;\n });\n\n return groupData;\n }\n\n /**\n * 根据分组数据算出多个序列的options\n * 大多数图表分组都是一个分组数据生成一条series\n * @author lxm\n * @date 2023-06-09 03:34:24\n * @param {GroupData} groupData\n * @return {*} {SeriesOption[]}\n */\n protected calcGroupSeries(groupData: GroupData): SeriesOption[] {\n return Object.keys(groupData).map(group => {\n // 处理每个序列的数据\n const catalogData = groupData[group];\n const data: IData[] = this.calcSeriesData(catalogData);\n\n // 合并静态的seriesOptions\n let options: IData = { ...this.staticOptions, data };\n\n // 非默认分组的时候name是分组属性的值\n if (group !== DEFAULT_GROUP) {\n options.name = group;\n }\n\n // 合并自定义参数\n if (this.seriesUserParam) {\n options = mergeDeepRight(options, this.seriesUserParam);\n }\n\n return options as SeriesOption;\n });\n }\n\n /**\n * 生成每条序列的data,由于不同图表类型格式不同所以为any\n * 默认提供的是二维数组,按[X轴,y轴]格式\n * @author lxm\n * @date 2023-06-09 03:38:07\n * @param {CatalogData} catalogData\n * @return {*} {*}\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected calcSeriesData(catalogData: CatalogData): any {\n return Object.keys(catalogData).map(catalog => {\n const data = catalogData[catalog];\n return [catalog, data.value, data.deData?.srfkey];\n });\n }\n\n /**\n * 根据数据计算出序列的options\n * @author lxm\n * @date 2023-06-09 03:44:31\n * @param {IData[]} data\n * @return {*} {(SeriesOption[] | SeriesOption)}\n */\n calcByData(data: IData[]): SeriesOption[] | SeriesOption {\n const groupData = this.calcGroupData(data);\n return this.calcGroupSeries(groupData);\n }\n\n /**\n * 通过事件的params获取主键\n * @author lxm\n * @date 2023-06-09 10:56:25\n * @param {ECElementEvent} params\n * @return {*} {string}\n */\n getSrfkeyByParams(params: ECElementEvent): string {\n return (params.value as IData)[2];\n }\n}\n","import { RuntimeModelError } from '@ibiz-template/core';\nimport { IChartSeriesLine } from '@ibiz/model-core';\nimport { LineSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator } from './base-series-generator';\n\n/**\n * 折线图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:15\n * @export\n * @class LineSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesLine>}\n */\nexport class LineSeriesGenerator extends BaseSeriesGenerator<IChartSeriesLine> {\n protected calcStaticOptions(): SeriesOption {\n if (this.xAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置X坐标轴');\n }\n if (this.yAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置Y坐标轴');\n }\n const options = super.calcStaticOptions() as LineSeriesOption;\n options.xAxisIndex = this.xAxisIndex;\n options.yAxisIndex = this.yAxisIndex;\n\n const { stack, step } = this.model;\n if (stack) {\n // todo 堆叠\n }\n\n // 是否是阶梯线图\n if (step) {\n options.step = 'middle';\n }\n return options;\n }\n}\n","import { RuntimeModelError } from '@ibiz-template/core';\nimport { IChartSeriesBar } from '@ibiz/model-core';\nimport { BarSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator } from './base-series-generator';\n\n/**\n * 柱状图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:25\n * @export\n * @class BarSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesBar>}\n */\nexport class BarSeriesGenerator extends BaseSeriesGenerator<IChartSeriesBar> {\n protected calcStaticOptions(): SeriesOption {\n if (this.xAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置X坐标轴');\n }\n if (this.yAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置Y坐标轴');\n }\n const options = super.calcStaticOptions() as BarSeriesOption;\n options.xAxisIndex = this.xAxisIndex;\n options.yAxisIndex = this.yAxisIndex;\n\n const { stack } = this.model;\n if (stack) {\n // todo 堆叠\n }\n return options;\n }\n}\n","import { IChartSeriesFunnel } from '@ibiz/model-core';\nimport { ECElementEvent, FunnelSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator, CatalogData } from './base-series-generator';\n\n/**\n * 漏斗图序列生成器\n * @author lxm\n * @date 2023-06-11 06:18:46\n * @export\n * @class FunnelSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesFunnel>}\n */\nexport class FunnelSeriesGenerator extends BaseSeriesGenerator<IChartSeriesFunnel> {\n protected calcStaticOptions(): SeriesOption {\n const options = super.calcStaticOptions() as FunnelSeriesOption;\n\n options.label!.formatter = '{b}: {d}%({c})';\n options.label!.position = 'outer';\n\n return options;\n }\n\n protected calcSeriesData(catalogData: CatalogData) {\n return Object.keys(catalogData).map(catalog => {\n const data = catalogData[catalog];\n return { name: catalog, value: [data.value, data.deData?.srfkey] };\n });\n }\n\n getSrfkeyByParams(params: ECElementEvent): string {\n return (params.value as IData)[1];\n }\n}\n","import { IChartSeriesPie } from '@ibiz/model-core';\nimport { ECElementEvent, PieSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator, CatalogData } from './base-series-generator';\n\n/**\n * 饼图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:03\n * @export\n * @class PieSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesPie>}\n */\nexport class PieSeriesGenerator extends BaseSeriesGenerator<IChartSeriesPie> {\n protected calcStaticOptions(): SeriesOption {\n const options = super.calcStaticOptions() as PieSeriesOption;\n\n options.label!.formatter = '{b}: {d}%({c})';\n options.label!.position = 'outside';\n\n return options;\n }\n\n protected calcSeriesData(catalogData: CatalogData) {\n return Object.keys(catalogData).map(catalog => {\n const data = catalogData[catalog];\n return { name: catalog, value: [data.value, data.deData?.srfkey] };\n });\n }\n\n getSrfkeyByParams(params: ECElementEvent): string {\n return (params.value as IData)[1];\n }\n}\n","import { RuntimeModelError } from '@ibiz-template/core';\nimport { IChartSeriesScatter } from '@ibiz/model-core';\nimport { ScatterSeriesOption, SeriesOption } from 'echarts';\nimport { BaseSeriesGenerator } from './base-series-generator';\n\n/**\n * 散点图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:34\n * @export\n * @class ScatterSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesScatter>}\n */\nexport class ScatterSeriesGenerator extends BaseSeriesGenerator<IChartSeriesScatter> {\n protected calcStaticOptions(): SeriesOption {\n if (this.xAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置X坐标轴');\n }\n if (this.yAxisIndex === undefined) {\n throw new RuntimeModelError(this.model, '序列没有配置Y坐标轴');\n }\n const options = super.calcStaticOptions() as ScatterSeriesOption;\n options.xAxisIndex = this.xAxisIndex;\n options.yAxisIndex = this.yAxisIndex;\n\n return options;\n }\n}\n","import { RadarComponentOption } from 'echarts';\n\n/**\n * 雷达坐标系对象\n * @author lxm\n * @date 2023-06-11 06:27:22\n * @export\n * @class RadarCoordSystem\n */\nexport class RadarCoordSystem {\n /**\n * 坐标系的序号\n * @author lxm\n * @date 2023-06-11 06:28:04\n * @type {number}\n */\n index: number;\n\n /**\n * 指示器映射\n * @author lxm\n * @date 2023-06-11 06:34:26\n * @type {{ [p: string]: { max: number } }}\n */\n indicator: { [p: string]: { max: number } } = {};\n\n private _indicatorKeys?: string[];\n\n /**\n * 获取指示器的字段集合\n * @author lxm\n * @date 2023-06-11 06:41:13\n * @readonly\n */\n get indicatorKeys() {\n if (\n !this._indicatorKeys ||\n this._indicatorKeys.length !== Object.keys(this.indicator).length\n ) {\n this._indicatorKeys = Object.keys(this.indicator).sort();\n }\n return this._indicatorKeys;\n }\n\n constructor(index: number) {\n this.index = index;\n }\n\n /**\n * 更新或创建指示器\n * @author lxm\n * @date 2023-06-11 06:46:02\n * @param {string} name\n * @param {number} max\n */\n updateIndicator(name: string, max: number) {\n const indicator = this.indicator[name];\n if (!indicator || indicator.max < max) {\n this.indicator[name] = {\n max,\n };\n }\n }\n\n /**\n * 转换成雷达坐标系的options\n * @author lxm\n * @date 2023-06-11 06:42:04\n * @return {*} {RadarComponentOption}\n */\n toOptions(): RadarComponentOption {\n // 计算指示器里最大的的值\n const maxValue = Math.max(\n ...Object.values(this.indicator).map(item => item.max),\n );\n return {\n indicator: this.indicatorKeys.map(key => {\n return {\n name: key,\n max: maxValue,\n };\n }),\n };\n }\n}\n","import { IChartSeriesRadar } from '@ibiz/model-core';\nimport { ECElementEvent, RadarSeriesOption, SeriesOption } from 'echarts';\nimport { mergeDeepRight } from 'ramda';\nimport { BaseSeriesGenerator, DEFAULT_GROUP } from './base-series-generator';\nimport { RadarCoordSystem } from './radar-coord-system';\n\n/**\n * 饼图序列生成器\n * @author lxm\n * @date 2023-06-11 06:19:03\n * @export\n * @class RadarSeriesGenerator\n * @extends {BaseSeriesGenerator<IChartSeriesRadar>}\n */\nexport class RadarSeriesGenerator extends BaseSeriesGenerator<IChartSeriesRadar> {\n protected calcStaticOptions(): SeriesOption {\n const options = super.calcStaticOptions() as RadarSeriesOption;\n\n return options;\n }\n\n /**\n * 计算雷达坐标系\n * @author lxm\n * @date 2023-06-11 07:08:30\n * @param {IData[]} data\n */\n calcRadarCoordSystem(data: IData[]) {\n const groupData = this.calcGroupData(data);\n\n // 创建雷达坐标系对象\n if (!this.chartGenerator.radarMap.has(this.catalogField)) {\n this.chartGenerator.radarMap.set(\n this.catalogField,\n new RadarCoordSystem(this.chartGenerator.radarMap.size),\n );\n }\n const radar = this.chartGenerator.radarMap.get(this.catalogField)!;\n\n // 更新雷达坐标系指示器和最大值\n Object.values(groupData).forEach(catalogData => {\n Object.keys(catalogData).forEach(catalog => {\n radar.updateIndicator(catalog, catalogData[catalog].value);\n });\n });\n }\n\n calcByData(_data: IData[]): SeriesOption | SeriesOption[] {\n const groupData = this.groupData!;\n const radar = this.chartGenerator.radarMap.get(this.catalogField)!;\n\n const radarData = Object.keys(groupData).map(group => {\n const catalogData = groupData[group];\n const value = radar.indicatorKeys.map(key => {\n return catalogData[key] === undefined ? 0 : catalogData[key].value;\n });\n return {\n name: group === DEFAULT_GROUP ? this.seriesName : group,\n value,\n };\n });\n\n // 合并静态的seriesOptions\n let options: IData = { ...this.staticOptions, data: radarData };\n\n // 合并自定义参数\n if (this.seriesUserParam) {\n options = mergeDeepRight(options, this.seriesUserParam);\n }\n\n return options as SeriesOption;\n }\n\n getSrfkeyByParams(params: ECElementEvent): string {\n return (params.value as IData)[1];\n }\n}\n","import {\n EChartsOption,\n SeriesOption,\n XAXisComponentOption,\n YAXisComponentOption,\n ECElementEvent,\n} from 'echarts';\nimport {\n IChartXAxis,\n IChartYAxis,\n IDEChart,\n IDEChartLegend,\n IDEChartTitle,\n} from '@ibiz/model-core';\nimport { mergeDeepRight } from 'ramda';\nimport { CodeListItem } from '@ibiz-template/runtime';\nimport { RuntimeError } from '@ibiz-template/core';\nimport { BaseSeriesGenerator } from './base-series-generator';\nimport { LineSeriesGenerator } from './line-series-generator';\nimport { BarSeriesGenerator } from './bar-series-generator';\nimport { FunnelSeriesGenerator } from './funnel-series-generator';\nimport { PieSeriesGenerator } from './pie-series-generator';\nimport { ScatterSeriesGenerator } from './scatter-series-generator';\nimport { RadarCoordSystem } from './radar-coord-system';\nimport { RadarSeriesGenerator } from './radar-series-generator';\n\n/**\n * 解析userParams\n * @author lxm\n * @date 2023-06-09 09:03:07\n * @export\n * @param {Record<string, string>} userParams\n * @return {*}\n */\nexport function parseUserParams(userParams: Record<string, string>) {\n const option: IData = {};\n if (userParams) {\n Object.keys(userParams).forEach(key => {\n const index = key.indexOf('.');\n if (index === -1) {\n return;\n }\n const customKey = key.slice(index + 1);\n if (customKey) {\n try {\n option[customKey] = JSON.parse(userParams[key]);\n } catch (error) {\n ibiz.log.error(`解析自定义参数${key}失败!`);\n }\n }\n });\n }\n return option;\n}\n\nexport class ChartOptionsGenerator {\n /**\n * 根据模型配置算出来的静态echarts配置\n * @author lxm\n * @date 2023-06-07 09:50:44\n * @type {EChartsOption}\n */\n staticOptions: EChartsOption = {\n tooltip: {\n show: true,\n },\n };\n\n /**\n * 最终计算产物\n * @author lxm\n * @date 2023-06-08 09:23:40\n * @type {EChartsOption}\n */\n options: EChartsOption = {};\n\n /**\n * 图表整体的自定义Options\n * @author lxm\n * @date 2023-06-09 08:59:40\n * @type {EChartsOption}\n */\n chartUserParam?: EChartsOption;\n\n /**\n * 序列生成器集合\n * @author lxm\n * @date 2023-06-09 05:47:41\n * @type {BaseSeriesGenerator[]}\n */\n seriesGenerators: BaseSeriesGenerator[] = [];\n\n /**\n * 雷达坐标系映射\n * key是分类属性,值是雷达坐标的序号\n * @author lxm\n * @date 2023-06-08 03:51:03\n */\n radarMap = new Map<string, RadarCoordSystem>();\n\n /**\n * 缓存已经加载的代码表数据\n * @author lxm\n * @date 2023-06-09 07:47:35\n */\n codeListMap: Map<string, Readonly<CodeListItem[]>> = new Map();\n\n constructor(private model: IDEChart) {\n this.initSeriesGenerators();\n const {\n dechartTitle,\n dechartLegend,\n chartXAxises,\n chartYAxises,\n userParam,\n } = model;\n\n // 标题\n if (dechartTitle) {\n this.staticOptions.title = this.calcTitleOption(dechartTitle);\n }\n\n // 图例\n if (dechartLegend) {\n this.staticOptions.legend = this.calcLegendOption(dechartLegend);\n }\n // x轴\n if (chartXAxises?.length) {\n this.staticOptions.xAxis = this.calcXYAxisOption(\n chartXAxises,\n ) as XAXisComponentOption[];\n }\n // y轴\n if (chartYAxises?.length) {\n this.staticOptions.yAxis = this.calcXYAxisOption(\n chartYAxises,\n ) as YAXisComponentOption[];\n }\n\n if (userParam) {\n this.chartUserParam = parseUserParams(userParam);\n }\n }\n\n protected initSeriesGenerators() {\n this.model.dechartSerieses?.forEach(series => {\n let seriesGenerator;\n switch (series.seriesType) {\n case 'line':\n seriesGenerator = new LineSeriesGenerator(series, this);\n break;\n case 'bar':\n seriesGenerator = new BarSeriesGenerator(series, this);\n break;\n case 'scatter':\n seriesGenerator = new ScatterSeriesGenerator(series, this);\n break;\n case 'pie':\n seriesGenerator = new PieSeriesGenerator(series, this);\n break;\n case 'funnel':\n seriesGenerator = new FunnelSeriesGenerator(series, this);\n break;\n case 'radar':\n seriesGenerator = new RadarSeriesGenerator(series, this);\n break;\n default:\n ibiz.log.error(`图表暂未支持序列类型${series.seriesType}`);\n break;\n }\n if (seriesGenerator) {\n this.seriesGenerators.push(seriesGenerator);\n }\n });\n }\n\n protected calcTitleOption(chartTitle: IDEChartTitle): EChartsOption['title'] {\n const { showTitle, title, subTitle, titlePos } = chartTitle;\n const titleOption: EChartsOption['title'] = {\n show: showTitle,\n text: title,\n subtext: subTitle,\n };\n\n // 标题位置\n titleOption.left = 'center';\n const position = titlePos?.toLowerCase();\n if (position === 'left' || position === 'right') {\n titleOption.left = position;\n } else if (position === 'bottom' || position === 'top') {\n titleOption.top = position;\n }\n return titleOption;\n }\n\n protected calcLegendOption(\n chartLegend: IDEChartLegend,\n ): EChartsOption['legend'] {\n const { showLegend, legendPos } = chartLegend;\n const legendOption: EChartsOption['legend'] = {};\n legendOption.show = showLegend;\n const position = legendPos?.toLowerCase();\n if (position === 'left' || position === 'right') {\n legendOption.left = position;\n legendOption.top = 'middle';\n legendOption.orient = 'vertical';\n } else if (position === 'bottom') {\n legendOption.top = position;\n }\n return legendOption;\n }\n\n protected calcXYAxisOption(\n chartAxises: IChartYAxis[] | IChartXAxis[],\n ): XAXisComponentOption[] | YAXisComponentOption[] {\n const AxisOption: EChartsOption['xAxis'] | EChartsOption['yAxis'] = [];\n chartAxises.forEach(chartAxis => {\n const { position, dataShowMode, userParam } = chartAxis;\n let option = {\n type: chartAxis.echartsType,\n name: chartAxis.caption,\n max: chartAxis.maxValue,\n min: chartAxis.minValue,\n position,\n axisLabel: {\n formatter: (value: string) => {\n if (dataShowMode === 1) {\n if (value.length > 4) {\n return `${value.slice(0, 4).split('').join('\\n')}\\n...`;\n }\n return value.split('').join('\\n');\n }\n if (dataShowMode === 2) {\n if (value.length > 4) {\n return `${value.slice(0, 4)}...`;\n }\n }\n return value;\n },\n rotate: dataShowMode === 3 ? 45 : 0,\n },\n };\n\n // 有自定义参数的合并自定义参数\n if (userParam) {\n option = mergeDeepRight(option, parseUserParams(userParam));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AxisOption.push(option as any);\n });\n return AxisOption;\n }\n\n /**\n * 加载代码表,\n * - 如果已经加载过会清空缓存重新加载\n * - 相同的代码表之后加载一次\n * @author lxm\n * @date 2023-06-09 08:05:28\n * @param {IContext} context\n * @param {IParams} params\n * @return {*} {Promise<void>}\n */\n async loadCodeList(context: IContext, params: IParams): Promise<void> {\n // 先清空缓存;\n this.codeListMap.clear();\n if (!this.model.dechartSerieses?.length) {\n return;\n }\n\n const app = ibiz.hub.getApp(context.srfappid);\n const loadCodeList = async (key: string | undefined) => {\n if (!key || this.codeListMap.has(key)) {\n return;\n }\n const codeListItems = await app.codeList.get(key, context, params);\n this.codeListMap.set(key, codeListItems);\n };\n\n await Promise.all(\n this.model.dechartSerieses.map(async series => {\n const { seriesCodeListId, catalogCodeListId } = series;\n await loadCodeList(seriesCodeListId);\n await loadCodeList(catalogCodeListId);\n }),\n );\n }\n\n /**\n * 根据数据计算出最终的options\n * @author lxm\n * @date 2023-06-09 08:10:52\n * @param {IData[]} data\n * @return {*} {EChartsOption}\n */\n calcOptionsByData(data: IData[]): EChartsOption {\n // 清空操作\n this.radarMap.clear();\n this.options = {\n series: [],\n radar: [],\n };\n\n // 雷达图表先计算坐标系\n this.seriesGenerators.forEach(generator => {\n if (generator.model.seriesType === 'radar') {\n (generator as RadarSeriesGenerator).calcRadarCoordSystem(data);\n }\n });\n // 生成雷达坐标系\n if (this.radarMap.size) {\n this.options.radar = [...this.radarMap.values()].map(radar =>\n radar.toOptions(),\n );\n }\n\n // 生成seriesOptions\n const seriesOption: SeriesOption[] = [];\n this.seriesGenerators.forEach(generator => {\n const series = generator.calcByData(data);\n if (series instanceof Array) {\n seriesOption.push(...series);\n } else {\n seriesOption.push(series);\n }\n });\n this.options.series = seriesOption;\n\n // 合并静态和动态的options\n this.options = mergeDeepRight(\n this.staticOptions,\n this.options,\n ) as EChartsOption;\n\n // 有自定义参数的合并自定义参数\n if (this.chartUserParam) {\n this.options = mergeDeepRight(\n this.options,\n this.chartUserParam,\n ) as EChartsOption;\n }\n\n return this.options;\n }\n\n getSrfkeyByParams(params: ECElementEvent): string {\n const generator = this.seriesGenerators[params.seriesIndex!];\n if (!generator) {\n throw new RuntimeError(`找不到${params.seriesIndex}序列的generator!`);\n }\n return generator.getSrfkeyByParams(params);\n }\n\n // protected calcRadarSeries(data: IData[], series: IChartSeriesFunnel) {\n // // 初始化radarMap\n // let radarIndex = this.radarMap.size; // 默认新坐标系的索引\n // let radarMapObj: Record<string, number>;\n // if (this.radarMap.has(catalogField)) {\n // radarMapObj = this.radarMap.get(catalogField)!;\n // radarIndex = radarMapObj.radarIndex;\n // } else {\n // radarMapObj = {\n // radarIndex,\n // };\n // this.radarMap.set(catalogField, radarMapObj);\n // }\n\n // // 雷达坐标系维度顺序\n // let indicatorKeys: string[] = [];\n // if (Object.values(radarMapObj).length > 1) {\n // indicatorKeys = Object.keys(radarMapObj).slice(1);\n // }\n\n // // 生成雷达数据,多个分组在一起\n // const radarData = Object.keys(groupChartData).map(group => {\n // // 处理每个序列的数据\n // const catalogData = groupChartData[group];\n // if (indicatorKeys.length === 0) {\n // indicatorKeys = Object.keys(catalogData);\n // }\n\n // const value = indicatorKeys.map(key => {\n // // 更新radar坐标系的最大值\n // if (\n // radarMapObj[key] === undefined ||\n // radarMapObj[key] < catalogData[key]\n // ) {\n // radarMapObj[key] = catalogData[key];\n // }\n // return catalogData[key];\n // });\n\n // return {\n // value,\n // name: group !== 'default' ? group : seriesName,\n // };\n // });\n\n // const seriesOption: SeriesOption = {\n // type: 'radar',\n // ...this.seriesDefaultOptions,\n // radarIndex,\n // data: radarData,\n // };\n\n // return seriesOption;\n // }\n}\n","import { MDControlService } from '@ibiz-template/runtime';\nimport { IDEChart } from '@ibiz/model-core';\n\n/**\n * 图表部件服务\n * @author lxm\n * @date 2023-05-15 09:53:35\n * @export\n * @class GridService\n * @extends {MDControlService<IDEChart>}\n */\nexport class ChartService extends MDControlService<IDEChart> {}\n","import { RuntimeError } from '@ibiz-template/core';\nimport {\n MDControlController,\n IChartEvent,\n IChartController,\n IChartState,\n MDCtrlLoadParams,\n} from '@ibiz-template/runtime';\nimport { IDEChart } from '@ibiz/model-core';\nimport { EChartsOption, EChartsType, init } from 'echarts';\nimport { ChartOptionsGenerator } from './generator/chart-options-generator';\nimport { ChartService } from './chart.service';\n\nexport class ChartController\n extends MDControlController<IDEChart, IChartState, IChartEvent>\n implements IChartController\n{\n declare service: ChartService;\n\n /**\n * echarts对象\n * @author lxm\n * @date 2023-06-07 09:36:58\n * @type {EChartsType}\n */\n chart?: EChartsType;\n\n generator!: ChartOptionsGenerator;\n\n /**\n * 最终使用的echarts配置\n * @author lxm\n * @date 2023-06-07 09:51:09\n * @type {EChartsOption}\n */\n options?: EChartsOption;\n\n protected async onCreated(): Promise<void> {\n await super.onCreated();\n this.service = new ChartService(this.model);\n await this.service.init(this.context);\n this.generator = new ChartOptionsGenerator(this.model);\n await this.generator.loadCodeList(this.context, this.params);\n\n // 监听resize调整图表大小\n window.addEventListener('resize', this.resizeChart);\n }\n\n async afterLoad(args: MDCtrlLoadParams, items: IData[]): Promise<IData[]> {\n const result = await super.afterLoad(args, items);\n this.calcOptions();\n return result;\n }\n\n /**\n * 初始化echarts对象\n * @author lxm\n * @date 2023-06-07 09:37:05\n * @param {HTMLElement} dom\n */\n initChart(dom: HTMLElement): void {\n if (!dom) {\n throw new RuntimeError('图表初始化的dom元素不存在!');\n }\n this.chart = init(dom);\n this.chart.on('click', params => {\n const srfkey = this.generator.getSrfkeyByParams(params);\n const activeData = this.state.items.find(item => item.srfkey === srfkey);\n console.log('实体数据', activeData);\n });\n }\n\n /**\n * 根据数据计算最终的options\n * 并刷新echarts\n * @author lxm\n * @date 2023-06-07 09:58:00\n * @param {IData[]} [data=this.state.items]\n */\n calcOptions(data: IData[] = this.state.items): void {\n this.options = this.generator.calcOptionsByData(data);\n this.updateChart();\n }\n\n /**\n * 更新echart图表\n * @author lxm\n * @date 2023-06-07 10:03:48\n */\n updateChart(): void {\n if (!this.chart) {\n throw new RuntimeError('chart对象没有正确初始化');\n }\n if (!this.options) {\n throw new RuntimeError('options还没计算');\n }\n this.chart.setOption(this.options);\n this.resizeChart();\n }\n\n /**\n * 刷新图表的大小\n * @author lxm\n * @date 2023-06-09 09:37:25\n */\n resizeChart() {\n if (this.chart) {\n this.chart.resize();\n }\n }\n\n protected async onDestroyed(): Promise<void> {\n window.removeEventListener('resize', this.resizeChart);\n await super.onDestroyed();\n this.chart?.dispose();\n }\n}\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nimport { IDEChart } from '@ibiz/model-core';\nimport { ChartController } from './chart.controller';\nimport './chart.scss';\n\nconst ChartControl = defineComponent({\n name: 'IBizChartControl',\n props: {\n modelData: { type: Object as PropType<IDEChart>, required: true },\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n },\n setup() {\n const c = useControlController((...args) => new ChartController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const chartRef = ref();\n\n onMounted(() => {\n c.initChart(chartRef.value);\n });\n\n return {\n c,\n ns,\n chartRef,\n };\n },\n render() {\n return (\n <iBizControlBase controller={this.c}>\n <div ref='chartRef' class={this.ns.e('chart')}>\n 图表\n </div>\n </iBizControlBase>\n );\n },\n});\n\nexport default ChartControl;\n"],"names":["__defProp","__defNormalProp","obj","key","value","__publicField","DEFAULT_GROUP","BaseSeriesGenerator","model","chartGenerator","_a","chartSeriesEncode","caption","id","userParam","RuntimeModelError","chartXAxisId","chartYAxisId","toNumberOrNil","parseUserParams","codeListKey","val","isExclude","isNil","codeListItems","find","x","data","groupData","seriesCodeListId","catalogCodeListId","item","group","groupVal","catalog","catalogData","options","mergeDeepRight","params","LineSeriesGenerator","stack","step","BarSeriesGenerator","FunnelSeriesGenerator","PieSeriesGenerator","ScatterSeriesGenerator","RadarCoordSystem","index","name","max","indicator","maxValue","RadarSeriesGenerator","radar","_data","radarData","userParams","option","customKey","ChartOptionsGenerator","dechartTitle","dechartLegend","chartXAxises","chartYAxises","series","seriesGenerator","chartTitle","showTitle","title","subTitle","titlePos","titleOption","position","chartLegend","showLegend","legendPos","legendOption","chartAxises","AxisOption","chartAxis","dataShowMode","context","app","loadCodeList","generator","seriesOption","RuntimeError","ChartService","MDControlService","ChartController","MDControlController","args","items","result","dom","init","srfkey","activeData","ChartControl","exports","defineComponent","props","modelData","type","Object","required","default","setup","c","useControlController","ns","useNamespace","controlType","toLowerCase","chartRef","ref","onMounted","initChart","render","_createVNode","_resolveComponent","e","_createTextVNode"],"mappings":"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"}