neo-cmp-cli 1.13.16 → 1.13.18

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 (182) hide show
  1. package/README.md +2 -1
  2. package/dist/index2.js +1 -1
  3. package/dist/main2.js +1 -1
  4. package/dist/neo/env.js +1 -1
  5. package/dist/neo/neoLogin.js +1 -1
  6. package/dist/neo/pushCmp.js +1 -1
  7. package/dist/package.json.js +1 -1
  8. package/package.json +3 -2
  9. package/template/antd-custom-cmp-template/package.json +1 -1
  10. package/template/asset-manage-template/docs/README.md +1 -232
  11. package/template/asset-manage-template/package.json +2 -2
  12. package/template/echarts-custom-cmp-template/package.json +1 -1
  13. package/template/empty-custom-cmp-template/package.json +2 -2
  14. package/template/map-custom-cmp-template/package.json +1 -1
  15. package/template/neo-bi-cmps/neo.config.js +7 -1
  16. package/template/neo-bi-cmps/package.json +8 -7
  17. package/template/neo-bi-cmps/public/403.html +77 -0
  18. package/template/neo-bi-cmps/public/demo.html +2453 -0
  19. package/template/neo-bi-cmps/src/assets/icon/barChart.svg +1 -0
  20. package/template/neo-bi-cmps/src/assets/icon/card.svg +1 -0
  21. package/template/neo-bi-cmps/src/assets/icon/filter.svg +1 -0
  22. package/template/neo-bi-cmps/src/assets/icon/funnel.svg +1 -0
  23. package/template/neo-bi-cmps/src/assets/icon/tab.svg +1 -0
  24. package/template/neo-bi-cmps/src/components/filterBar__c/README.md +3 -14
  25. package/template/neo-bi-cmps/src/components/filterBar__c/common.scss +29 -0
  26. package/template/neo-bi-cmps/src/components/filterBar__c/index.tsx +668 -146
  27. package/template/neo-bi-cmps/src/components/filterBar__c/model.ts +26 -48
  28. package/template/neo-bi-cmps/src/components/filterBar__c/style.scss +46 -139
  29. package/template/neo-bi-cmps/src/components/targetNumber__c/customStyleConfig/index.tsx +11 -10
  30. package/template/neo-bi-cmps/src/components/targetNumber__c/index.tsx +9 -16
  31. package/template/neo-bi-cmps/src/components/targetNumber__c/model.ts +1 -1
  32. package/template/neo-bi-cmps/src/utils/common.ts +231 -0
  33. package/template/neo-bi-cmps/src/utils/filter2chartFilter.ts +268 -0
  34. package/template/neo-bi-cmps/src/utils/filterBar.ts +140 -0
  35. package/template/neo-bi-cmps/src/utils/pipelineFunnel.ts +341 -0
  36. package/template/{neo-h5-cmps/src/utils/queryObjectData.ts → neo-bi-cmps/src/utils/queryByCustomSQL.ts} +18 -13
  37. package/template/neo-bi-cmps/src/utils/requestDebounce.ts +22 -0
  38. package/template/neo-bi-cmps/src/utils/simpleTable.tsx +344 -0
  39. package/template/neo-bi-cmps/src/utils/stageSwitch.ts +15 -0
  40. package/template/neo-bi-cmps/src/utils/stageTimeChart.ts +90 -0
  41. package/template/neo-bi-cmps/src/utils/targetNumber.ts +12 -0
  42. package/template/neo-custom-cmp-template/docs/README.md +0 -231
  43. package/template/neo-custom-cmp-template/package.json +2 -2
  44. package/template/neo-h5-cmps/package.json +2 -2
  45. package/template/neo-h5-cmps/src/components/entityList__c/index.tsx +1 -2
  46. package/template/neo-h5-cmps/src/components/entityTabs__c/index.tsx +1 -1
  47. package/template/neo-h5-cmps/src/components/globalSearchInput__c/index.tsx +1 -1
  48. package/template/neo-h5-cmps/src/components/openChatPageBtn__c/index.tsx +1 -2
  49. package/template/neo-order-cmps/package.json +2 -2
  50. package/template/neo-pipeline-cmps/.prettierrc.js +12 -0
  51. package/template/neo-pipeline-cmps/@types/neo-ui-common.d.ts +36 -0
  52. package/template/neo-pipeline-cmps/README.md +99 -0
  53. package/template/neo-pipeline-cmps/commitlint.config.js +59 -0
  54. package/template/neo-pipeline-cmps/neo.config.js +135 -0
  55. package/template/neo-pipeline-cmps/package.json +66 -0
  56. package/template/neo-pipeline-cmps/public/403.html +77 -0
  57. package/template/neo-pipeline-cmps/public/css/base.css +283 -0
  58. package/template/neo-pipeline-cmps/public/demo.html +2453 -0
  59. package/template/neo-pipeline-cmps/public/scripts/app/bluebird.js +6679 -0
  60. package/template/neo-pipeline-cmps/public/template.html +13 -0
  61. package/template/neo-pipeline-cmps/src/assets/css/common.scss +127 -0
  62. package/template/neo-pipeline-cmps/src/assets/css/mixin.scss +47 -0
  63. package/template/neo-pipeline-cmps/src/assets/icon/barChart.svg +1 -0
  64. package/template/neo-pipeline-cmps/src/assets/icon/card.svg +1 -0
  65. package/template/neo-pipeline-cmps/src/assets/icon/filter.svg +1 -0
  66. package/template/neo-pipeline-cmps/src/assets/icon/funnel.svg +1 -0
  67. package/template/neo-pipeline-cmps/src/assets/icon/tab.svg +1 -0
  68. package/template/neo-pipeline-cmps/src/assets/img/AIBtn.gif +0 -0
  69. package/template/neo-pipeline-cmps/src/assets/img/NeoCRM.jpg +0 -0
  70. package/template/neo-pipeline-cmps/src/assets/img/aiLogo.png +0 -0
  71. package/template/neo-pipeline-cmps/src/assets/img/card-list.svg +1 -0
  72. package/template/neo-pipeline-cmps/src/assets/img/contact-form.svg +1 -0
  73. package/template/neo-pipeline-cmps/src/assets/img/custom-form.svg +1 -0
  74. package/template/neo-pipeline-cmps/src/assets/img/custom-widget.svg +1 -0
  75. package/template/neo-pipeline-cmps/src/assets/img/data-list.svg +1 -0
  76. package/template/neo-pipeline-cmps/src/assets/img/detail.svg +1 -0
  77. package/template/neo-pipeline-cmps/src/assets/img/favicon.png +0 -0
  78. package/template/neo-pipeline-cmps/src/assets/img/map.svg +1 -0
  79. package/template/neo-pipeline-cmps/src/assets/img/search.svg +1 -0
  80. package/template/neo-pipeline-cmps/src/assets/img/table.svg +1 -0
  81. package/template/neo-pipeline-cmps/src/components/filterBar__c/README.md +24 -0
  82. package/template/neo-pipeline-cmps/src/components/filterBar__c/common.scss +29 -0
  83. package/template/neo-pipeline-cmps/src/components/filterBar__c/index.tsx +731 -0
  84. package/template/neo-pipeline-cmps/src/components/filterBar__c/model.ts +52 -0
  85. package/template/neo-pipeline-cmps/src/components/filterBar__c/style.scss +119 -0
  86. package/template/neo-pipeline-cmps/src/components/pipelineFunnel__c/README.md +39 -0
  87. package/template/neo-pipeline-cmps/src/components/pipelineFunnel__c/index.tsx +416 -0
  88. package/template/neo-pipeline-cmps/src/components/pipelineFunnel__c/model.ts +80 -0
  89. package/template/neo-pipeline-cmps/src/components/pipelineFunnel__c/style.scss +83 -0
  90. package/template/neo-pipeline-cmps/src/components/showHealthResult__c/index.tsx +470 -0
  91. package/template/neo-pipeline-cmps/src/components/showHealthResult__c/model.ts +45 -0
  92. package/template/neo-pipeline-cmps/src/components/showHealthResult__c/style.scss +137 -0
  93. package/template/neo-pipeline-cmps/src/components/simpleTable__c/README.md +89 -0
  94. package/template/neo-pipeline-cmps/src/components/simpleTable__c/common.scss +195 -0
  95. package/template/neo-pipeline-cmps/src/components/simpleTable__c/index.tsx +667 -0
  96. package/template/neo-pipeline-cmps/src/components/simpleTable__c/model.ts +124 -0
  97. package/template/neo-pipeline-cmps/src/components/simpleTable__c/style.scss +192 -0
  98. package/template/neo-pipeline-cmps/src/components/stageSwitch__c/README.md +36 -0
  99. package/template/neo-pipeline-cmps/src/components/stageSwitch__c/index.tsx +513 -0
  100. package/template/neo-pipeline-cmps/src/components/stageSwitch__c/model.ts +71 -0
  101. package/template/{neo-bi-cmps → neo-pipeline-cmps}/src/components/stageSwitch__c/style.scss +4 -2
  102. package/template/neo-pipeline-cmps/src/components/stageTimeChart__c/README.md +37 -0
  103. package/template/neo-pipeline-cmps/src/components/stageTimeChart__c/index.tsx +455 -0
  104. package/template/neo-pipeline-cmps/src/components/stageTimeChart__c/model.ts +106 -0
  105. package/template/{neo-bi-cmps → neo-pipeline-cmps}/src/components/stageTimeChart__c/style.scss +3 -2
  106. package/template/neo-pipeline-cmps/src/utils/common.ts +229 -0
  107. package/template/neo-pipeline-cmps/src/utils/filter2chartFilter.ts +266 -0
  108. package/template/neo-pipeline-cmps/src/utils/filterBar.ts +140 -0
  109. package/template/neo-pipeline-cmps/src/utils/pipelineFunnel.ts +343 -0
  110. package/template/neo-pipeline-cmps/src/utils/queryByCustomSQL.ts +121 -0
  111. package/template/neo-pipeline-cmps/src/utils/requestDebounce.ts +22 -0
  112. package/template/neo-pipeline-cmps/src/utils/simpleTable.tsx +349 -0
  113. package/template/neo-pipeline-cmps/src/utils/stageSwitch.ts +15 -0
  114. package/template/neo-pipeline-cmps/src/utils/stageTimeChart.ts +90 -0
  115. package/template/neo-pipeline-cmps/src/utils/targetNumber.ts +12 -0
  116. package/template/neo-pipeline-cmps/tsconfig.json +40 -0
  117. package/template/neo-web-entity-grid/package.json +2 -2
  118. package/template/neo-web-form/package.json +2 -2
  119. package/template/neo-web-form/src/components/batchAddTable__c/index.tsx +161 -41
  120. package/template/neo-web-form/src/components/batchAddTable__c/model.ts +4 -2
  121. package/template/react-custom-cmp-template/package.json +1 -1
  122. package/template/react-ts-custom-cmp-template/package.json +1 -1
  123. package/template/vue2-custom-cmp-template/package.json +1 -1
  124. package/template/asset-manage-template/src/utils/axiosFetcher.ts +0 -37
  125. package/template/asset-manage-template/src/utils/queryObjectData.ts +0 -112
  126. package/template/asset-manage-template/src/utils/xobjects.ts +0 -162
  127. package/template/neo-bi-cmps/.npmrc copy +0 -1
  128. package/template/neo-bi-cmps/src/components/aiCommitDrawer__c/README.md +0 -52
  129. package/template/neo-bi-cmps/src/components/aiCommitDrawer__c/index.tsx +0 -183
  130. package/template/neo-bi-cmps/src/components/aiCommitDrawer__c/model.ts +0 -90
  131. package/template/neo-bi-cmps/src/components/aiCommitDrawer__c/style.scss +0 -218
  132. package/template/neo-bi-cmps/src/components/forecastChart__c/README.md +0 -31
  133. package/template/neo-bi-cmps/src/components/forecastChart__c/index.tsx +0 -158
  134. package/template/neo-bi-cmps/src/components/forecastChart__c/model.ts +0 -40
  135. package/template/neo-bi-cmps/src/components/forecastChart__c/style.scss +0 -154
  136. package/template/neo-bi-cmps/src/components/forecastGrid__c/README.md +0 -36
  137. package/template/neo-bi-cmps/src/components/forecastGrid__c/index.tsx +0 -86
  138. package/template/neo-bi-cmps/src/components/forecastGrid__c/model.ts +0 -62
  139. package/template/neo-bi-cmps/src/components/forecastGrid__c/style.scss +0 -48
  140. package/template/neo-bi-cmps/src/components/gapCloser__c/README.md +0 -24
  141. package/template/neo-bi-cmps/src/components/gapCloser__c/index.tsx +0 -100
  142. package/template/neo-bi-cmps/src/components/gapCloser__c/model.ts +0 -46
  143. package/template/neo-bi-cmps/src/components/gapCloser__c/style.scss +0 -60
  144. package/template/neo-bi-cmps/src/components/kpiCards__c/README.md +0 -35
  145. package/template/neo-bi-cmps/src/components/kpiCards__c/index.tsx +0 -70
  146. package/template/neo-bi-cmps/src/components/kpiCards__c/model.ts +0 -50
  147. package/template/neo-bi-cmps/src/components/kpiCards__c/style.scss +0 -33
  148. package/template/neo-bi-cmps/src/components/oppList__c/README.md +0 -52
  149. package/template/neo-bi-cmps/src/components/oppList__c/index.tsx +0 -285
  150. package/template/neo-bi-cmps/src/components/oppList__c/model.ts +0 -86
  151. package/template/neo-bi-cmps/src/components/oppList__c/style.scss +0 -133
  152. package/template/neo-bi-cmps/src/components/pipelineFunnel__c/README.md +0 -39
  153. package/template/neo-bi-cmps/src/components/pipelineFunnel__c/index.tsx +0 -130
  154. package/template/neo-bi-cmps/src/components/pipelineFunnel__c/model.ts +0 -66
  155. package/template/neo-bi-cmps/src/components/pipelineFunnel__c/style.scss +0 -133
  156. package/template/neo-bi-cmps/src/components/stageSwitch__c/README.md +0 -36
  157. package/template/neo-bi-cmps/src/components/stageSwitch__c/index.tsx +0 -118
  158. package/template/neo-bi-cmps/src/components/stageSwitch__c/model.ts +0 -92
  159. package/template/neo-bi-cmps/src/components/stageTimeChart__c/README.md +0 -37
  160. package/template/neo-bi-cmps/src/components/stageTimeChart__c/index.tsx +0 -126
  161. package/template/neo-bi-cmps/src/components/stageTimeChart__c/model.ts +0 -57
  162. package/template/neo-bi-cmps/src/components/tabSwitch__c/README.md +0 -37
  163. package/template/neo-bi-cmps/src/components/tabSwitch__c/index.tsx +0 -80
  164. package/template/neo-bi-cmps/src/components/tabSwitch__c/model.ts +0 -45
  165. package/template/neo-bi-cmps/src/components/tabSwitch__c/style.scss +0 -37
  166. package/template/neo-bi-cmps/src/utils/axiosFetcher.ts +0 -37
  167. package/template/neo-bi-cmps/src/utils/queryObjectData.ts +0 -76
  168. package/template/neo-bi-cmps/src/utils/xobjects.ts +0 -162
  169. package/template/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -37
  170. package/template/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -112
  171. package/template/neo-custom-cmp-template/src/utils/xobjects.ts +0 -162
  172. package/template/neo-h5-cmps/src/utils/axiosFetcher.ts +0 -37
  173. package/template/neo-h5-cmps/src/utils/xobjects.ts +0 -167
  174. package/template/neo-order-cmps/src/utils/axiosFetcher.ts +0 -37
  175. package/template/neo-order-cmps/src/utils/queryObjectData.ts +0 -112
  176. package/template/neo-order-cmps/src/utils/xobjects.ts +0 -162
  177. package/template/neo-web-entity-grid/src/utils/axiosFetcher.ts +0 -37
  178. package/template/neo-web-entity-grid/src/utils/queryObjectData.ts +0 -112
  179. package/template/neo-web-entity-grid/src/utils/xobjects.ts +0 -167
  180. package/template/neo-web-form/src/utils/axiosFetcher.ts +0 -37
  181. package/template/neo-web-form/src/utils/queryObjectData.ts +0 -112
  182. package/template/neo-web-form/src/utils/xobjects.ts +0 -167
