neo-cmp-cli 1.8.2 → 1.8.3

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 (200) hide show
  1. package/bin/neo.js +1 -1
  2. package/package.json +6 -5
  3. package/src/{module/index.js → index.js} +14 -14
  4. package/src/{module/main.js → main.js} +18 -18
  5. package/src/module/neoInitByCopy.js +6 -6
  6. package/src/neo/webpack.mf.js +1 -1
  7. package/src/oss/publish2oss.js +1 -1
  8. package/src/utils/cmpUtils/createCmpByZip.js +7 -5
  9. package/src/utils/cmpUtils/pullCmp.js +1 -1
  10. package/src/utils/cmpUtils/pushCmp.js +9 -7
  11. package/src/utils/projectUtils/updatePublishLog.js +1 -1
  12. package/test/demo.js +1 -1
  13. package/test/demo3.js +1 -1
  14. package/test/neo.config.js +77 -0
  15. package/src/template/antd-custom-cmp-template/.prettierrc.js +0 -12
  16. package/src/template/antd-custom-cmp-template/README.md +0 -153
  17. package/src/template/antd-custom-cmp-template/commitlint.config.js +0 -59
  18. package/src/template/antd-custom-cmp-template/neo.config.js +0 -144
  19. package/src/template/antd-custom-cmp-template/package.json +0 -60
  20. package/src/template/antd-custom-cmp-template/public/css/base.css +0 -283
  21. package/src/template/antd-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  22. package/src/template/antd-custom-cmp-template/public/template.html +0 -13
  23. package/src/template/antd-custom-cmp-template/src/assets/css/common.scss +0 -127
  24. package/src/template/antd-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  25. package/src/template/antd-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  26. package/src/template/antd-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  27. package/src/template/antd-custom-cmp-template/src/assets/img/favicon.png +0 -0
  28. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/README.md +0 -39
  29. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/index.tsx +0 -462
  30. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/model.ts +0 -75
  31. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/style.scss +0 -1667
  32. package/src/template/antd-custom-cmp-template/src/components/infoCard/index.tsx +0 -87
  33. package/src/template/antd-custom-cmp-template/src/components/infoCard/model.ts +0 -80
  34. package/src/template/antd-custom-cmp-template/src/components/infoCard/style.scss +0 -105
  35. package/src/template/antd-custom-cmp-template/tsconfig.json +0 -68
  36. package/src/template/develop/neo-custom-cmp-template/.prettierrc.js +0 -12
  37. package/src/template/develop/neo-custom-cmp-template/README.md +0 -48
  38. package/src/template/develop/neo-custom-cmp-template/commitlint.config.js +0 -59
  39. package/src/template/develop/neo-custom-cmp-template/docs/README.md +0 -13
  40. package/src/template/develop/neo-custom-cmp-template/neo.config.js +0 -121
  41. package/src/template/develop/neo-custom-cmp-template/package.json +0 -63
  42. package/src/template/develop/neo-custom-cmp-template/public/css/base.css +0 -283
  43. package/src/template/develop/neo-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  44. package/src/template/develop/neo-custom-cmp-template/public/template.html +0 -13
  45. package/src/template/develop/neo-custom-cmp-template/src/assets/css/common.scss +0 -127
  46. package/src/template/develop/neo-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  47. package/src/template/develop/neo-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  48. package/src/template/develop/neo-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  49. package/src/template/develop/neo-custom-cmp-template/src/assets/img/favicon.png +0 -0
  50. package/src/template/develop/neo-custom-cmp-template/src/assets/img/table.svg +0 -1
  51. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/README.md +0 -65
  52. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/index.tsx +0 -180
  53. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/model.ts +0 -50
  54. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/style.scss +0 -260
  55. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/README.md +0 -94
  56. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/index.tsx +0 -251
  57. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/model.ts +0 -56
  58. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/style.scss +0 -120
  59. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/README.md +0 -115
  60. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/index.tsx +0 -304
  61. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/model.ts +0 -87
  62. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/style.scss +0 -127
  63. package/src/template/develop/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -29
  64. package/src/template/develop/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -39
  65. package/src/template/develop/neo-custom-cmp-template/src/utils/xobjects.ts +0 -203
  66. package/src/template/develop/neo-custom-cmp-template/tsconfig.json +0 -68
  67. package/src/template/echarts-custom-cmp-template/.prettierrc.js +0 -12
  68. package/src/template/echarts-custom-cmp-template/README.md +0 -198
  69. package/src/template/echarts-custom-cmp-template/commitlint.config.js +0 -59
  70. package/src/template/echarts-custom-cmp-template/neo.config.js +0 -140
  71. package/src/template/echarts-custom-cmp-template/package.json +0 -61
  72. package/src/template/echarts-custom-cmp-template/public/css/base.css +0 -283
  73. package/src/template/echarts-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  74. package/src/template/echarts-custom-cmp-template/public/template.html +0 -13
  75. package/src/template/echarts-custom-cmp-template/src/assets/css/common.scss +0 -127
  76. package/src/template/echarts-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  77. package/src/template/echarts-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  78. package/src/template/echarts-custom-cmp-template/src/assets/img/chart.svg +0 -1
  79. package/src/template/echarts-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  80. package/src/template/echarts-custom-cmp-template/src/assets/img/favicon.png +0 -0
  81. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/README.md +0 -186
  82. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/index.tsx +0 -724
  83. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/model.ts +0 -151
  84. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/style.scss +0 -209
  85. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/README.md +0 -125
  86. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/USAGE.md +0 -190
  87. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/index.tsx +0 -385
  88. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/model.ts +0 -107
  89. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/style.scss +0 -192
  90. package/src/template/echarts-custom-cmp-template/src/utils/url.ts +0 -82
  91. package/src/template/echarts-custom-cmp-template/tsconfig.json +0 -68
  92. package/src/template/empty-cmp/index.tsx +0 -58
  93. package/src/template/empty-cmp/model.ts +0 -79
  94. package/src/template/empty-cmp/style.scss +0 -72
  95. package/src/template/empty-custom-cmp-template/.prettierrc.js +0 -12
  96. package/src/template/empty-custom-cmp-template/README.md +0 -154
  97. package/src/template/empty-custom-cmp-template/commitlint.config.js +0 -59
  98. package/src/template/empty-custom-cmp-template/neo.config.js +0 -138
  99. package/src/template/empty-custom-cmp-template/package.json +0 -58
  100. package/src/template/empty-custom-cmp-template/public/css/base.css +0 -283
  101. package/src/template/empty-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  102. package/src/template/empty-custom-cmp-template/public/template.html +0 -13
  103. package/src/template/empty-custom-cmp-template/src/assets/css/common.scss +0 -127
  104. package/src/template/empty-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  105. package/src/template/empty-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  106. package/src/template/empty-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  107. package/src/template/empty-custom-cmp-template/src/assets/img/favicon.png +0 -0
  108. package/src/template/empty-custom-cmp-template/src/assets/img/map.svg +0 -1
  109. package/src/template/empty-custom-cmp-template/src/components/README.md +0 -3
  110. package/src/template/empty-custom-cmp-template/tsconfig.json +0 -68
  111. package/src/template/neo-custom-cmp-template/.prettierrc.js +0 -12
  112. package/src/template/neo-custom-cmp-template/README.md +0 -155
  113. package/src/template/neo-custom-cmp-template/commitlint.config.js +0 -59
  114. package/src/template/neo-custom-cmp-template/docs/README.md +0 -244
  115. package/src/template/neo-custom-cmp-template/neo.config.js +0 -140
  116. package/src/template/neo-custom-cmp-template/package.json +0 -66
  117. package/src/template/neo-custom-cmp-template/public/css/base.css +0 -283
  118. package/src/template/neo-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  119. package/src/template/neo-custom-cmp-template/public/template.html +0 -13
  120. package/src/template/neo-custom-cmp-template/src/assets/css/common.scss +0 -127
  121. package/src/template/neo-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  122. package/src/template/neo-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  123. package/src/template/neo-custom-cmp-template/src/assets/img/card-list.svg +0 -1
  124. package/src/template/neo-custom-cmp-template/src/assets/img/contact-form.svg +0 -1
  125. package/src/template/neo-custom-cmp-template/src/assets/img/custom-form.svg +0 -1
  126. package/src/template/neo-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  127. package/src/template/neo-custom-cmp-template/src/assets/img/data-list.svg +0 -1
  128. package/src/template/neo-custom-cmp-template/src/assets/img/detail.svg +0 -1
  129. package/src/template/neo-custom-cmp-template/src/assets/img/table.svg +0 -1
  130. package/src/template/neo-custom-cmp-template/src/components/entityCardList/README.md +0 -61
  131. package/src/template/neo-custom-cmp-template/src/components/entityCardList/index.tsx +0 -202
  132. package/src/template/neo-custom-cmp-template/src/components/entityCardList/model.ts +0 -74
  133. package/src/template/neo-custom-cmp-template/src/components/entityCardList/style.scss +0 -260
  134. package/src/template/neo-custom-cmp-template/src/components/entityDetail/README.md +0 -176
  135. package/src/template/neo-custom-cmp-template/src/components/entityDetail/index.tsx +0 -334
  136. package/src/template/neo-custom-cmp-template/src/components/entityDetail/model.ts +0 -123
  137. package/src/template/neo-custom-cmp-template/src/components/entityDetail/style.scss +0 -292
  138. package/src/template/neo-custom-cmp-template/src/components/entityForm/README.md +0 -176
  139. package/src/template/neo-custom-cmp-template/src/components/entityForm/index.tsx +0 -615
  140. package/src/template/neo-custom-cmp-template/src/components/entityForm/model.ts +0 -107
  141. package/src/template/neo-custom-cmp-template/src/components/entityForm/style.scss +0 -370
  142. package/src/template/neo-custom-cmp-template/src/components/entityTable/README.md +0 -92
  143. package/src/template/neo-custom-cmp-template/src/components/entityTable/index.tsx +0 -784
  144. package/src/template/neo-custom-cmp-template/src/components/entityTable/model.ts +0 -134
  145. package/src/template/neo-custom-cmp-template/src/components/entityTable/style.scss +0 -304
  146. package/src/template/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -37
  147. package/src/template/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -76
  148. package/src/template/neo-custom-cmp-template/src/utils/xobjects.ts +0 -162
  149. package/src/template/neo-custom-cmp-template/tsconfig.json +0 -49
  150. package/src/template/react-custom-cmp-template/.prettierrc.js +0 -12
  151. package/src/template/react-custom-cmp-template/README.md +0 -154
  152. package/src/template/react-custom-cmp-template/commitlint.config.js +0 -59
  153. package/src/template/react-custom-cmp-template/neo.config.js +0 -137
  154. package/src/template/react-custom-cmp-template/package.json +0 -57
  155. package/src/template/react-custom-cmp-template/public/css/base.css +0 -283
  156. package/src/template/react-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  157. package/src/template/react-custom-cmp-template/public/template.html +0 -13
  158. package/src/template/react-custom-cmp-template/src/assets/css/common.scss +0 -127
  159. package/src/template/react-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  160. package/src/template/react-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  161. package/src/template/react-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  162. package/src/template/react-custom-cmp-template/src/assets/img/favicon.png +0 -0
  163. package/src/template/react-custom-cmp-template/src/components/infoCard/index.jsx +0 -45
  164. package/src/template/react-custom-cmp-template/src/components/infoCard/model.js +0 -81
  165. package/src/template/react-custom-cmp-template/src/components/infoCard/style.scss +0 -67
  166. package/src/template/react-ts-custom-cmp-template/.prettierrc.js +0 -12
  167. package/src/template/react-ts-custom-cmp-template/README.md +0 -154
  168. package/src/template/react-ts-custom-cmp-template/commitlint.config.js +0 -59
  169. package/src/template/react-ts-custom-cmp-template/neo.config.js +0 -138
  170. package/src/template/react-ts-custom-cmp-template/package.json +0 -59
  171. package/src/template/react-ts-custom-cmp-template/public/css/base.css +0 -283
  172. package/src/template/react-ts-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  173. package/src/template/react-ts-custom-cmp-template/public/template.html +0 -13
  174. package/src/template/react-ts-custom-cmp-template/src/assets/css/common.scss +0 -127
  175. package/src/template/react-ts-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  176. package/src/template/react-ts-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  177. package/src/template/react-ts-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  178. package/src/template/react-ts-custom-cmp-template/src/assets/img/favicon.png +0 -0
  179. package/src/template/react-ts-custom-cmp-template/src/assets/img/map.svg +0 -1
  180. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/README.md +0 -2
  181. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/index.tsx +0 -208
  182. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/model.ts +0 -92
  183. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/style.scss +0 -350
  184. package/src/template/react-ts-custom-cmp-template/tsconfig.json +0 -68
  185. package/src/template/vue2-custom-cmp-template/.prettierrc.js +0 -12
  186. package/src/template/vue2-custom-cmp-template/README.md +0 -154
  187. package/src/template/vue2-custom-cmp-template/commitlint.config.js +0 -59
  188. package/src/template/vue2-custom-cmp-template/neo.config.js +0 -146
  189. package/src/template/vue2-custom-cmp-template/package.json +0 -59
  190. package/src/template/vue2-custom-cmp-template/public/css/base.css +0 -283
  191. package/src/template/vue2-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  192. package/src/template/vue2-custom-cmp-template/public/template.html +0 -13
  193. package/src/template/vue2-custom-cmp-template/src/assets/css/common.scss +0 -126
  194. package/src/template/vue2-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  195. package/src/template/vue2-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  196. package/src/template/vue2-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  197. package/src/template/vue2-custom-cmp-template/src/assets/img/favicon.png +0 -0
  198. package/src/template/vue2-custom-cmp-template/src/components/vueInfoCard/index.vue +0 -131
  199. package/src/template/vue2-custom-cmp-template/src/components/vueInfoCard/model.js +0 -81
  200. package/src/utils/getConfigObj.js +0 -18
