@yoka-ui/ui 1.0.5 → 1.0.7

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 (157) hide show
  1. package/@Docs-yoka/exports.generated.md +6 -9
  2. package/README.md +39 -12
  3. package/dist/es/assets/image/skills.zip +0 -0
  4. package/dist/es/business/Empty/index.js.map +1 -1
  5. package/dist/es/business/YkCharts/Area.d.ts +18 -0
  6. package/dist/es/business/YkCharts/Area.js +336 -0
  7. package/dist/es/business/YkCharts/Area.js.map +7 -0
  8. package/dist/es/business/YkCharts/Bar.d.ts +21 -0
  9. package/dist/es/business/YkCharts/Bar.js +316 -0
  10. package/dist/es/business/YkCharts/Bar.js.map +7 -0
  11. package/dist/es/business/YkCharts/BarProperty.d.ts +21 -0
  12. package/dist/es/business/YkCharts/BarProperty.js +357 -0
  13. package/dist/es/business/YkCharts/BarProperty.js.map +7 -0
  14. package/dist/es/business/YkCharts/BarTotal.d.ts +21 -0
  15. package/dist/es/business/YkCharts/BarTotal.js +288 -0
  16. package/dist/es/business/YkCharts/BarTotal.js.map +7 -0
  17. package/dist/es/business/YkCharts/Line.d.ts +21 -0
  18. package/dist/es/business/YkCharts/Line.js +342 -0
  19. package/dist/es/business/YkCharts/Line.js.map +7 -0
  20. package/dist/es/business/YkCharts/Pie.d.ts +19 -0
  21. package/dist/es/business/YkCharts/Pie.js +107 -0
  22. package/dist/es/business/YkCharts/Pie.js.map +7 -0
  23. package/dist/es/business/YkCharts/PieProperty.d.ts +18 -0
  24. package/dist/es/business/YkCharts/PieProperty.js +180 -0
  25. package/dist/es/business/YkCharts/PieProperty.js.map +7 -0
  26. package/dist/es/business/YkCharts/Pies.d.ts +26 -0
  27. package/dist/es/business/YkCharts/Pies.js +348 -0
  28. package/dist/es/business/YkCharts/Pies.js.map +7 -0
  29. package/dist/es/business/YkCharts/constants.d.ts +1 -0
  30. package/dist/es/business/YkCharts/constants.js +47 -0
  31. package/dist/es/business/YkCharts/constants.js.map +7 -0
  32. package/dist/es/business/YkCharts/hooks.d.ts +4 -0
  33. package/dist/es/business/YkCharts/hooks.js +37 -0
  34. package/dist/es/business/YkCharts/hooks.js.map +7 -0
  35. package/dist/es/business/YkCharts/index.d.ts +9 -0
  36. package/dist/es/business/YkCharts/index.js +20 -0
  37. package/dist/es/business/YkCharts/index.js.map +7 -0
  38. package/dist/es/business/YkCharts/index.module.less +164 -0
  39. package/dist/es/business/YkCharts/tooltip.less +92 -0
  40. package/dist/es/business/YkCharts/transformData.js +16 -0
  41. package/dist/es/business/YkCharts/transformData.js.map +7 -0
  42. package/dist/es/business/YkCharts/typing.d.ts +74 -0
  43. package/dist/es/business/YkCharts/typing.js +1 -0
  44. package/dist/es/business/YkCharts/typing.js.map +7 -0
  45. package/dist/es/business/YkCharts/utils.d.ts +4 -0
  46. package/dist/es/business/YkCharts/utils.js +109 -0
  47. package/dist/es/business/YkCharts/utils.js.map +7 -0
  48. package/dist/es/business/YkCharts/variables.less +13 -0
  49. package/dist/es/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  50. package/dist/es/business/YkLoginModule/SmsLoginForm.js +178 -0
  51. package/dist/es/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  52. package/dist/es/business/YkLoginModule/index.d.ts +48 -0
  53. package/dist/es/business/YkLoginModule/index.js +198 -0
  54. package/dist/es/business/YkLoginModule/index.js.map +7 -0
  55. package/dist/es/business/YkLoginModule/styles.module.less +169 -0
  56. package/dist/es/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  57. package/dist/es/business/YkSqlEdit/index.d.ts +20 -0
  58. package/dist/es/business/YkSqlEdit/index.js +180 -0
  59. package/dist/es/business/YkSqlEdit/index.js.map +7 -0
  60. package/dist/es/business/YkSqlEdit/sql-language.d.ts +11 -0
  61. package/dist/es/business/YkSqlEdit/sql-language.js +1460 -0
  62. package/dist/es/business/YkSqlEdit/sql-language.js.map +7 -0
  63. package/dist/es/components/YKMarkdown/index.d.ts +11 -0
  64. package/dist/es/components/YKMarkdown/index.js +236 -0
  65. package/dist/es/components/YKMarkdown/index.js.map +7 -0
  66. package/dist/es/components/YKMarkdown/index.module.less +83 -0
  67. package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  68. package/dist/es/creative/GlassSegmentedRadio/index.d.ts +1 -1
  69. package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
  70. package/dist/es/creative/SkillsWriter/index.js +191 -0
  71. package/dist/es/creative/SkillsWriter/index.js.map +7 -0
  72. package/dist/es/creative/SkillsWriter/index.module.less +21 -0
  73. package/dist/es/index.d.ts +4 -2
  74. package/dist/es/index.js +80 -76
  75. package/dist/es/index.js.map +2 -2
  76. package/dist/es/index.less +8 -1
  77. package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
  78. package/dist/es/utils/ykStorybookDoc.js +24 -2
  79. package/dist/es/utils/ykStorybookDoc.js.map +2 -2
  80. package/dist/lib/assets/image/skills.zip +0 -0
  81. package/dist/lib/business/Empty/index.js.map +1 -1
  82. package/dist/lib/business/YkCharts/Area.d.ts +18 -0
  83. package/dist/lib/business/YkCharts/Area.js +346 -0
  84. package/dist/lib/business/YkCharts/Area.js.map +7 -0
  85. package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
  86. package/dist/lib/business/YkCharts/Bar.js +323 -0
  87. package/dist/lib/business/YkCharts/Bar.js.map +7 -0
  88. package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
  89. package/dist/lib/business/YkCharts/BarProperty.js +370 -0
  90. package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
  91. package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
  92. package/dist/lib/business/YkCharts/BarTotal.js +295 -0
  93. package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
  94. package/dist/lib/business/YkCharts/Line.d.ts +21 -0
  95. package/dist/lib/business/YkCharts/Line.js +349 -0
  96. package/dist/lib/business/YkCharts/Line.js.map +7 -0
  97. package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
  98. package/dist/lib/business/YkCharts/Pie.js +117 -0
  99. package/dist/lib/business/YkCharts/Pie.js.map +7 -0
  100. package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
  101. package/dist/lib/business/YkCharts/PieProperty.js +193 -0
  102. package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
  103. package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
  104. package/dist/lib/business/YkCharts/Pies.js +337 -0
  105. package/dist/lib/business/YkCharts/Pies.js.map +7 -0
  106. package/dist/lib/business/YkCharts/constants.d.ts +1 -0
  107. package/dist/lib/business/YkCharts/constants.js +71 -0
  108. package/dist/lib/business/YkCharts/constants.js.map +7 -0
  109. package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
  110. package/dist/lib/business/YkCharts/hooks.js +62 -0
  111. package/dist/lib/business/YkCharts/hooks.js.map +7 -0
  112. package/dist/lib/business/YkCharts/index.d.ts +9 -0
  113. package/dist/lib/business/YkCharts/index.js +61 -0
  114. package/dist/lib/business/YkCharts/index.js.map +7 -0
  115. package/dist/lib/business/YkCharts/index.module.less +164 -0
  116. package/dist/lib/business/YkCharts/tooltip.less +92 -0
  117. package/dist/lib/business/YkCharts/transformData.js +40 -0
  118. package/dist/lib/business/YkCharts/transformData.js.map +7 -0
  119. package/dist/lib/business/YkCharts/typing.d.ts +74 -0
  120. package/dist/lib/business/YkCharts/typing.js +18 -0
  121. package/dist/lib/business/YkCharts/typing.js.map +7 -0
  122. package/dist/lib/business/YkCharts/utils.d.ts +4 -0
  123. package/dist/lib/business/YkCharts/utils.js +143 -0
  124. package/dist/lib/business/YkCharts/utils.js.map +7 -0
  125. package/dist/lib/business/YkCharts/variables.less +13 -0
  126. package/dist/lib/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  127. package/dist/lib/business/YkLoginModule/SmsLoginForm.js +171 -0
  128. package/dist/lib/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  129. package/dist/lib/business/YkLoginModule/index.d.ts +48 -0
  130. package/dist/lib/business/YkLoginModule/index.js +206 -0
  131. package/dist/lib/business/YkLoginModule/index.js.map +7 -0
  132. package/dist/lib/business/YkLoginModule/styles.module.less +169 -0
  133. package/dist/lib/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  134. package/dist/lib/business/YkSqlEdit/index.d.ts +20 -0
  135. package/dist/lib/business/YkSqlEdit/index.js +202 -0
  136. package/dist/lib/business/YkSqlEdit/index.js.map +7 -0
  137. package/dist/lib/business/YkSqlEdit/sql-language.d.ts +11 -0
  138. package/dist/lib/business/YkSqlEdit/sql-language.js +1493 -0
  139. package/dist/lib/business/YkSqlEdit/sql-language.js.map +7 -0
  140. package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
  141. package/dist/lib/components/YKMarkdown/index.js +188 -0
  142. package/dist/lib/components/YKMarkdown/index.js.map +7 -0
  143. package/dist/lib/components/YKMarkdown/index.module.less +83 -0
  144. package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  145. package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +1 -1
  146. package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
  147. package/dist/lib/creative/SkillsWriter/index.js +200 -0
  148. package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
  149. package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
  150. package/dist/lib/index.d.ts +4 -2
  151. package/dist/lib/index.js +6 -0
  152. package/dist/lib/index.js.map +2 -2
  153. package/dist/lib/index.less +8 -1
  154. package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
  155. package/dist/lib/utils/ykStorybookDoc.js +23 -1
  156. package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
  157. package/package.json +16 -2