@@ -1,158 +0,0 @@
1
- /**
2
- * @file 预测看板图表组件
3
- * @description 展示预测数据的堆叠柱状图,包含Closed、Commit、Best Case、Pipeline等
4
- */
5
- import * as React from 'react';
6
- // @ts-ignore
7
- import { BaseCmp, StatusHoc, NeoEvent } from 'neo-ui-common';
8
-
9
- import './style.scss';
10
-
11
- interface ChartColumn {
12
- label: string;
13
- value: string;
14
- height: number;
15
- color: string;
16
- }
17
-
18
- interface ForecastChartProps {
19
- title?: string;
20
- quotaValue?: string;
21
- forecastValue?: string;
22
- aiValue?: string;
23
- columns?: ChartColumn[];
24
- showAiButton?: boolean;
25
- className?: string;
26
- style?: React.CSSProperties;
27
- }
28
-
29
- interface ForecastChartState {
30
- loading: boolean;
31
- }
32
-
33
- class ForecastChart extends BaseCmp<ForecastChartProps, ForecastChartState> {
34
- constructor(props: ForecastChartProps) {
35
- super(props);
36
- this.state = {
37
- loading: false,
38
- };
39
- }
40
-
41
- componentDidMount() {
42
- console.log('ForecastChart 组件挂载');
43
- }
44
-
45
- getScaleHeight = (value: string, max: string): number => {
46
- const numValue = parseFloat(value.replace(/[$,M]/g, ''));
47
- const numMax = parseFloat(max.replace(/[$,M]/g, ''));
48
- if (isNaN(numValue) || isNaN(numMax) || numMax === 0) return 0;
49
- return (numValue / numMax) * 100;
50
- };
51
-
52
- render() {
53
- const {
54
- title = 'Forecast Overview',
55
- quotaValue = '$10M',
56
- forecastValue = '$7.5M',
57
- aiValue = '$6.8M',
58
- columns = [],
59
- showAiButton = true,
60
- className,
61
- style,
62
- } = this.props;
63
-
64
- const maxValue = 10; // 默认最大值 $10M
65
- const chartHeight = 190; // 总高度
66
- const gridLineHeight = chartHeight * 0.8; // 网格区域高度
67
-
68
- // 计算Quota、Forecast、AI基准线位置
69
- const quotaPos = 0; // 顶部
70
- const forecastPos = this.getScaleHeight(forecastValue, quotaValue);
71
- const aiPos = this.getScaleHeight(aiValue, quotaValue);
72
-
73
- return (
74
- <div className={`forecast-chart__c ${className || ''}`} style={style}>
75
- <div className="chart-header">
76
- <h3 className="chart-title">{title}</h3>
77
- {showAiButton && (
78
- <span
79
- className="ai-btn"
80
- onClick={() => console.log('AI Analysis clicked')}
81
- title="AI Analysis"
82
- >
83
-
84
- </span>
85
- )}
86
- </div>
87
-
88
- <div className="chart-content">
89
- <div className="chart-y-axis">
90
- <span>$10M</span>
91
- <span>$8M</span>
92
- <span>$6M</span>
93
- <span>$4M</span>
94
- <span>$2M</span>
95
- <span>$0</span>
96
- </div>
97
-
98
- <div className="chart-main">
99
- {/* 网格线 */}
100
- <div className="chart-grid">
101
- <div style={{ top: '0%' }} />
102
- <div style={{ top: '20%' }} />
103
- <div style={{ top: '40%' }} />
104
- <div style={{ top: '60%' }} />
105
- <div style={{ top: '80%' }} />
106
- <div style={{ top: '100%' }} />
107
- </div>
108
-
109
- {/* Quota基准线 */}
110
- <div className="chart-quota-line" style={{ top: `${quotaPos}%` }}>
111
- <span className="quota-label">Quota: {quotaValue}</span>
112
- </div>
113
-
114
- {/* Forecast基准线 */}
115
- <div
116
- className="chart-forecast-line"
117
- style={{ top: `${forecastPos}%` }}
118
- >
119
- <span className="forecast-label">Forecast {forecastValue}</span>
120
- </div>
121
-
122
- {/* AI基准线 */}
123
- <div className="chart-ai-line" style={{ top: `${aiPos}%` }}>
124
- <span className="ai-label">✨ AI {aiValue}</span>
125
- </div>
126
-
127
- {/* 柱状图 */}
128
- <div className="chart-bars">
129
- {columns.map((col, index) => {
130
- const heightPercent = this.getScaleHeight(
131
- col.value,
132
- quotaValue,
133
- );
134
- return (
135
- <div key={index} className="chart-bar">
136
- <span className="bar-value" style={{ color: col.color }}>
137
- {col.value}
138
- </span>
139
- <div
140
- className="bar-column"
141
- style={{
142
- height: `${(heightPercent / 100) * gridLineHeight}px`,
143
- backgroundColor: col.color,
144
- }}
145
- />
146
- <span className="bar-label">{col.label}</span>
147
- </div>
148
- );
149
- })}
150
- </div>
151
- </div>
152
- </div>
153
- </div>
154
- );
155
- }
156
- }
157
-
158
- export default StatusHoc(ForecastChart);
@@ -1,40 +0,0 @@
1
- export class ForecastChartModel {
2
- label: string = '预测看板图表';
3
- description: string =
4
- '展示预测数据的堆叠柱状图,包含Closed、Commit、Best Case、Pipeline等';
5
- iconUrl: string = 'https://custom-widgets.bj.bcebos.com/forecastChart.svg';
6
- targetPage: string[] = ['all'];
7
- targetDevice: string = 'all';
8
-
9
- defaultComProps = {
10
- title: 'Forecast Overview',
11
- quotaValue: '$10M',
12
- forecastValue: '$7.5M',
13
- aiValue: '$6.8M',
14
- columns: [
15
- { label: 'Closed', value: '$3.2M', height: 61, color: '#3b82f6' },
16
- { label: 'Commit', value: '$2.5M', height: 47, color: '#22c55e' },
17
- { label: 'Best Case', value: '$1.8M', height: 34, color: '#10b981' },
18
- { label: 'Pipeline', value: '$2.5M', height: 47, color: '#93c5fd' },
19
- ],
20
- showAiButton: true,
21
- };
22
-
23
- functions = [
24
- {
25
- apiKey: 'refreshData',
26
- label: '刷新数据',
27
- helpTextKey: '刷新预测图表数据',
28
- },
29
- ];
30
-
31
- propsSchema = [
32
- {
33
- type: 'string',
34
- name: 'title',
35
- label: '标题',
36
- },
37
- ];
38
- }
39
-
40
- export default ForecastChartModel;
@@ -1,154 +0,0 @@
1
- .forecast-chart__c {
2
- background: #fff;
3
- border-radius: 8px;
4
- padding: 20px;
5
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
6
-
7
- .chart-header {
8
- display: flex;
9
- justify-content: space-between;
10
- align-items: center;
11
- margin-bottom: 16px;
12
- }
13
-
14
- .chart-title {
15
- font-size: 14px;
16
- font-weight: 600;
17
- margin: 0;
18
- }
19
-
20
- .ai-btn {
21
- cursor: pointer;
22
- font-size: 16px;
23
- transition: transform 0.2s;
24
-
25
- &:hover {
26
- transform: scale(1.1);
27
- }
28
- }
29
-
30
- .chart-content {
31
- display: flex;
32
- gap: 16px;
33
- flex: 1;
34
- align-items: flex-end;
35
- height: 220px;
36
- }
37
-
38
- .chart-y-axis {
39
- width: 50px;
40
- display: flex;
41
- flex-direction: column;
42
- justify-content: space-between;
43
- align-items: flex-end;
44
- padding-right: 8px;
45
- font-size: 11px;
46
- color: #999;
47
- }
48
-
49
- .chart-main {
50
- flex: 1;
51
- position: relative;
52
- padding: 16px 16px 40px 0;
53
- }
54
-
55
- .chart-grid {
56
- position: absolute;
57
- left: 0;
58
- right: 0;
59
- top: 20px;
60
- bottom: 50px;
61
-
62
- div {
63
- position: absolute;
64
- width: 100%;
65
- border-top: 1px solid #eee;
66
- }
67
- }
68
-
69
- .chart-quota-line {
70
- position: absolute;
71
- left: 0;
72
- right: 0;
73
- border-top: 2.5px solid #22c55e;
74
- z-index: 5;
75
-
76
- .quota-label {
77
- position: absolute;
78
- top: -18px;
79
- left: 0;
80
- font-size: 11px;
81
- background: #22c55e;
82
- color: #fff;
83
- padding: 1px 8px;
84
- border-radius: 3px;
85
- }
86
- }
87
-
88
- .chart-forecast-line {
89
- position: absolute;
90
- left: 0;
91
- right: 0;
92
- border-top: 2px solid #8b5cf6;
93
- z-index: 5;
94
-
95
- .forecast-label {
96
- position: absolute;
97
- top: -16px;
98
- right: 0;
99
- font-size: 10px;
100
- color: #8b5cf6;
101
- }
102
- }
103
-
104
- .chart-ai-line {
105
- position: absolute;
106
- left: 0;
107
- right: 0;
108
- border-top: 2px dashed #a78bfa;
109
- z-index: 5;
110
-
111
- .ai-label {
112
- position: absolute;
113
- top: -16px;
114
- right: 80px;
115
- font-size: 10px;
116
- color: #a78bfa;
117
- }
118
- }
119
-
120
- .chart-bars {
121
- position: absolute;
122
- left: 0;
123
- right: 0;
124
- top: 20px;
125
- bottom: 50px;
126
- display: flex;
127
- align-items: flex-end;
128
- gap: 0;
129
- }
130
-
131
- .chart-bar {
132
- flex: 0 0 60px;
133
- display: flex;
134
- flex-direction: column;
135
- align-items: center;
136
- }
137
-
138
- .bar-value {
139
- font-size: 11px;
140
- font-weight: 600;
141
- margin-bottom: 4px;
142
- }
143
-
144
- .bar-column {
145
- width: 50px;
146
- border-radius: 4px 4px 0 0;
147
- }
148
-
149
- .bar-label {
150
- font-size: 10px;
151
- color: #666;
152
- margin-top: 6px;
153
- }
154
- }
@@ -1,36 +0,0 @@
1
- # ForecastGrid 组件
2
-
3
- 预测矩阵表格组件,展示预测矩阵数据。
4
-
5
- ## 使用方式
6
-
7
- ```tsx
8
- import ForecastGrid from './components/forecastGrid__c';
9
-
10
- <ForecastGrid
11
- title="Forecast Grid"
12
- rows={[
13
- { name: 'Alice', quota: '$3,000,000', aiForecast: '$2,400,000', closed: '$1,200,000', commit: '$1,800,000', bestCase: '$2,500,000', pipeline: '$8,400,000', coverage: '2.8x' },
14
- ]}
15
- />
16
- ```
17
-
18
- ## Props
19
-
20
- | 属性 | 说明 | 类型 | 默认值 |
21
- |------|------|------|--------|
22
- | title | 标题 | string | 'Forecast Grid' |
23
- | rows | 表格数据 | ForecastRow[] | [] |
24
-
25
- ## ForecastRow
26
-
27
- | 属性 | 说明 | 类型 |
28
- |------|------|------|
29
- | name | 名称 | string |
30
- | quota | Quota | string |
31
- | aiForecast | AI预测 | string |
32
- | closed | 已关闭 | string |
33
- | commit | 提交 | string |
34
- | bestCase | 最佳情况 | string |
35
- | pipeline | 管道 | string |
36
- | coverage | 覆盖率 | string |
@@ -1,86 +0,0 @@
1
- /**
2
- * @file 预测矩阵表格组件
3
- * @description 展示预测矩阵数据,包含Quota、AI Forecast、Closed、Commit、Best Case、Pipeline等
4
- */
5
- import * as React from 'react';
6
- // @ts-ignore
7
- import { BaseCmp, StatusHoc, NeoEvent } from 'neo-ui-common';
8
-
9
- import './style.scss';
10
-
11
- interface ForecastRow {
12
- name: string;
13
- quota: string;
14
- aiForecast: string;
15
- closed: string;
16
- commit: string;
17
- bestCase: string;
18
- pipeline: string;
19
- coverage: string;
20
- }
21
-
22
- interface ForecastGridProps {
23
- title?: string;
24
- rows?: ForecastRow[];
25
- className?: string;
26
- style?: React.CSSProperties;
27
- }
28
-
29
- interface ForecastGridState {
30
- loading: boolean;
31
- }
32
-
33
- class ForecastGrid extends BaseCmp<ForecastGridProps, ForecastGridState> {
34
- constructor(props: ForecastGridProps) {
35
- super(props);
36
- this.state = {
37
- loading: false,
38
- };
39
- }
40
-
41
- componentDidMount() {
42
- console.log('ForecastGrid 组件挂载');
43
- }
44
-
45
- render() {
46
- const { title = 'Forecast Grid', rows = [], className, style } = this.props;
47
-
48
- return (
49
- <div className={`forecast-grid__c ${className || ''}`} style={style}>
50
- <h3 className="grid-title">{title}</h3>
51
- <div className="table-wrapper">
52
- <table className="grid-table">
53
- <thead>
54
- <tr>
55
- <th>Name</th>
56
- <th style={{ textAlign: 'right' }}>Quota</th>
57
- <th style={{ textAlign: 'right' }}>✨ AI Forecast</th>
58
- <th style={{ textAlign: 'right' }}>Closed</th>
59
- <th style={{ textAlign: 'right' }}>Commit</th>
60
- <th style={{ textAlign: 'right' }}>Best Case</th>
61
- <th style={{ textAlign: 'right' }}>Pipeline</th>
62
- <th style={{ textAlign: 'right' }}>Coverage</th>
63
- </tr>
64
- </thead>
65
- <tbody>
66
- {rows.map((row, index) => (
67
- <tr key={index}>
68
- <td style={{ textAlign: 'left' }}>{row.name}</td>
69
- <td style={{ textAlign: 'right' }}>{row.quota}</td>
70
- <td style={{ textAlign: 'right' }}>{row.aiForecast}</td>
71
- <td style={{ textAlign: 'right' }}>{row.closed}</td>
72
- <td style={{ textAlign: 'right' }}>{row.commit}</td>
73
- <td style={{ textAlign: 'right' }}>{row.bestCase}</td>
74
- <td style={{ textAlign: 'right' }}>{row.pipeline}</td>
75
- <td style={{ textAlign: 'right' }}>{row.coverage}</td>
76
- </tr>
77
- ))}
78
- </tbody>
79
- </table>
80
- </div>
81
- </div>
82
- );
83
- }
84
- }
85
-
86
- export default StatusHoc(ForecastGrid);
@@ -1,62 +0,0 @@
1
- export class ForecastGridModel {
2
- label: string = '预测矩阵表格';
3
- description: string =
4
- '展示预测矩阵数据,包含Quota、AI Forecast、Closed、Commit、Best Case、Pipeline等';
5
- iconUrl: string = 'https://custom-widgets.bj.bcebos.com/forecastGrid.svg';
6
- targetPage: string[] = ['all'];
7
- targetDevice: string = 'all';
8
-
9
- defaultComProps = {
10
- title: 'Forecast Grid',
11
- rows: [
12
- {
13
- name: 'Alice',
14
- quota: '$3,000,000',
15
- aiForecast: '$2,400,000',
16
- closed: '$1,200,000',
17
- commit: '$1,800,000',
18
- bestCase: '$2,500,000',
19
- pipeline: '$8,400,000',
20
- coverage: '2.8x',
21
- },
22
- {
23
- name: 'Steve',
24
- quota: '$3,500,000',
25
- aiForecast: '$2,800,000',
26
- closed: '$800,000',
27
- commit: '$2,200,000',
28
- bestCase: '$3,000,000',
29
- pipeline: '$10,850,000',
30
- coverage: '3.1x',
31
- },
32
- {
33
- name: 'Chloe',
34
- quota: '$3,500,000',
35
- aiForecast: '$1,600,000',
36
- closed: '$1,200,000',
37
- commit: '$1,500,000',
38
- bestCase: '$2,300,000',
39
- pipeline: '$8,750,000',
40
- coverage: '2.5x',
41
- },
42
- ],
43
- };
44
-
45
- functions = [
46
- {
47
- apiKey: 'refreshData',
48
- label: '刷新数据',
49
- helpTextKey: '刷新预测矩阵数据',
50
- },
51
- ];
52
-
53
- propsSchema = [
54
- {
55
- type: 'string',
56
- name: 'title',
57
- label: '标题',
58
- },
59
- ];
60
- }
61
-
62
- export default ForecastGridModel;
@@ -1,48 +0,0 @@
1
- .forecast-grid__c {
2
- background: #fff;
3
- border-radius: 8px;
4
- padding: 20px;
5
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
6
- overflow-x: auto;
7
-
8
- .grid-title {
9
- font-size: 14px;
10
- font-weight: 600;
11
- margin-bottom: 12px;
12
- }
13
-
14
- .table-wrapper {
15
- overflow-x: auto;
16
- }
17
-
18
- .grid-table {
19
- width: 100%;
20
- border-collapse: collapse;
21
- font-size: 13px;
22
-
23
- th,
24
- td {
25
- padding: 10px 12px;
26
- border-bottom: 1px solid #f0f0f0;
27
- }
28
-
29
- th {
30
- background: #f8f9fa;
31
- font-weight: 600;
32
- color: #333;
33
- border-bottom: 2px solid #e5e7eb;
34
- }
35
-
36
- td {
37
- color: #333;
38
- }
39
-
40
- tbody tr {
41
- transition: background 0.15s;
42
-
43
- &:hover {
44
- background: #fafafa;
45
- }
46
- }
47
- }
48
- }
@@ -1,24 +0,0 @@
1
- # GapCloser 组件
2
-
3
- Gap Closer组件,展示Rescue Commit和Upgrade Candidates两类卡片。
4
-
5
- ## 使用方式
6
-
7
- ```tsx
8
- import GapCloser from './components/gapCloser__c';
9
-
10
- <GapCloser
11
- cards={[
12
- { type: 'rescue', title: 'Rescue Commit', amount: '$1,200,000', dealCount: 3, description: '...' },
13
- { type: 'upgrade', title: 'Upgrade Candidates', amount: '$2,500,000', dealCount: 4, description: '...' },
14
- ]}
15
- onViewDeals={(type) => console.log('View deals:', type)}
16
- />
17
- ```
18
-
19
- ## Props
20
-
21
- | 属性 | 说明 | 类型 | 默认值 |
22
- |------|------|------|--------|
23
- | cards | Gap卡片数据 | GapCloserCard[] | [] |
24
- | onViewDeals | 查看商机回调 | (type: 'rescue' \| 'upgrade') => void | - |