@@ -1,724 +0,0 @@
1
- import * as React from 'react';
2
- import * as echarts from 'echarts';
3
- import './style.scss';
4
-
5
- /**
6
- * 图表组件属性接口
7
- * 定义了图表组件接收的所有配置参数
8
- */
9
- interface ChartWidgetProps {
10
- /** 图表类型:line(折线图)、bar(柱状图)、pie(饼图)、scatter(散点图)、radar(雷达图)、gauge(仪表盘)、funnel(漏斗图)、sankey(桑基图) */
11
- chartType: string;
12
- /** 图表主标题 */
13
- title: string;
14
- /** 图表副标题 */
15
- subtitle: string;
16
- /** 图表宽度(像素) */
17
- width: number;
18
- /** 图表高度(像素) */
19
- height: number;
20
- /** 图表主题:default(默认)、dark(深色)、light(明亮)、business(商务) */
21
- theme: string;
22
- /** 是否显示图例 */
23
- showLegend: boolean;
24
- /** 是否显示提示框 */
25
- showTooltip: boolean;
26
- /** 是否显示数据缩放控件 */
27
- showDataZoom: boolean;
28
- /** 是否显示网格线 */
29
- showGrid: boolean;
30
- /** 背景颜色 */
31
- backgroundColor: string;
32
- /** 文字颜色 */
33
- textColor: string;
34
- /** 模拟数据对象,包含各种图表类型的数据 */
35
- mockData: any;
36
- /** 数据配置对象 */
37
- dataConfig: any;
38
- /** AMIS 数据对象,包含用户信息和系统信息 */
39
- data?: any;
40
- }
41
-
42
- /**
43
- * 酷炫图表组件
44
- * 基于 ECharts 实现的多类型图表组件,支持折线图、柱状图、饼图、散点图、雷达图、仪表盘、漏斗图、桑基图
45
- * 提供丰富的配置选项和交互功能
46
- */
47
- export default class ChartWidget extends React.PureComponent<ChartWidgetProps> {
48
- /** 图表容器的 DOM 引用 */
49
- private chartRef: React.RefObject<HTMLDivElement>;
50
-
51
- /** ECharts 实例对象 */
52
- private chartInstance: echarts.ECharts | null = null;
53
-
54
- constructor(props: ChartWidgetProps) {
55
- super(props);
56
- this.chartRef = React.createRef();
57
- }
58
-
59
- /**
60
- * 组件默认属性配置
61
- * 当父组件未传入对应属性时使用这些默认值
62
- */
63
- static defaultProps = {
64
- chartType: 'line',
65
- title: '图表标题',
66
- subtitle: '',
67
- width: 800,
68
- height: 400,
69
- theme: 'default',
70
- showLegend: true,
71
- showTooltip: true,
72
- showDataZoom: false,
73
- showGrid: true,
74
- backgroundColor: 'transparent',
75
- textColor: '#333',
76
- mockData: {},
77
- dataConfig: {},
78
- };
79
-
80
- /**
81
- * 组件挂载完成后初始化图表
82
- */
83
- componentDidMount() {
84
- this.initChart();
85
- }
86
-
87
- /**
88
- * 组件更新时检查是否需要重新渲染图表
89
- * @param prevProps 上一次的属性
90
- */
91
- componentDidUpdate(prevProps: ChartWidgetProps) {
92
- if (this.shouldUpdateChart(prevProps)) {
93
- this.updateChart();
94
- }
95
- }
96
-
97
- /**
98
- * 组件卸载前清理图表实例,防止内存泄漏
99
- */
100
- componentWillUnmount() {
101
- if (this.chartInstance) {
102
- this.chartInstance.dispose();
103
- }
104
- }
105
-
106
- /**
107
- * 判断是否需要更新图表
108
- * 通过比较当前属性和上一次属性,决定是否重新渲染图表
109
- * @param prevProps 上一次的属性
110
- * @returns 是否需要更新图表
111
- */
112
- shouldUpdateChart(prevProps: ChartWidgetProps) {
113
- const {
114
- chartType,
115
- mockData,
116
- dataConfig,
117
- width,
118
- height,
119
- theme,
120
- title,
121
- subtitle,
122
- backgroundColor,
123
- textColor,
124
- showLegend,
125
- showTooltip,
126
- showDataZoom,
127
- showGrid,
128
- } = this.props;
129
- return (
130
- chartType !== prevProps.chartType ||
131
- mockData !== prevProps.mockData ||
132
- dataConfig !== prevProps.dataConfig ||
133
- title !== prevProps.title ||
134
- subtitle !== prevProps.subtitle ||
135
- width !== prevProps.width ||
136
- height !== prevProps.height ||
137
- theme !== prevProps.theme ||
138
- backgroundColor !== prevProps.backgroundColor ||
139
- textColor !== prevProps.textColor ||
140
- showLegend !== prevProps.showLegend ||
141
- showTooltip !== prevProps.showTooltip ||
142
- showDataZoom !== prevProps.showDataZoom ||
143
- showGrid !== prevProps.showGrid
144
- );
145
- }
146
-
147
- /**
148
- * 初始化图表实例
149
- * 创建 ECharts 实例并设置初始配置
150
- */
151
- initChart() {
152
- if (!this.chartRef.current) return;
153
-
154
- this.chartInstance = echarts.init(this.chartRef.current, this.props.theme);
155
- this.updateChart();
156
- }
157
-
158
- /**
159
- * 更新图表配置
160
- * 根据当前属性生成新的图表配置并应用
161
- */
162
- updateChart() {
163
- if (!this.chartInstance) return;
164
-
165
- try {
166
- const option = this.getChartOption();
167
- // 验证 option 是否有效
168
- if (option && option.series && Array.isArray(option.series)) {
169
- this.chartInstance.setOption(option, true);
170
- } else {
171
- console.warn('Chart option is invalid:', option);
172
- }
173
- } catch (error) {
174
- console.error('Error updating chart:', error);
175
- }
176
- }
177
-
178
- /**
179
- * 获取图表配置选项
180
- * 根据组件属性生成 ECharts 配置对象
181
- * @returns ECharts 配置对象
182
- */
183
- getChartOption() {
184
- const {
185
- chartType,
186
- title,
187
- subtitle,
188
- showLegend,
189
- showTooltip,
190
- showDataZoom,
191
- showGrid,
192
- backgroundColor,
193
- textColor,
194
- mockData,
195
- dataConfig,
196
- } = this.props;
197
-
198
- // 基础配置选项,所有图表类型共享
199
- const baseOption = {
200
- backgroundColor: backgroundColor || 'transparent',
201
- textStyle: {
202
- color: textColor || '#333',
203
- },
204
- title: {
205
- text: title || '图表标题',
206
- subtext: subtitle || '',
207
- left: 'left',
208
- textStyle: {
209
- color: textColor || '#333',
210
- fontSize: 18,
211
- fontWeight: 'bold',
212
- },
213
- subtextStyle: {
214
- color: textColor || '#666',
215
- fontSize: 12,
216
- },
217
- },
218
- tooltip: showTooltip
219
- ? {
220
- trigger: 'axis',
221
- backgroundColor: 'rgba(0, 0, 0, 0.8)',
222
- borderColor: '#333',
223
- textStyle: {
224
- color: '#fff',
225
- },
226
- axisPointer: {
227
- type: 'cross',
228
- crossStyle: {
229
- color: '#999',
230
- },
231
- },
232
- }
233
- : undefined,
234
- legend: showLegend
235
- ? {
236
- data: mockData?.series?.map((s: any) => s.name) || [],
237
- top: 'bottom',
238
- textStyle: {
239
- color: textColor || '#333',
240
- },
241
- }
242
- : undefined,
243
- grid: showGrid
244
- ? {
245
- left: '3%',
246
- right: '4%',
247
- bottom: '10%',
248
- top: '18%',
249
- containLabel: true,
250
- }
251
- : undefined,
252
- dataZoom: showDataZoom
253
- ? [
254
- {
255
- type: 'inside',
256
- start: 0,
257
- end: 100,
258
- },
259
- {
260
- start: 0,
261
- end: 100,
262
- height: 30,
263
- bottom: 10,
264
- },
265
- ]
266
- : undefined,
267
- };
268
-
269
- // 根据图表类型返回对应的配置
270
- switch (chartType) {
271
- case 'line':
272
- return this.getLineChartOption(baseOption, mockData, dataConfig);
273
- case 'bar':
274
- return this.getBarChartOption(baseOption, mockData, dataConfig);
275
- case 'pie':
276
- return this.getPieChartOption(baseOption, mockData, dataConfig);
277
- case 'scatter':
278
- return this.getScatterChartOption(baseOption, mockData, dataConfig);
279
- case 'radar':
280
- return this.getRadarChartOption(baseOption, mockData, dataConfig);
281
- case 'gauge':
282
- return this.getGaugeChartOption(baseOption, mockData, dataConfig);
283
- case 'funnel':
284
- return this.getFunnelChartOption(baseOption, mockData, dataConfig);
285
- case 'sankey':
286
- return this.getSankeyChartOption(baseOption, mockData, dataConfig);
287
- default:
288
- return this.getLineChartOption(baseOption, mockData, dataConfig);
289
- }
290
- }
291
-
292
- /**
293
- * 获取折线图配置
294
- * @param baseOption 基础配置选项
295
- * @param mockData 模拟数据
296
- * @param dataConfig 数据配置
297
- * @returns 折线图配置对象
298
- */
299
- getLineChartOption(baseOption: any, mockData: any, dataConfig: any) {
300
- const series = mockData?.series || [
301
- {
302
- name: '数据',
303
- data: [120, 200, 150, 80, 70, 110, 130],
304
- },
305
- ];
306
-
307
- // 确保每个 series 都有正确的 type 属性
308
- const formattedSeries = series.map((item: any) => ({
309
- name: item.name || '数据',
310
- type: 'line',
311
- data: item.data || [],
312
- smooth: true,
313
- symbol: 'circle',
314
- symbolSize: 6,
315
- lineStyle: {
316
- width: 3,
317
- },
318
- areaStyle: {
319
- opacity: 0.3,
320
- },
321
- }));
322
-
323
- return {
324
- ...baseOption,
325
- xAxis: {
326
- type: 'category',
327
- data: mockData?.xAxis || [
328
- 'Mon',
329
- 'Tue',
330
- 'Wed',
331
- 'Thu',
332
- 'Fri',
333
- 'Sat',
334
- 'Sun',
335
- ],
336
- axisLine: {
337
- lineStyle: {
338
- color: this.props.textColor || '#333',
339
- },
340
- },
341
- },
342
- yAxis: {
343
- type: 'value',
344
- axisLine: {
345
- lineStyle: {
346
- color: this.props.textColor || '#333',
347
- },
348
- },
349
- },
350
- series: formattedSeries,
351
- };
352
- }
353
-
354
- /**
355
- * 获取柱状图配置
356
- * @param baseOption 基础配置选项
357
- * @param mockData 模拟数据
358
- * @param dataConfig 数据配置
359
- * @returns 柱状图配置对象
360
- */
361
- getBarChartOption(baseOption: any, mockData: any, dataConfig: any) {
362
- const series = mockData?.series || [
363
- {
364
- name: '数据',
365
- data: [120, 200, 150, 80, 70, 110, 130],
366
- },
367
- ];
368
-
369
- // 确保每个 series 都有正确的 type 属性
370
- const formattedSeries = series.map((item: any) => ({
371
- name: item.name || '数据',
372
- type: 'bar',
373
- data: item.data || [],
374
- itemStyle: {
375
- borderRadius: [4, 4, 0, 0],
376
- },
377
- }));
378
-
379
- return {
380
- ...baseOption,
381
- xAxis: {
382
- type: 'category',
383
- data: mockData?.xAxis || [
384
- 'Mon',
385
- 'Tue',
386
- 'Wed',
387
- 'Thu',
388
- 'Fri',
389
- 'Sat',
390
- 'Sun',
391
- ],
392
- axisLine: {
393
- lineStyle: {
394
- color: this.props.textColor || '#333',
395
- },
396
- },
397
- },
398
- yAxis: {
399
- type: 'value',
400
- axisLine: {
401
- lineStyle: {
402
- color: this.props.textColor || '#333',
403
- },
404
- },
405
- },
406
- series: formattedSeries,
407
- };
408
- }
409
-
410
- /**
411
- * 获取饼图配置
412
- * @param baseOption 基础配置选项
413
- * @param mockData 模拟数据
414
- * @param dataConfig 数据配置
415
- * @returns 饼图配置对象
416
- */
417
- getPieChartOption(baseOption: any, mockData: any, dataConfig: any) {
418
- // 饼图数据获取逻辑修复
419
- let pieData = [];
420
-
421
- // 尝试多种数据源
422
- if (mockData?.pieData && Array.isArray(mockData.pieData)) {
423
- // 优先使用专门的饼图数据
424
- pieData = mockData.pieData;
425
- } else if (mockData?.series?.[0]?.data && Array.isArray(mockData.series[0].data)) {
426
- // 使用系列数据
427
- pieData = mockData.series[0].data;
428
- } else if (mockData?.series && Array.isArray(mockData.series)) {
429
- // 将系列数据转换为饼图格式
430
- pieData = mockData.series.map((item: any) => ({
431
- name: item.name || '数据',
432
- value: Array.isArray(item.data) ? item.data.reduce((sum: number, val: number) => sum + val, 0) : item.value || 0
433
- }));
434
- } else {
435
- // 使用默认数据
436
- pieData = [
437
- { value: 1048, name: '搜索引擎' },
438
- { value: 735, name: '直接访问' },
439
- { value: 580, name: '邮件营销' },
440
- { value: 484, name: '联盟广告' },
441
- { value: 300, name: '视频广告' },
442
- ];
443
- }
444
-
445
- return {
446
- ...baseOption,
447
- series: [
448
- {
449
- name: '数据',
450
- type: 'pie',
451
- radius: ['40%', '70%'],
452
- center: ['50%', '50%'],
453
- data: pieData,
454
- label: {
455
- show: true,
456
- position: 'outside',
457
- fontSize: 12,
458
- color: this.props.textColor || '#333',
459
- formatter: '{c} ({d}%)',
460
- overflow: 'truncate'
461
- },
462
- labelLine: {
463
- show: true,
464
- length: 15,
465
- length2: 10,
466
- smooth: true,
467
- lineStyle: {
468
- color: this.props.textColor || '#333',
469
- width: 1
470
- }
471
- },
472
- emphasis: {
473
- itemStyle: {
474
- shadowBlur: 10,
475
- shadowOffsetX: 0,
476
- shadowColor: 'rgba(0, 0, 0, 0.5)',
477
- },
478
- label: {
479
- show: true,
480
- fontSize: 14,
481
- fontWeight: 'bold'
482
- }
483
- },
484
- },
485
- ],
486
- };
487
- }
488
-
489
- /**
490
- * 获取散点图配置
491
- * @param baseOption 基础配置选项
492
- * @param mockData 模拟数据
493
- * @param dataConfig 数据配置
494
- * @returns 散点图配置对象
495
- */
496
- getScatterChartOption(baseOption: any, mockData: any, dataConfig: any) {
497
- return {
498
- ...baseOption,
499
- xAxis: {
500
- type: 'value',
501
- scale: true,
502
- axisLine: {
503
- lineStyle: {
504
- color: this.props.textColor || '#333',
505
- },
506
- },
507
- },
508
- yAxis: {
509
- type: 'value',
510
- scale: true,
511
- axisLine: {
512
- lineStyle: {
513
- color: this.props.textColor || '#333',
514
- },
515
- },
516
- },
517
- series: [
518
- {
519
- name: '数据',
520
- type: 'scatter',
521
- data: mockData?.series?.[0]?.data || [
522
- [161.2, 51.6],
523
- [167.5, 59.0],
524
- [159.5, 49.2],
525
- [157.0, 63.0],
526
- [155.8, 53.6],
527
- [170.0, 59.0],
528
- [159.1, 47.6],
529
- [166.0, 69.8],
530
- [176.2, 66.8],
531
- [160.2, 75.2],
532
- ],
533
- symbolSize: 8,
534
- },
535
- ],
536
- };
537
- }
538
-
539
- /**
540
- * 获取雷达图配置
541
- * @param baseOption 基础配置选项
542
- * @param mockData 模拟数据
543
- * @param dataConfig 数据配置
544
- * @returns 雷达图配置对象
545
- */
546
- getRadarChartOption(baseOption: any, mockData: any, dataConfig: any) {
547
- return {
548
- ...baseOption,
549
- radar: {
550
- indicator: mockData?.indicator || [
551
- { name: '销售', max: 6500 },
552
- { name: '管理', max: 16000 },
553
- { name: '信息技术', max: 30000 },
554
- { name: '客服', max: 38000 },
555
- { name: '研发', max: 52000 },
556
- { name: '市场', max: 25000 },
557
- ],
558
- },
559
- series: [
560
- {
561
- name: '数据',
562
- type: 'radar',
563
- data: mockData?.series || [
564
- {
565
- value: [4200, 3000, 20000, 35000, 50000, 18000],
566
- name: '预算分配',
567
- },
568
- ],
569
- },
570
- ],
571
- };
572
- }
573
-
574
- /**
575
- * 获取仪表盘配置
576
- * @param baseOption 基础配置选项
577
- * @param mockData 模拟数据
578
- * @param dataConfig 数据配置
579
- * @returns 仪表盘配置对象
580
- */
581
- getGaugeChartOption(baseOption: any, mockData: any, dataConfig: any) {
582
- return {
583
- ...baseOption,
584
- series: [
585
- {
586
- name: '数据',
587
- type: 'gauge',
588
- data: mockData?.series?.[0]?.data || [{ value: 50, name: '完成率' }],
589
- detail: {
590
- formatter: '{value}%',
591
- },
592
- },
593
- ],
594
- };
595
- }
596
-
597
- /**
598
- * 获取漏斗图配置
599
- * @param baseOption 基础配置选项
600
- * @param mockData 模拟数据
601
- * @param dataConfig 数据配置
602
- * @returns 漏斗图配置对象
603
- */
604
- getFunnelChartOption(baseOption: any, mockData: any, dataConfig: any) {
605
- return {
606
- ...baseOption,
607
- series: [
608
- {
609
- name: '数据',
610
- type: 'funnel',
611
- left: '10%',
612
- top: 60,
613
- bottom: 60,
614
- width: '80%',
615
- min: 0,
616
- max: 100,
617
- minSize: '0%',
618
- maxSize: '100%',
619
- sort: 'descending',
620
- gap: 2,
621
- label: {
622
- show: true,
623
- position: 'inside',
624
- },
625
- labelLine: {
626
- length: 10,
627
- lineStyle: {
628
- width: 1,
629
- type: 'solid',
630
- },
631
- },
632
- itemStyle: {
633
- borderColor: '#fff',
634
- borderWidth: 1,
635
- },
636
- emphasis: {
637
- label: {
638
- fontSize: 20,
639
- },
640
- },
641
- data: mockData?.series?.[0]?.data || [
642
- { value: 60, name: '访问' },
643
- { value: 40, name: '咨询' },
644
- { value: 20, name: '订单' },
645
- { value: 80, name: '点击' },
646
- { value: 100, name: '展现' },
647
- ],
648
- },
649
- ],
650
- };
651
- }
652
-
653
- /**
654
- * 获取桑基图配置
655
- * @param baseOption 基础配置选项
656
- * @param mockData 模拟数据
657
- * @param dataConfig 数据配置
658
- * @returns 桑基图配置对象
659
- */
660
- getSankeyChartOption(baseOption: any, mockData: any, dataConfig: any) {
661
- return {
662
- ...baseOption,
663
- series: [
664
- {
665
- name: '数据',
666
- type: 'sankey',
667
- data: mockData?.nodes || [
668
- { name: '节点1' },
669
- { name: '节点2' },
670
- { name: '节点3' },
671
- { name: '节点4' },
672
- ],
673
- links: mockData?.links || [
674
- { source: '节点1', target: '节点2', value: 10 },
675
- { source: '节点2', target: '节点3', value: 15 },
676
- { source: '节点3', target: '节点4', value: 20 },
677
- ],
678
- emphasis: {
679
- focus: 'adjacency',
680
- },
681
- lineStyle: {
682
- color: 'gradient',
683
- curveness: 0.5,
684
- },
685
- },
686
- ],
687
- };
688
- }
689
-
690
- /**
691
- * 渲染组件
692
- * 显示用户信息(如果可用)和图表容器
693
- * @returns JSX 元素
694
- */
695
- render() {
696
- const { width, height } = this.props;
697
- const curAmisData = this.props.data || {};
698
- const userInfo = curAmisData.__NeoCurrentUser;
699
- const systemInfo = curAmisData.__NeoSystemInfo || {};
700
-
701
- return (
702
- <div className="chart-widget-container">
703
- {/* 显示当前用户信息 */}
704
- {userInfo && userInfo.name && (
705
- <div className="user-info">
706
- <span className="user-name">用户:{userInfo.name}</span>
707
- {systemInfo.tenantName && (
708
- <span className="tenant-name">租户:{systemInfo.tenantName}</span>
709
- )}
710
- </div>
711
- )}
712
- {/* 图表容器 */}
713
- <div
714
- ref={this.chartRef}
715
- className="chart-container"
716
- style={{
717
- width: width || '100%',
718
- height: height || 400,
719
- }}
720
- />
721
- </div>
722
- );
723
- }
724
- }