@@ -0,0 +1,295 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/business/YkCharts/BarTotal.tsx
30
+ var BarTotal_exports = {};
31
+ __export(BarTotal_exports, {
32
+ default: () => BarTotal_default
33
+ });
34
+ module.exports = __toCommonJS(BarTotal_exports);
35
+ var import_antd = require("antd");
36
+ var import_classnames = __toESM(require("classnames"));
37
+ var import_decimal = __toESM(require("decimal.js"));
38
+ var echarts = __toESM(require("echarts"));
39
+ var import_react = __toESM(require("react"));
40
+ var import_server = __toESM(require("react-dom/server"));
41
+ var import_constants = require("./constants");
42
+ var import_index_module = __toESM(require("./index.module.less"));
43
+ var import_utils = require("./utils");
44
+ var MAX_SECTORS = 500;
45
+ var BarTotal = ({
46
+ count,
47
+ // 指标显示数量
48
+ metric,
49
+ // 指标
50
+ groupBys,
51
+ // 维度
52
+ tableData,
53
+ // 表格数据
54
+ baseData,
55
+ // 基础数据
56
+ columnConfigMap,
57
+ // 列配置
58
+ height
59
+ }) => {
60
+ const chartContainerRef = (0, import_react.useRef)(null);
61
+ const chartInstanceRef = (0, import_react.useRef)(null);
62
+ const validGroupByKeys = (0, import_react.useMemo)(() => {
63
+ return groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0).map((g) => g.key);
64
+ }, [groupBys]);
65
+ const seriesData = (0, import_react.useMemo)(() => {
66
+ if (Array.isArray(groupBys) && groupBys.some((g) => Array.isArray(g.selected) && g.selected.length === 0)) {
67
+ return [];
68
+ }
69
+ const validGroupBys = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0);
70
+ if (!baseData || baseData.length === 0) {
71
+ return [];
72
+ }
73
+ const filteredBaseData = baseData.filter((item) => {
74
+ return validGroupBys.every((g) => {
75
+ const itemValue = String(item[g.key] ?? "");
76
+ return g.selected.includes(itemValue);
77
+ });
78
+ });
79
+ const byGroupBy = /* @__PURE__ */ new Map();
80
+ filteredBaseData.forEach((item) => {
81
+ const groupByValues = validGroupByKeys.map((key) => String(item[key] ?? "")).join("|");
82
+ const name = validGroupByKeys.map((key) => item[key]).join(",");
83
+ if (!byGroupBy.has(groupByValues)) {
84
+ byGroupBy.set(groupByValues, { name, rows: [] });
85
+ }
86
+ byGroupBy.get(groupByValues).rows.push(item);
87
+ });
88
+ const result = Array.from(byGroupBy.entries()).map(([, { name, rows }]) => {
89
+ const data = metric.map((m) => {
90
+ const sum = rows.reduce((s, r) => s + (Number(r[m]) || 0), 0);
91
+ return sum;
92
+ });
93
+ const dataSum = data.reduce((s, v) => s + (isNaN(v) ? 0 : v), 0);
94
+ return {
95
+ name,
96
+ type: "bar",
97
+ barMaxWidth: 20,
98
+ smooth: true,
99
+ showSymbol: false,
100
+ data,
101
+ dataSum
102
+ };
103
+ });
104
+ result.sort((a, b) => b.dataSum - a.dataSum);
105
+ return result;
106
+ }, [baseData, metric, groupBys, validGroupByKeys]);
107
+ const series = (0, import_react.useMemo)(() => {
108
+ const list = seriesData.length > MAX_SECTORS ? seriesData.slice(0, MAX_SECTORS) : seriesData;
109
+ if (seriesData.length > MAX_SECTORS) {
110
+ import_antd.message.warning(`数据量过大,仅绘制前 ${MAX_SECTORS} 条数据`);
111
+ }
112
+ return list.map(({ name, data, type, barMaxWidth, smooth, showSymbol }) => ({
113
+ name,
114
+ type,
115
+ barMaxWidth,
116
+ smooth,
117
+ showSymbol,
118
+ data
119
+ }));
120
+ }, [seriesData]);
121
+ const chartData = (0, import_react.useMemo)(() => {
122
+ return series.map((s) => ({
123
+ name: s.name,
124
+ ...metric.reduce((acc, m, i) => ({ ...acc, [m]: s.data[i] }), {})
125
+ }));
126
+ }, [series, metric]);
127
+ const yAxisFormatter = (0, import_react.useMemo)(() => {
128
+ var _a;
129
+ if (metric.length === 1) {
130
+ return (_a = columnConfigMap[metric[0]]) == null ? void 0 : _a.format;
131
+ }
132
+ return null;
133
+ }, [metric, columnConfigMap]);
134
+ const grid = {
135
+ top: 10,
136
+ left: 0,
137
+ right: 10,
138
+ bottom: 40,
139
+ containLabel: true
140
+ };
141
+ const legend = {
142
+ bottom: 0,
143
+ type: "scroll"
144
+ };
145
+ const xAxis = {
146
+ type: "category",
147
+ data: metric,
148
+ axisLine: {
149
+ lineStyle: {
150
+ color: "#EBEEF4"
151
+ }
152
+ },
153
+ axisLabel: {
154
+ color: "#9CA4B3",
155
+ fontSize: 12
156
+ },
157
+ axisTick: {
158
+ alignWithLabel: true
159
+ },
160
+ boundaryGap: true
161
+ };
162
+ const yAxis = {
163
+ type: "value",
164
+ splitNumber: 4,
165
+ // 设置Y轴坐标点数量
166
+ axisLine: {
167
+ show: true,
168
+ lineStyle: {
169
+ color: "#EBEEF4",
170
+ shadowOffsetY: -10,
171
+ shadowColor: "#EBEEF4"
172
+ }
173
+ },
174
+ axisLabel: {
175
+ color: "#999999",
176
+ fontSize: 12,
177
+ formatter: (value) => {
178
+ if (yAxisFormatter) {
179
+ if (yAxisFormatter === "currency") {
180
+ const [result2, unit2] = (0, import_utils.formatNumber)(value, true);
181
+ return result2 + unit2;
182
+ }
183
+ if (yAxisFormatter === "percent") {
184
+ return new import_decimal.default(value).mul(100) + "%";
185
+ }
186
+ return (0, import_utils.formatValue)(value, yAxisFormatter);
187
+ }
188
+ const [result, unit] = (0, import_utils.formatNumber)(value, true);
189
+ return result + unit;
190
+ }
191
+ },
192
+ splitLine: {
193
+ lineStyle: {
194
+ type: [2, 3],
195
+ // 虚线
196
+ color: "#E7E7E7"
197
+ // 背景线颜色
198
+ }
199
+ },
200
+ axisTick: {
201
+ show: true
202
+ }
203
+ };
204
+ const tooltipFormatter = (params) => {
205
+ var _a;
206
+ const title = ((_a = params[0]) == null ? void 0 : _a.axisValue) ?? "";
207
+ const filterParams = params.filter((f) => {
208
+ const { name, seriesName } = f;
209
+ if (name === "合计") {
210
+ return true;
211
+ } else if (chartData.some((dataItem) => {
212
+ return (dataItem == null ? void 0 : dataItem.name) === seriesName;
213
+ })) {
214
+ return true;
215
+ }
216
+ return false;
217
+ });
218
+ const tooltipDom = /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.tooltip }, /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.title }, title), /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.content }, filterParams.map((m) => {
219
+ const columnConfig = columnConfigMap[metric[0]];
220
+ const format = (columnConfig == null ? void 0 : columnConfig.format) ?? "string";
221
+ const showValue = format === "currency" ? (0, import_utils.formatNumber)(m.value, true) : (0, import_utils.formatValue)(m.value, format);
222
+ const showValueText = showValue === "" || showValue[0] === "" ? "-" : showValue;
223
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.item, key: m.seriesName }, /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_classnames.default)(import_index_module.default.point, import_index_module.default.pointBar), style: { background: m.color } }), /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.category }, m.seriesName), /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.value }, showValueText));
224
+ })));
225
+ return import_server.default.renderToStaticMarkup(tooltipDom);
226
+ };
227
+ const tooltip = {
228
+ trigger: "axis",
229
+ padding: 0,
230
+ confine: true,
231
+ enterable: true,
232
+ axisPointer: {
233
+ type: "shadow"
234
+ },
235
+ formatter: tooltipFormatter
236
+ };
237
+ const chartOptions = (0, import_react.useMemo)(() => {
238
+ return {
239
+ color: import_constants.chartColors,
240
+ grid,
241
+ legend: {
242
+ ...legend,
243
+ itemWidth: 10,
244
+ itemHeight: 10
245
+ },
246
+ xAxis,
247
+ yAxis,
248
+ series,
249
+ tooltip
250
+ };
251
+ }, [series]);
252
+ (0, import_react.useEffect)(() => {
253
+ return () => {
254
+ if (chartInstanceRef.current) {
255
+ chartInstanceRef.current.dispose();
256
+ chartInstanceRef.current = null;
257
+ }
258
+ };
259
+ }, []);
260
+ (0, import_react.useEffect)(() => {
261
+ const container = chartContainerRef.current;
262
+ if (!container)
263
+ return;
264
+ let chart = chartInstanceRef.current;
265
+ if (!chart) {
266
+ chart = echarts.init(container);
267
+ chartInstanceRef.current = chart;
268
+ }
269
+ chart.setOption(chartOptions, true);
270
+ }, [chartOptions]);
271
+ (0, import_react.useEffect)(() => {
272
+ const chartElement = chartContainerRef.current;
273
+ if (!chartElement)
274
+ return;
275
+ const resizeObserver = new ResizeObserver(() => {
276
+ var _a;
277
+ (_a = chartInstanceRef.current) == null ? void 0 : _a.resize();
278
+ });
279
+ resizeObserver.observe(chartElement);
280
+ return () => {
281
+ resizeObserver.unobserve(chartElement);
282
+ resizeObserver.disconnect();
283
+ };
284
+ }, []);
285
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, chartData.length > 0 ? /* @__PURE__ */ import_react.default.createElement(
286
+ "div",
287
+ {
288
+ ref: chartContainerRef,
289
+ className: import_index_module.default.echarts,
290
+ style: { width: "100%", height: height || "100%", minHeight: 220 }
291
+ }
292
+ ) : /* @__PURE__ */ import_react.default.createElement(import_antd.Empty, { className: import_index_module.default.empty, description: "暂无数据", image: import_antd.Empty.PRESENTED_IMAGE_SIMPLE }));
293
+ };
294
+ var BarTotal_default = BarTotal;
295
+ //# sourceMappingURL=BarTotal.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/business/YkCharts/BarTotal.tsx"],
4
+ "sourcesContent": ["/**\n * 基础分析-合计且有维度时的柱状图\n */\n\nimport { Empty, message } from 'antd';\nimport classNames from 'classnames';\nimport Decimal from 'decimal.js';\nimport * as echarts from 'echarts';\nimport React, { type FC, useEffect, useMemo, useRef } from 'react';\nimport ReactDOMServer from 'react-dom/server';\nimport { chartColors } from './constants';\nimport styles from './index.module.less';\nimport type { ColumnConfig, GroupByItem, TableData } from './typing';\nimport { formatNumber, formatValue } from './utils';\n\ntype RowItem = {\n [key: string]: number | string;\n};\n\ntype PageTypes = {\n count?: number;\n metric: string[];\n groupBys: GroupByItem[];\n tableData: TableData;\n baseData: RowItem[];\n columnConfigMap: { [key: string]: ColumnConfig };\n height?: number;\n};\n\nconst MAX_SECTORS = 500;\n\nconst BarTotal: FC<PageTypes> = ({\n count, // 指标显示数量\n metric, // 指标\n groupBys, // 维度\n tableData, // 表格数据\n baseData, // 基础数据\n columnConfigMap, // 列配置\n height,\n}) => {\n const chartContainerRef = useRef<HTMLDivElement | null>(null);\n const chartInstanceRef = useRef<echarts.ECharts | null>(null);\n\n const validGroupByKeys = useMemo(() => {\n return groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0).map((g) => g.key);\n }, [groupBys]);\n\n // 参照 Bar:从 baseData 提取实际存在的维度组合,不做笛卡尔积\n const seriesData = useMemo(() => {\n if (Array.isArray(groupBys) && groupBys.some((g) => Array.isArray(g.selected) && g.selected.length === 0)) {\n return [];\n }\n const validGroupBys = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0);\n if (!baseData || baseData.length === 0) {\n return [];\n }\n const filteredBaseData = baseData.filter((item) => {\n return validGroupBys.every((g) => {\n const itemValue = String(item[g.key] ?? '');\n return g.selected.includes(itemValue);\n });\n });\n // 按维度组合聚合行(同一组合可能多行,如多日期需汇总指标)\n const byGroupBy = new Map<string, { name: string; rows: RowItem[] }>();\n filteredBaseData.forEach((item) => {\n const groupByValues = validGroupByKeys.map((key) => String(item[key] ?? '')).join('|');\n const name = validGroupByKeys.map((key) => item[key]).join(',');\n if (!byGroupBy.has(groupByValues)) {\n byGroupBy.set(groupByValues, { name, rows: [] });\n }\n byGroupBy.get(groupByValues)!.rows.push(item);\n });\n const result = Array.from(byGroupBy.entries()).map(([, { name, rows }]) => {\n const data = metric.map((m) => {\n const sum = rows.reduce((s, r) => s + (Number(r[m]) || 0), 0);\n return sum;\n });\n const dataSum = data.reduce((s, v) => s + (isNaN(v) ? 0 : v), 0);\n return {\n name,\n type: 'bar' as const,\n barMaxWidth: 20,\n smooth: true,\n showSymbol: false,\n data,\n dataSum,\n };\n });\n result.sort((a, b) => b.dataSum - a.dataSum);\n return result;\n }, [baseData, metric, groupBys, validGroupByKeys]);\n\n const series = useMemo(() => {\n const list = seriesData.length > MAX_SECTORS ? seriesData.slice(0, MAX_SECTORS) : seriesData;\n if (seriesData.length > MAX_SECTORS) {\n message.warning(`数据量过大,仅绘制前 ${MAX_SECTORS} 条数据`);\n }\n return list.map(({ name, data, type, barMaxWidth, smooth, showSymbol }) => ({\n name,\n type,\n barMaxWidth,\n smooth,\n showSymbol,\n data,\n }));\n }, [seriesData]);\n\n // 供 tooltip 使用:由 series 反推 chartData 结构\n const chartData = useMemo(() => {\n return series.map((s) => ({\n name: s.name,\n ...metric.reduce((acc, m, i) => ({ ...acc, [m]: s.data[i] }), {} as Record<string, number>),\n }));\n }, [series, metric]);\n\n // 获取y轴的格式化方式\n const yAxisFormatter = useMemo(() => {\n if (metric.length === 1) {\n return columnConfigMap[metric[0]]?.format;\n }\n return null;\n }, [metric, columnConfigMap]);\n\n const grid = {\n top: 10,\n left: 0,\n right: 10,\n bottom: 40,\n containLabel: true,\n };\n const legend = {\n bottom: 0,\n type: 'scroll',\n };\n const xAxis = {\n type: 'category',\n data: metric,\n axisLine: {\n lineStyle: {\n color: '#EBEEF4',\n },\n },\n axisLabel: {\n color: '#9CA4B3',\n fontSize: 12,\n },\n axisTick: {\n alignWithLabel: true,\n },\n boundaryGap: true,\n };\n const yAxis = {\n type: 'value',\n splitNumber: 4, // 设置Y轴坐标点数量\n axisLine: {\n show: true,\n lineStyle: {\n color: '#EBEEF4',\n shadowOffsetY: -10,\n shadowColor: '#EBEEF4',\n },\n },\n axisLabel: {\n color: '#999999',\n fontSize: 12,\n formatter: (value: number) => {\n // 目前只有一个指标时, Y轴进行格式化\n if (yAxisFormatter) {\n if (yAxisFormatter === 'currency') {\n const [result, unit] = formatNumber(value, true);\n return result + unit;\n }\n if (yAxisFormatter === 'percent') {\n return new Decimal(value).mul(100) + '%';\n }\n return formatValue(value, yAxisFormatter);\n }\n const [result, unit] = formatNumber(value, true);\n return result + unit;\n },\n },\n splitLine: {\n lineStyle: {\n type: [2, 3], // 虚线\n color: '#E7E7E7', // 背景线颜色\n },\n },\n axisTick: {\n show: true,\n },\n };\n const tooltipFormatter = (params: any) => {\n const title = params[0]?.axisValue ?? '';\n const filterParams = params.filter((f: any) => {\n const { name, seriesName } = f;\n if (name === '合计') {\n return true;\n } else if (\n chartData.some((dataItem) => {\n return dataItem?.name === seriesName;\n })\n ) {\n return true;\n }\n return false;\n });\n\n const tooltipDom = (\n <div className={styles.tooltip}>\n <div className={styles.title}>{title}</div>\n <div className={styles.content}>\n {filterParams.map((m: any) => {\n const columnConfig = columnConfigMap[metric[0]];\n const format = columnConfig?.format ?? 'string'; // 使用可选链和默认值\n const showValue = format === 'currency' ? formatNumber(m.value, true) : formatValue(m.value, format);\n const showValueText = showValue === '' || showValue[0] === '' ? '-' : showValue;\n return (\n <div className={styles.item} key={m.seriesName}>\n <div className={classNames(styles.point, styles.pointBar)} style={{ background: m.color }}></div>\n <div className={styles.category}>{m.seriesName}</div>\n <div className={styles.value}>{showValueText}</div>\n </div>\n );\n })}\n </div>\n </div>\n );\n return ReactDOMServer.renderToStaticMarkup(tooltipDom);\n };\n const tooltip = {\n trigger: 'axis',\n padding: 0,\n confine: true,\n enterable: true,\n axisPointer: {\n type: 'shadow',\n },\n formatter: tooltipFormatter,\n };\n\n // 图表配置\n const chartOptions = useMemo(() => {\n return {\n color: chartColors,\n grid,\n legend: {\n ...legend,\n itemWidth: 10,\n itemHeight: 10,\n },\n xAxis,\n yAxis,\n series,\n tooltip,\n };\n }, [series]);\n\n // 仅卸载时销毁实例\n useEffect(() => {\n return () => {\n if (chartInstanceRef.current) {\n chartInstanceRef.current.dispose();\n chartInstanceRef.current = null;\n }\n };\n }, []);\n\n // 配置变化时仅 setOption\n useEffect(() => {\n const container = chartContainerRef.current;\n if (!container) return;\n let chart = chartInstanceRef.current;\n if (!chart) {\n chart = echarts.init(container);\n chartInstanceRef.current = chart;\n }\n chart.setOption(chartOptions, true);\n }, [chartOptions]);\n\n // 监听容器大小变化(仅挂载时注册)\n useEffect(() => {\n const chartElement = chartContainerRef.current;\n if (!chartElement) return;\n const resizeObserver = new ResizeObserver(() => {\n chartInstanceRef.current?.resize();\n });\n resizeObserver.observe(chartElement);\n return () => {\n resizeObserver.unobserve(chartElement);\n resizeObserver.disconnect();\n };\n }, []);\n\n return (\n <>\n {chartData.length > 0 ? (\n <div\n ref={chartContainerRef}\n className={styles.echarts}\n style={{ width: '100%', height: height || '100%', minHeight: 220 }}\n ></div>\n ) : (\n <Empty className={styles.empty} description='暂无数据' image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </>\n );\n};\n\nexport default BarTotal;\n"],
5
+ "mappings": "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",
6
+ "names": ["result", "unit", "Decimal", "React", "styles", "classNames", "ReactDOMServer"]
7
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import type { ColumnConfig, GroupByItem, SqlMetaConfig, TableData } from './typing';
3
+ type RowItem = {
4
+ [key: string]: number | string;
5
+ };
6
+ type PageTypes = {
7
+ count?: number;
8
+ metric: string[];
9
+ groupBys: GroupByItem[];
10
+ tableData: TableData;
11
+ baseData: RowItem[];
12
+ columnConfigMap: {
13
+ [key: string]: ColumnConfig;
14
+ };
15
+ sqlFormatMap?: {
16
+ [key: string]: SqlMetaConfig;
17
+ };
18
+ height?: number;
19
+ };
20
+ declare const _default: React.NamedExoticComponent<PageTypes>;
21
+ export default _default;