neo-cmp-cli 1.8.1 → 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 (201) hide show
  1. package/README.md +91 -7
  2. package/bin/neo.js +1 -1
  3. package/package.json +6 -5
  4. package/src/{module/index.js → index.js} +14 -14
  5. package/src/{module/main.js → main.js} +18 -18
  6. package/src/module/neoInitByCopy.js +6 -6
  7. package/src/neo/webpack.mf.js +1 -1
  8. package/src/oss/publish2oss.js +1 -1
  9. package/src/utils/cmpUtils/createCmpByZip.js +7 -5
  10. package/src/utils/cmpUtils/pullCmp.js +1 -1
  11. package/src/utils/cmpUtils/pushCmp.js +9 -7
  12. package/src/utils/projectUtils/updatePublishLog.js +1 -1
  13. package/test/demo.js +1 -1
  14. package/test/demo3.js +1 -1
  15. package/test/neo.config.js +77 -0
  16. package/src/template/antd-custom-cmp-template/.prettierrc.js +0 -12
  17. package/src/template/antd-custom-cmp-template/README.md +0 -153
  18. package/src/template/antd-custom-cmp-template/commitlint.config.js +0 -59
  19. package/src/template/antd-custom-cmp-template/neo.config.js +0 -144
  20. package/src/template/antd-custom-cmp-template/package.json +0 -60
  21. package/src/template/antd-custom-cmp-template/public/css/base.css +0 -283
  22. package/src/template/antd-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  23. package/src/template/antd-custom-cmp-template/public/template.html +0 -13
  24. package/src/template/antd-custom-cmp-template/src/assets/css/common.scss +0 -127
  25. package/src/template/antd-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  26. package/src/template/antd-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  27. package/src/template/antd-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  28. package/src/template/antd-custom-cmp-template/src/assets/img/favicon.png +0 -0
  29. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/README.md +0 -39
  30. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/index.tsx +0 -462
  31. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/model.ts +0 -75
  32. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/style.scss +0 -1667
  33. package/src/template/antd-custom-cmp-template/src/components/infoCard/index.tsx +0 -87
  34. package/src/template/antd-custom-cmp-template/src/components/infoCard/model.ts +0 -80
  35. package/src/template/antd-custom-cmp-template/src/components/infoCard/style.scss +0 -105
  36. package/src/template/antd-custom-cmp-template/tsconfig.json +0 -68
  37. package/src/template/develop/neo-custom-cmp-template/.prettierrc.js +0 -12
  38. package/src/template/develop/neo-custom-cmp-template/README.md +0 -48
  39. package/src/template/develop/neo-custom-cmp-template/commitlint.config.js +0 -59
  40. package/src/template/develop/neo-custom-cmp-template/docs/README.md +0 -13
  41. package/src/template/develop/neo-custom-cmp-template/neo.config.js +0 -121
  42. package/src/template/develop/neo-custom-cmp-template/package.json +0 -63
  43. package/src/template/develop/neo-custom-cmp-template/public/css/base.css +0 -283
  44. package/src/template/develop/neo-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  45. package/src/template/develop/neo-custom-cmp-template/public/template.html +0 -13
  46. package/src/template/develop/neo-custom-cmp-template/src/assets/css/common.scss +0 -127
  47. package/src/template/develop/neo-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  48. package/src/template/develop/neo-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  49. package/src/template/develop/neo-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  50. package/src/template/develop/neo-custom-cmp-template/src/assets/img/favicon.png +0 -0
  51. package/src/template/develop/neo-custom-cmp-template/src/assets/img/table.svg +0 -1
  52. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/README.md +0 -65
  53. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/index.tsx +0 -180
  54. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/model.ts +0 -50
  55. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/style.scss +0 -260
  56. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/README.md +0 -94
  57. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/index.tsx +0 -251
  58. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/model.ts +0 -56
  59. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/style.scss +0 -120
  60. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/README.md +0 -115
  61. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/index.tsx +0 -304
  62. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/model.ts +0 -87
  63. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/style.scss +0 -127
  64. package/src/template/develop/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -29
  65. package/src/template/develop/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -39
  66. package/src/template/develop/neo-custom-cmp-template/src/utils/xobjects.ts +0 -203
  67. package/src/template/develop/neo-custom-cmp-template/tsconfig.json +0 -68
  68. package/src/template/echarts-custom-cmp-template/.prettierrc.js +0 -12
  69. package/src/template/echarts-custom-cmp-template/README.md +0 -198
  70. package/src/template/echarts-custom-cmp-template/commitlint.config.js +0 -59
  71. package/src/template/echarts-custom-cmp-template/neo.config.js +0 -140
  72. package/src/template/echarts-custom-cmp-template/package.json +0 -61
  73. package/src/template/echarts-custom-cmp-template/public/css/base.css +0 -283
  74. package/src/template/echarts-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  75. package/src/template/echarts-custom-cmp-template/public/template.html +0 -13
  76. package/src/template/echarts-custom-cmp-template/src/assets/css/common.scss +0 -127
  77. package/src/template/echarts-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  78. package/src/template/echarts-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  79. package/src/template/echarts-custom-cmp-template/src/assets/img/chart.svg +0 -1
  80. package/src/template/echarts-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  81. package/src/template/echarts-custom-cmp-template/src/assets/img/favicon.png +0 -0
  82. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/README.md +0 -186
  83. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/index.tsx +0 -724
  84. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/model.ts +0 -151
  85. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/style.scss +0 -209
  86. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/README.md +0 -125
  87. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/USAGE.md +0 -190
  88. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/index.tsx +0 -385
  89. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/model.ts +0 -107
  90. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/style.scss +0 -192
  91. package/src/template/echarts-custom-cmp-template/src/utils/url.ts +0 -82
  92. package/src/template/echarts-custom-cmp-template/tsconfig.json +0 -68
  93. package/src/template/empty-cmp/index.tsx +0 -58
  94. package/src/template/empty-cmp/model.ts +0 -79
  95. package/src/template/empty-cmp/style.scss +0 -72
  96. package/src/template/empty-custom-cmp-template/.prettierrc.js +0 -12
  97. package/src/template/empty-custom-cmp-template/README.md +0 -154
  98. package/src/template/empty-custom-cmp-template/commitlint.config.js +0 -59
  99. package/src/template/empty-custom-cmp-template/neo.config.js +0 -138
  100. package/src/template/empty-custom-cmp-template/package.json +0 -58
  101. package/src/template/empty-custom-cmp-template/public/css/base.css +0 -283
  102. package/src/template/empty-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  103. package/src/template/empty-custom-cmp-template/public/template.html +0 -13
  104. package/src/template/empty-custom-cmp-template/src/assets/css/common.scss +0 -127
  105. package/src/template/empty-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  106. package/src/template/empty-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  107. package/src/template/empty-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  108. package/src/template/empty-custom-cmp-template/src/assets/img/favicon.png +0 -0
  109. package/src/template/empty-custom-cmp-template/src/assets/img/map.svg +0 -1
  110. package/src/template/empty-custom-cmp-template/src/components/README.md +0 -3
  111. package/src/template/empty-custom-cmp-template/tsconfig.json +0 -68
  112. package/src/template/neo-custom-cmp-template/.prettierrc.js +0 -12
  113. package/src/template/neo-custom-cmp-template/README.md +0 -155
  114. package/src/template/neo-custom-cmp-template/commitlint.config.js +0 -59
  115. package/src/template/neo-custom-cmp-template/docs/README.md +0 -244
  116. package/src/template/neo-custom-cmp-template/neo.config.js +0 -140
  117. package/src/template/neo-custom-cmp-template/package.json +0 -66
  118. package/src/template/neo-custom-cmp-template/public/css/base.css +0 -283
  119. package/src/template/neo-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  120. package/src/template/neo-custom-cmp-template/public/template.html +0 -13
  121. package/src/template/neo-custom-cmp-template/src/assets/css/common.scss +0 -127
  122. package/src/template/neo-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  123. package/src/template/neo-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  124. package/src/template/neo-custom-cmp-template/src/assets/img/card-list.svg +0 -1
  125. package/src/template/neo-custom-cmp-template/src/assets/img/contact-form.svg +0 -1
  126. package/src/template/neo-custom-cmp-template/src/assets/img/custom-form.svg +0 -1
  127. package/src/template/neo-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  128. package/src/template/neo-custom-cmp-template/src/assets/img/data-list.svg +0 -1
  129. package/src/template/neo-custom-cmp-template/src/assets/img/detail.svg +0 -1
  130. package/src/template/neo-custom-cmp-template/src/assets/img/table.svg +0 -1
  131. package/src/template/neo-custom-cmp-template/src/components/entityCardList/README.md +0 -61
  132. package/src/template/neo-custom-cmp-template/src/components/entityCardList/index.tsx +0 -202
  133. package/src/template/neo-custom-cmp-template/src/components/entityCardList/model.ts +0 -74
  134. package/src/template/neo-custom-cmp-template/src/components/entityCardList/style.scss +0 -260
  135. package/src/template/neo-custom-cmp-template/src/components/entityDetail/README.md +0 -176
  136. package/src/template/neo-custom-cmp-template/src/components/entityDetail/index.tsx +0 -334
  137. package/src/template/neo-custom-cmp-template/src/components/entityDetail/model.ts +0 -123
  138. package/src/template/neo-custom-cmp-template/src/components/entityDetail/style.scss +0 -292
  139. package/src/template/neo-custom-cmp-template/src/components/entityForm/README.md +0 -176
  140. package/src/template/neo-custom-cmp-template/src/components/entityForm/index.tsx +0 -615
  141. package/src/template/neo-custom-cmp-template/src/components/entityForm/model.ts +0 -107
  142. package/src/template/neo-custom-cmp-template/src/components/entityForm/style.scss +0 -370
  143. package/src/template/neo-custom-cmp-template/src/components/entityTable/README.md +0 -92
  144. package/src/template/neo-custom-cmp-template/src/components/entityTable/index.tsx +0 -784
  145. package/src/template/neo-custom-cmp-template/src/components/entityTable/model.ts +0 -134
  146. package/src/template/neo-custom-cmp-template/src/components/entityTable/style.scss +0 -304
  147. package/src/template/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -37
  148. package/src/template/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -76
  149. package/src/template/neo-custom-cmp-template/src/utils/xobjects.ts +0 -162
  150. package/src/template/neo-custom-cmp-template/tsconfig.json +0 -49
  151. package/src/template/react-custom-cmp-template/.prettierrc.js +0 -12
  152. package/src/template/react-custom-cmp-template/README.md +0 -154
  153. package/src/template/react-custom-cmp-template/commitlint.config.js +0 -59
  154. package/src/template/react-custom-cmp-template/neo.config.js +0 -137
  155. package/src/template/react-custom-cmp-template/package.json +0 -57
  156. package/src/template/react-custom-cmp-template/public/css/base.css +0 -283
  157. package/src/template/react-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  158. package/src/template/react-custom-cmp-template/public/template.html +0 -13
  159. package/src/template/react-custom-cmp-template/src/assets/css/common.scss +0 -127
  160. package/src/template/react-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  161. package/src/template/react-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  162. package/src/template/react-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  163. package/src/template/react-custom-cmp-template/src/assets/img/favicon.png +0 -0
  164. package/src/template/react-custom-cmp-template/src/components/infoCard/index.jsx +0 -45
  165. package/src/template/react-custom-cmp-template/src/components/infoCard/model.js +0 -81
  166. package/src/template/react-custom-cmp-template/src/components/infoCard/style.scss +0 -67
  167. package/src/template/react-ts-custom-cmp-template/.prettierrc.js +0 -12
  168. package/src/template/react-ts-custom-cmp-template/README.md +0 -154
  169. package/src/template/react-ts-custom-cmp-template/commitlint.config.js +0 -59
  170. package/src/template/react-ts-custom-cmp-template/neo.config.js +0 -138
  171. package/src/template/react-ts-custom-cmp-template/package.json +0 -59
  172. package/src/template/react-ts-custom-cmp-template/public/css/base.css +0 -283
  173. package/src/template/react-ts-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  174. package/src/template/react-ts-custom-cmp-template/public/template.html +0 -13
  175. package/src/template/react-ts-custom-cmp-template/src/assets/css/common.scss +0 -127
  176. package/src/template/react-ts-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  177. package/src/template/react-ts-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  178. package/src/template/react-ts-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  179. package/src/template/react-ts-custom-cmp-template/src/assets/img/favicon.png +0 -0
  180. package/src/template/react-ts-custom-cmp-template/src/assets/img/map.svg +0 -1
  181. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/README.md +0 -2
  182. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/index.tsx +0 -208
  183. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/model.ts +0 -92
  184. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/style.scss +0 -350
  185. package/src/template/react-ts-custom-cmp-template/tsconfig.json +0 -68
  186. package/src/template/vue2-custom-cmp-template/.prettierrc.js +0 -12
  187. package/src/template/vue2-custom-cmp-template/README.md +0 -154
  188. package/src/template/vue2-custom-cmp-template/commitlint.config.js +0 -59
  189. package/src/template/vue2-custom-cmp-template/neo.config.js +0 -146
  190. package/src/template/vue2-custom-cmp-template/package.json +0 -59
  191. package/src/template/vue2-custom-cmp-template/public/css/base.css +0 -283
  192. package/src/template/vue2-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  193. package/src/template/vue2-custom-cmp-template/public/template.html +0 -13
  194. package/src/template/vue2-custom-cmp-template/src/assets/css/common.scss +0 -126
  195. package/src/template/vue2-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  196. package/src/template/vue2-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  197. package/src/template/vue2-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  198. package/src/template/vue2-custom-cmp-template/src/assets/img/favicon.png +0 -0
  199. package/src/template/vue2-custom-cmp-template/src/components/vueInfoCard/index.vue +0 -131
  200. package/src/template/vue2-custom-cmp-template/src/components/vueInfoCard/model.js +0 -81
  201. 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
- }