@yoka-ui/ui 1.0.6 → 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 (123) hide show
  1. package/@Docs-yoka/exports.generated.md +3 -3
  2. package/README.md +6 -6
  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/components/YKMarkdown/index.d.ts +11 -0
  50. package/dist/es/components/YKMarkdown/index.js +236 -0
  51. package/dist/es/components/YKMarkdown/index.js.map +7 -0
  52. package/dist/es/components/YKMarkdown/index.module.less +83 -0
  53. package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  54. package/dist/es/creative/GlassSegmentedRadio/index.d.ts +1 -1
  55. package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
  56. package/dist/es/creative/SkillsWriter/index.js +191 -0
  57. package/dist/es/creative/SkillsWriter/index.js.map +7 -0
  58. package/dist/es/creative/SkillsWriter/index.module.less +21 -0
  59. package/dist/es/index.less +6 -1
  60. package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
  61. package/dist/es/utils/ykStorybookDoc.js +24 -2
  62. package/dist/es/utils/ykStorybookDoc.js.map +2 -2
  63. package/dist/lib/assets/image/skills.zip +0 -0
  64. package/dist/lib/business/Empty/index.js.map +1 -1
  65. package/dist/lib/business/YkCharts/Area.d.ts +18 -0
  66. package/dist/lib/business/YkCharts/Area.js +346 -0
  67. package/dist/lib/business/YkCharts/Area.js.map +7 -0
  68. package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
  69. package/dist/lib/business/YkCharts/Bar.js +323 -0
  70. package/dist/lib/business/YkCharts/Bar.js.map +7 -0
  71. package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
  72. package/dist/lib/business/YkCharts/BarProperty.js +370 -0
  73. package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
  74. package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
  75. package/dist/lib/business/YkCharts/BarTotal.js +295 -0
  76. package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
  77. package/dist/lib/business/YkCharts/Line.d.ts +21 -0
  78. package/dist/lib/business/YkCharts/Line.js +349 -0
  79. package/dist/lib/business/YkCharts/Line.js.map +7 -0
  80. package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
  81. package/dist/lib/business/YkCharts/Pie.js +117 -0
  82. package/dist/lib/business/YkCharts/Pie.js.map +7 -0
  83. package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
  84. package/dist/lib/business/YkCharts/PieProperty.js +193 -0
  85. package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
  86. package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
  87. package/dist/lib/business/YkCharts/Pies.js +337 -0
  88. package/dist/lib/business/YkCharts/Pies.js.map +7 -0
  89. package/dist/lib/business/YkCharts/constants.d.ts +1 -0
  90. package/dist/lib/business/YkCharts/constants.js +71 -0
  91. package/dist/lib/business/YkCharts/constants.js.map +7 -0
  92. package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
  93. package/dist/lib/business/YkCharts/hooks.js +62 -0
  94. package/dist/lib/business/YkCharts/hooks.js.map +7 -0
  95. package/dist/lib/business/YkCharts/index.d.ts +9 -0
  96. package/dist/lib/business/YkCharts/index.js +61 -0
  97. package/dist/lib/business/YkCharts/index.js.map +7 -0
  98. package/dist/lib/business/YkCharts/index.module.less +164 -0
  99. package/dist/lib/business/YkCharts/tooltip.less +92 -0
  100. package/dist/lib/business/YkCharts/transformData.js +40 -0
  101. package/dist/lib/business/YkCharts/transformData.js.map +7 -0
  102. package/dist/lib/business/YkCharts/typing.d.ts +74 -0
  103. package/dist/lib/business/YkCharts/typing.js +18 -0
  104. package/dist/lib/business/YkCharts/typing.js.map +7 -0
  105. package/dist/lib/business/YkCharts/utils.d.ts +4 -0
  106. package/dist/lib/business/YkCharts/utils.js +143 -0
  107. package/dist/lib/business/YkCharts/utils.js.map +7 -0
  108. package/dist/lib/business/YkCharts/variables.less +13 -0
  109. package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
  110. package/dist/lib/components/YKMarkdown/index.js +188 -0
  111. package/dist/lib/components/YKMarkdown/index.js.map +7 -0
  112. package/dist/lib/components/YKMarkdown/index.module.less +83 -0
  113. package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  114. package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +1 -1
  115. package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
  116. package/dist/lib/creative/SkillsWriter/index.js +200 -0
  117. package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
  118. package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
  119. package/dist/lib/index.less +6 -1
  120. package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
  121. package/dist/lib/utils/ykStorybookDoc.js +23 -1
  122. package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
  123. package/package.json +152 -143
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/business/YkCharts/Line.tsx"],
4
+ "sourcesContent": ["import { Empty, message } from 'antd';\nimport Decimal from 'decimal.js';\nimport * as echarts from 'echarts';\nimport { isEmpty } from 'lodash';\nimport React, { type FC, memo, 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, SqlMetaConfig, TableData } from './typing';\nimport { formatNumber, formatValue, sqlFormat } 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 sqlFormatMap?: { [key: string]: SqlMetaConfig };\n height?: number;\n};\n\nconst MAX_SECTORS = 500;\n\nconst Line: FC<PageTypes> = ({\n count, // 指标显示数量\n metric, // 指标\n groupBys, // 维度\n tableData, // 表格数据\n baseData, // 基础数据\n columnConfigMap, // 列配置\n sqlFormatMap, // 列配置(用于SQL可视化中的格式化处理,SQL中的格式化走了另一套逻辑)\n height,\n}) => {\n const { x = [], x_field, group_by } = tableData;\n const chartContainerRef = useRef<HTMLDivElement | null>(null);\n const chartInstanceRef = useRef<echarts.ECharts | null>(null);\n\n // 是否只有一个指标\n const onlyOneMetric = useMemo(() => {\n return metric.length === 1;\n }, [metric]);\n\n // 获取series数据\n const seriesData = useMemo(() => {\n if (Array.isArray(groupBys) && groupBys.some((g) => Array.isArray(g.selected) && g.selected.length === 0)) {\n return [];\n }\n // 提前计算 validGroupBys 和 validGroupByKeys\n const validGroupBys = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0);\n const validGroupByKeys = validGroupBys.map((g) => g.key);\n // 如果没有 baseData,直接返回空数组\n if (!baseData || baseData.length === 0) {\n return [];\n }\n // 根据 groupBys 的 selected 过滤 baseData\n // 只保留符合所有 groupBy selected 条件的数据\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 // 建立 baseData 索引 Map,使用复合键 (x_field + validGroupByKeys + category) 作为 key\n // 格式: `${x_field}|${groupByKey1}|${groupByKey2}|...|${category}`\n const dataIndexMap = new Map<string, RowItem>();\n // 从 baseData 中提取实际存在的 groupBy 组合(而不是生成所有可能的组合)\n // 使用 Set 存储唯一的组合标识符,格式: `${groupByValue1}|${groupByValue2}|...|${metric}`\n const existingCombinations = new Map<\n string,\n {\n groupByValues: string;\n category: string;\n groupByObj: any;\n name: string;\n }\n >();\n\n // 预计算 name 的生成函数(提取到循环外,避免重复创建函数)\n const getName = (category: string, groupByObj: any) => {\n if (group_by && group_by.length > 0) {\n if (onlyOneMetric) {\n return group_by.map((g) => groupByObj[g]).join(',');\n }\n return [category, ...group_by.map((g) => groupByObj[g])].join(',');\n }\n return category;\n };\n\n filteredBaseData.forEach((item) => {\n const groupByValues = validGroupByKeys.map((key) => String(item[key] ?? '')).join('|');\n // 为每个 metric 建立索引和记录组合\n metric.forEach((cat) => {\n const key = `${item[x_field]}|${groupByValues}|${cat}`;\n dataIndexMap.set(key, item);\n // 记录实际存在的组合(每个 metric + groupBy 组合只记录一次)\n const combinationKey = `${groupByValues}|${cat}`;\n if (!existingCombinations.has(combinationKey)) {\n // 构建 groupBy 对象,用于后续生成 name\n const groupByObj: any = { category: cat };\n validGroupByKeys.forEach((gKey) => {\n groupByObj[gKey] = item[gKey];\n });\n // 预先计算 name,避免在 map 时重复计算\n const name = getName(cat, groupByObj);\n existingCombinations.set(combinationKey, {\n groupByValues,\n category: cat,\n groupByObj,\n name, // 预先计算好的 name\n });\n }\n });\n });\n\n // 直接从实际存在的组合生成 series,避免生成数百万个无效组合\n const result = Array.from(existingCombinations.values()).map(({ groupByValues, category, name }) => {\n // 预分配数组,避免动态扩容\n const data = new Array(x.length);\n for (let i = 0; i < x.length; i++) {\n const item = x[i];\n const key = `${item}|${groupByValues}|${category}`;\n const itemData = dataIndexMap.get(key);\n data[i] = itemData?.[category];\n }\n\n return {\n name,\n type: 'line',\n smooth: true,\n showSymbol: true,\n symbol: 'emptyCircle',\n symbolSize: 0.8,\n lineStyle: {\n width: 1.5,\n },\n emphasis: {\n scale: 8,\n },\n data,\n dataSum: data.reduce((sum, val) => {\n const num = typeof val === 'number' ? val : 0;\n return sum + (isNaN(num) ? 0 : num);\n }, 0),\n };\n });\n\n // 按照 data 中数值合计从大到小排序\n const sortedResult = result.sort((a, b) => {\n const sumA = a.dataSum;\n const sumB = b.dataSum;\n return sumB - sumA; // 从大到小排序\n });\n return sortedResult;\n }, [baseData, metric, groupBys, x, x_field, group_by, onlyOneMetric]);\n\n // 获取y轴的格式化方式\n const yAxisFormatter = useMemo(() => {\n // SQL可视化中的特殊格式化处理\n if (!isEmpty(sqlFormatMap) && metric.length > 0) {\n const format = sqlFormatMap[metric[0]]?.format;\n if (format?.type === 'currency') {\n return 'number';\n }\n if (format?.type === 'percent') {\n return 'percent';\n }\n if (format?.decimals > 0) {\n return 'decimal';\n }\n return 'number';\n }\n if (metric.length === 1) {\n return columnConfigMap[metric[0]]?.format;\n }\n return null;\n }, [metric, columnConfigMap, sqlFormatMap]);\n\n const grid = {\n top: 10,\n left: 5,\n right: 10,\n bottom: 40,\n containLabel: true,\n };\n const legend = {\n bottom: 0,\n type: 'scroll',\n itemWidth: 13,\n itemStyle: {\n opacity: 0,\n },\n lineStyle: {\n width: 2,\n type: 'solid',\n },\n };\n const xAxis = {\n type: 'category',\n data: x,\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 padding: [0, 0, 0, 5],\n formatter: (value: number) => {\n if (yAxisFormatter === 'percent') {\n return new Decimal(value).mul(100) + '%';\n }\n if (yAxisFormatter === 'decimal') {\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 tooltipDom = (\n <div className={styles.tooltip}>\n <div className={styles.title}>\n <span>{title}</span>\n <span style={{ float: 'right', paddingRight: 10 }}>\n {onlyOneMetric && metric.length === 1 ? ' ' + metric[0] : ''}\n </span>\n </div>\n <div className={styles.content}>\n {params.map((m: any) => {\n const metricName = onlyOneMetric && metric.length === 1 ? metric[0] : m.seriesName.split(',')[0];\n const columnConfig = columnConfigMap[metricName];\n const format = columnConfig?.format ?? 'string'; // 使用可选链和默认值\n let showValue = format === 'currency' ? formatNumber(m.value, true) : formatValue(m.value, format);\n // SQL可视化中的特殊格式化处理\n if (!isEmpty(sqlFormatMap) && metric.length > 0) {\n const format = sqlFormatMap[metricName]?.format;\n showValue = sqlFormat(m.value, format);\n }\n const showValueText = showValue === '' || showValue[0] === '' ? '-' : showValue;\n return (\n <div className={styles.item} key={m.seriesName}>\n <div className={styles.point} 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\n const tooltip = {\n trigger: 'axis',\n padding: 0,\n confine: true,\n enterable: true,\n axisPointer: {\n type: 'line', // 设置悬浮指针为线\n lineStyle: {\n color: '#EBEEF4', // 设置线的颜色\n type: 'dashed', // 设置虚线样式\n },\n },\n formatter: tooltipFormatter,\n };\n\n // 图表配置\n const chartOptions = useMemo(() => {\n if (seriesData.length > MAX_SECTORS) {\n message.warning(`数据量过大,仅绘制前 ${MAX_SECTORS} 条数据`);\n }\n const result = {\n color: chartColors,\n grid,\n legend: {\n ...legend,\n itemWidth: 13,\n itemStyle: {\n opacity: 0,\n },\n lineStyle: {\n width: 2,\n type: 'solid',\n },\n },\n xAxis,\n yAxis,\n // 前端这里做个限制,防止数据量过大导致性能问题\n series: seriesData.length > MAX_SECTORS ? seriesData.slice(0, MAX_SECTORS) : seriesData,\n tooltip,\n };\n\n return result;\n }, [seriesData]);\n\n // 初始化图表\n useEffect(() => {\n if (!chartContainerRef.current) return;\n let chart = chartInstanceRef.current;\n if (!chart) {\n chart = echarts.init(chartContainerRef.current);\n chartInstanceRef.current = chart;\n }\n chart?.setOption(chartOptions, true);\n return () => {\n if (chartInstanceRef.current) {\n chartInstanceRef.current.dispose();\n chartInstanceRef.current = null;\n }\n };\n }, [chartOptions]);\n\n // 监听图表容器大小变化\n useEffect(() => {\n const chartElement = chartContainerRef.current;\n if (!chartElement) return;\n const resizeObserver = new ResizeObserver(() => {\n const chart = chartInstanceRef.current;\n if (chart) {\n chart.resize();\n }\n });\n resizeObserver.observe(chartElement);\n return () => {\n resizeObserver.unobserve(chartElement);\n resizeObserver.disconnect();\n };\n }, [seriesData]);\n\n return (\n <>\n {seriesData.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\n// 使用 memo 包裹组件,避免不必要的重新渲染\n// 自定义比较函数,深度比较关键 props\nexport default memo(Line);\n"],
5
+ "mappings": "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",
6
+ "names": ["_a", "_b", "format"]
7
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 组件名称:Pie
3
+ * 组件描述:一个用于显示饼图的组件
4
+ * 组件使用场景:在需要显示饼图的场景中使用
5
+ * 组件参数说明:
6
+ * - item: 饼图数据
7
+ * - height: 高度
8
+ */
9
+ import { type FC } from 'react';
10
+ type PieProps = {
11
+ item: any;
12
+ height?: number;
13
+ legend?: {
14
+ bottom: number;
15
+ type: string;
16
+ };
17
+ };
18
+ declare const Pie: FC<PieProps>;
19
+ export default Pie;
@@ -0,0 +1,107 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+
21
+ // src/business/YkCharts/Pie.tsx
22
+ import * as echarts from "echarts";
23
+ import React, { useEffect, useMemo, useRef } from "react";
24
+ import { chartColors } from "./constants";
25
+ import { formatNumber, formatValue, sqlFormat } from "./utils";
26
+ var Pie = ({ item, height, legend }) => {
27
+ const chartContainerRef = useRef(null);
28
+ const chartInstanceRef = useRef(null);
29
+ const chartOptions = useMemo(() => {
30
+ return __spreadProps(__spreadValues({
31
+ title: [
32
+ // 饼图中心标题
33
+ {
34
+ text: item.name,
35
+ bottom: "center",
36
+ left: "49.5%",
37
+ textAlign: "center",
38
+ textStyle: {
39
+ color: "#666",
40
+ width: 150,
41
+ fontSize: 14,
42
+ overflow: "truncate",
43
+ fontWeight: "normal",
44
+ textAlign: "center"
45
+ }
46
+ }
47
+ ]
48
+ }, legend && { legend }), {
49
+ color: chartColors,
50
+ tooltip: {
51
+ trigger: "item",
52
+ borderColor: "#fff",
53
+ textStyle: {
54
+ fontSize: 12
55
+ },
56
+ formatter: (params) => {
57
+ const { name, value, percent, data } = params;
58
+ const { format } = data;
59
+ const displayValue = (item.format ? sqlFormat(value, item.format) : (format == null ? void 0 : format.format) === "currency" ? formatNumber(value).join("") : formatValue(value, format.format)) || value;
60
+ return `${name ? name + ":" : ""} ${displayValue}(${percent}%)`;
61
+ }
62
+ },
63
+ label: {
64
+ position: "center"
65
+ },
66
+ series: [item]
67
+ });
68
+ }, [item]);
69
+ useEffect(() => {
70
+ if (chartContainerRef.current) {
71
+ let chart = chartInstanceRef.current;
72
+ if (!chart) {
73
+ chart = echarts.init(chartContainerRef.current);
74
+ chartInstanceRef.current = chart;
75
+ }
76
+ chart == null ? void 0 : chart.setOption(chartOptions, true);
77
+ return () => {
78
+ if (chartInstanceRef.current) {
79
+ chartInstanceRef.current.dispose();
80
+ chartInstanceRef.current = null;
81
+ }
82
+ };
83
+ }
84
+ }, [chartContainerRef.current, chartOptions]);
85
+ useEffect(() => {
86
+ const chartElement = chartContainerRef.current;
87
+ if (!chartElement)
88
+ return;
89
+ const resizeObserver = new ResizeObserver(() => {
90
+ const chart = chartInstanceRef.current;
91
+ if (chart) {
92
+ chart.resize();
93
+ }
94
+ });
95
+ resizeObserver.observe(chartElement);
96
+ return () => {
97
+ resizeObserver.unobserve(chartElement);
98
+ resizeObserver.disconnect();
99
+ };
100
+ }, []);
101
+ return /* @__PURE__ */ React.createElement("div", { ref: chartContainerRef, style: { height: height || "100%", width: "100%" } });
102
+ };
103
+ var Pie_default = Pie;
104
+ export {
105
+ Pie_default as default
106
+ };
107
+ //# sourceMappingURL=Pie.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/business/YkCharts/Pie.tsx"],
4
+ "sourcesContent": ["/**\n * 组件名称:Pie\n * 组件描述:一个用于显示饼图的组件\n * 组件使用场景:在需要显示饼图的场景中使用\n * 组件参数说明:\n * - item: 饼图数据\n * - height: 高度\n */\n\nimport * as echarts from 'echarts';\nimport React, { type FC, useEffect, useMemo, useRef } from 'react';\nimport { chartColors } from './constants';\nimport { formatNumber, formatValue, sqlFormat } from './utils';\n\ntype PieProps = {\n item: any;\n height?: number;\n legend?: {\n bottom: number;\n type: string;\n };\n};\n\nconst Pie: FC<PieProps> = ({ item, height, legend }) => {\n const chartContainerRef = useRef<HTMLDivElement | null>(null);\n const chartInstanceRef = useRef<echarts.ECharts | null>(null);\n const chartOptions = useMemo(() => {\n return {\n title: [\n // 饼图中心标题\n {\n text: item.name,\n bottom: 'center',\n left: '49.5%',\n textAlign: 'center',\n textStyle: {\n color: '#666',\n width: 150,\n fontSize: 14,\n overflow: 'truncate',\n fontWeight: 'normal',\n textAlign: 'center',\n },\n },\n ],\n ...(legend && { legend }),\n color: chartColors,\n tooltip: {\n trigger: 'item',\n borderColor: '#fff',\n textStyle: {\n fontSize: 12,\n },\n formatter: (params: any) => {\n const { name, value, percent, data } = params;\n const { format } = data;\n const displayValue =\n (item.format\n ? sqlFormat(value, item.format)\n : format?.format === 'currency'\n ? formatNumber(value).join('')\n : formatValue(value, format.format)) || value;\n return `${name ? name + ':' : ''} ${displayValue}(${percent}%)`;\n },\n },\n label: {\n position: 'center',\n },\n series: [item],\n };\n }, [item]);\n\n useEffect(() => {\n if (chartContainerRef.current) {\n let chart = chartInstanceRef.current;\n if (!chart) {\n chart = echarts.init(chartContainerRef.current);\n chartInstanceRef.current = chart;\n }\n chart?.setOption(chartOptions, true);\n return () => {\n if (chartInstanceRef.current) {\n chartInstanceRef.current.dispose();\n chartInstanceRef.current = null;\n }\n };\n }\n }, [chartContainerRef.current, chartOptions]);\n\n // 监听图表容器大小变化\n useEffect(() => {\n const chartElement = chartContainerRef.current;\n if (!chartElement) return;\n const resizeObserver = new ResizeObserver(() => {\n const chart = chartInstanceRef.current;\n if (chart) {\n chart.resize();\n }\n });\n resizeObserver.observe(chartElement);\n return () => {\n resizeObserver.unobserve(chartElement);\n resizeObserver.disconnect();\n };\n }, []);\n\n return <div ref={chartContainerRef} style={{ height: height || '100%', width: '100%' }}></div>;\n};\n\nexport default Pie;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AASA,YAAY,aAAa;AACzB,OAAO,SAAkB,WAAW,SAAS,cAAc;AAC3D,SAAS,mBAAmB;AAC5B,SAAS,cAAc,aAAa,iBAAiB;AAWrD,IAAM,MAAoB,CAAC,EAAE,MAAM,QAAQ,OAAO,MAAM;AACtD,QAAM,oBAAoB,OAA8B,IAAI;AAC5D,QAAM,mBAAmB,OAA+B,IAAI;AAC5D,QAAM,eAAe,QAAQ,MAAM;AACjC,WAAO;AAAA,MACL,OAAO;AAAA;AAAA,QAEL;AAAA,UACE,MAAM,KAAK;AAAA,UACX,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,YACT,OAAO;AAAA,YACP,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,OACI,UAAU,EAAE,OAAO,IAlBlB;AAAA,MAmBL,OAAO;AAAA,MACP,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aAAa;AAAA,QACb,WAAW;AAAA,UACT,UAAU;AAAA,QACZ;AAAA,QACA,WAAW,CAAC,WAAgB;AAC1B,gBAAM,EAAE,MAAM,OAAO,SAAS,KAAK,IAAI;AACvC,gBAAM,EAAE,OAAO,IAAI;AACnB,gBAAM,gBACH,KAAK,SACF,UAAU,OAAO,KAAK,MAAM,KAC5B,iCAAQ,YAAW,aACjB,aAAa,KAAK,EAAE,KAAK,EAAE,IAC3B,YAAY,OAAO,OAAO,MAAM,MAAM;AAC9C,iBAAO,GAAG,OAAO,OAAO,MAAM,MAAM,gBAAgB;AAAA,QACtD;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,MACZ;AAAA,MACA,QAAQ,CAAC,IAAI;AAAA,IACf;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,YAAU,MAAM;AACd,QAAI,kBAAkB,SAAS;AAC7B,UAAI,QAAQ,iBAAiB;AAC7B,UAAI,CAAC,OAAO;AACV,gBAAgB,aAAK,kBAAkB,OAAO;AAC9C,yBAAiB,UAAU;AAAA,MAC7B;AACA,qCAAO,UAAU,cAAc;AAC/B,aAAO,MAAM;AACX,YAAI,iBAAiB,SAAS;AAC5B,2BAAiB,QAAQ,QAAQ;AACjC,2BAAiB,UAAU;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,kBAAkB,SAAS,YAAY,CAAC;AAG5C,YAAU,MAAM;AACd,UAAM,eAAe,kBAAkB;AACvC,QAAI,CAAC;AAAc;AACnB,UAAM,iBAAiB,IAAI,eAAe,MAAM;AAC9C,YAAM,QAAQ,iBAAiB;AAC/B,UAAI,OAAO;AACT,cAAM,OAAO;AAAA,MACf;AAAA,IACF,CAAC;AACD,mBAAe,QAAQ,YAAY;AACnC,WAAO,MAAM;AACX,qBAAe,UAAU,YAAY;AACrC,qBAAe,WAAW;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,oCAAC,SAAI,KAAK,mBAAmB,OAAO,EAAE,QAAQ,UAAU,QAAQ,OAAO,OAAO,GAAG;AAC1F;AAEA,IAAO,cAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ import { type FC } from 'react';
2
+ import type { ColumnConfig, GroupByItem, 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
+ height?: number;
16
+ };
17
+ declare const PieProperty: FC<PageTypes>;
18
+ export default PieProperty;
@@ -0,0 +1,180 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+
21
+ // src/business/YkCharts/PieProperty.tsx
22
+ import { Empty } from "antd";
23
+ import React, { useMemo } from "react";
24
+ import styles from "./index.module.less";
25
+ import Pie from "./Pie";
26
+ var PieProperty = ({
27
+ count,
28
+ // 指标显示数量
29
+ metric,
30
+ // 指标
31
+ groupBys,
32
+ // 维度
33
+ tableData,
34
+ // 表格数据
35
+ baseData,
36
+ // 基础数据
37
+ columnConfigMap,
38
+ // 列配置
39
+ height
40
+ }) => {
41
+ const { x_field } = tableData;
42
+ const legendNames = useMemo(() => {
43
+ if (groupBys && groupBys.length > 1) {
44
+ const validGroups = groupBys.slice(1).filter((g) => Array.isArray(g.selected) && g.selected.length > 0);
45
+ const arrays = validGroups.map((g) => g.selected);
46
+ const product = arrays.reduce(
47
+ (acc, curr) => {
48
+ const res = [];
49
+ acc.forEach((a) => {
50
+ curr.forEach((b) => {
51
+ res.push(Array.isArray(a) ? [...a, b] : [a, b]);
52
+ });
53
+ });
54
+ return res;
55
+ },
56
+ [[]]
57
+ );
58
+ return product.map((arr) => arr.join(","));
59
+ } else {
60
+ return metric;
61
+ }
62
+ }, [groupBys, metric]);
63
+ const legendItems = useMemo(() => {
64
+ var _a, _b;
65
+ let rows = [];
66
+ let fieldType = "string";
67
+ if (groupBys.length === 0) {
68
+ rows = baseData.map((item) => item[x_field]);
69
+ rows = Array.from(new Set(rows));
70
+ fieldType = ((_a = columnConfigMap[x_field]) == null ? void 0 : _a.type) || "string";
71
+ } else {
72
+ rows = groupBys[0].options.filter((option) => groupBys[0].selected.includes(option));
73
+ fieldType = ((_b = columnConfigMap[groupBys[0].key]) == null ? void 0 : _b.type) || "string";
74
+ }
75
+ if (fieldType === "number") {
76
+ rows = rows.sort((a, b) => {
77
+ return Number(a) > Number(b) ? 1 : -1;
78
+ });
79
+ }
80
+ return count ? rows.slice(0, count) : rows;
81
+ }, [baseData, groupBys, x_field, count]);
82
+ const chartData = useMemo(() => {
83
+ if (groupBys && groupBys.length > 1) {
84
+ if (Array.isArray(groupBys) && groupBys.some((g) => Array.isArray(g.selected) && g.selected.length === 0)) {
85
+ return [];
86
+ }
87
+ const validGroups = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0);
88
+ const arrays = validGroups.map((g) => g.selected);
89
+ const product = arrays.reduce(
90
+ (acc, curr) => {
91
+ const res = [];
92
+ acc.forEach((a) => {
93
+ curr.forEach((b) => {
94
+ res.push(Array.isArray(a) ? [...a, b] : [a, b]);
95
+ });
96
+ });
97
+ return res;
98
+ },
99
+ [[]]
100
+ );
101
+ const result = product.map((arr) => {
102
+ const item = baseData.find((d) => {
103
+ return arr.every((a, i) => {
104
+ return d[groupBys[i].key] === a;
105
+ });
106
+ });
107
+ if (!item)
108
+ return null;
109
+ return __spreadProps(__spreadValues({}, item), {
110
+ name: arr.join(","),
111
+ value: item[metric[0]],
112
+ metricName: metric[0],
113
+ format: columnConfigMap[metric[0]]
114
+ });
115
+ }).filter(Boolean);
116
+ return count ? result.slice(0, count) : result;
117
+ } else if (groupBys && groupBys.length === 1) {
118
+ const selected = groupBys[0].selected;
119
+ const result = selected.map((s) => {
120
+ const item = baseData.find((d) => d[groupBys[0].key] === s);
121
+ if (!item)
122
+ return null;
123
+ return __spreadProps(__spreadValues({}, item), {
124
+ name: item[groupBys[0].key],
125
+ value: item[metric[0]],
126
+ metricName: metric[0],
127
+ format: columnConfigMap[metric[0]]
128
+ });
129
+ }).filter((item) => (item == null ? void 0 : item.name) && legendItems.includes(item.name));
130
+ return count ? result.slice(0, count) : result;
131
+ } else {
132
+ const result = baseData.map((item) => {
133
+ return __spreadProps(__spreadValues({}, item), {
134
+ name: item[x_field],
135
+ value: item[metric[0]],
136
+ metricName: metric[0],
137
+ format: columnConfigMap[metric[0]]
138
+ });
139
+ }).filter((item) => {
140
+ return legendItems.includes(item.name);
141
+ });
142
+ return count ? result.slice(0, count) : result;
143
+ }
144
+ }, [baseData, x_field, groupBys, metric, columnConfigMap, count]);
145
+ const series = useMemo(() => {
146
+ return {
147
+ name: metric[0],
148
+ type: "pie",
149
+ radius: ["50%", "70%"],
150
+ label: {
151
+ color: "#666"
152
+ },
153
+ data: chartData.map((item) => {
154
+ return {
155
+ name: item == null ? void 0 : item.name,
156
+ value: item == null ? void 0 : item.value,
157
+ format: item == null ? void 0 : item.format
158
+ };
159
+ })
160
+ };
161
+ }, [legendNames, chartData]);
162
+ const legend = {
163
+ bottom: 0,
164
+ type: "scroll",
165
+ data: legendItems.map((item) => {
166
+ return {
167
+ name: item,
168
+ textStyle: {
169
+ color: "#666"
170
+ }
171
+ };
172
+ })
173
+ };
174
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, chartData.length > 0 ? /* @__PURE__ */ React.createElement("div", { className: styles.pieLegend, style: { height: height || "100%", width: "100%" } }, /* @__PURE__ */ React.createElement("div", { style: { height: height || "100%", width: "100%", minHeight: 220 } }, /* @__PURE__ */ React.createElement(Pie, { item: series, legend }))) : /* @__PURE__ */ React.createElement(Empty, { className: styles.empty, description: "暂无数据", image: Empty.PRESENTED_IMAGE_SIMPLE }));
175
+ };
176
+ var PieProperty_default = PieProperty;
177
+ export {
178
+ PieProperty_default as default
179
+ };
180
+ //# sourceMappingURL=PieProperty.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/business/YkCharts/PieProperty.tsx"],
4
+ "sourcesContent": ["/**\n * 用户分析-饼图\n */\nimport { Empty } from 'antd';\nimport React, { type FC, useMemo } from 'react';\nimport styles from './index.module.less';\nimport Pie from './Pie';\nimport type { ColumnConfig, GroupByItem, TableData } from './typing';\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 PieProperty: FC<PageTypes> = ({\n count, // 指标显示数量\n metric, // 指标\n groupBys, // 维度\n tableData, // 表格数据\n baseData, // 基础数据\n columnConfigMap, // 列配置\n height,\n}) => {\n const { x_field } = tableData;\n\n // 获取图例名称\n const legendNames = useMemo(() => {\n if (groupBys && groupBys.length > 1) {\n const validGroups = groupBys.slice(1).filter((g) => Array.isArray(g.selected) && g.selected.length > 0);\n const arrays = validGroups.map((g) => g.selected);\n const product = arrays.reduce(\n (acc, curr) => {\n const res: any[] = [];\n acc.forEach((a) => {\n curr.forEach((b) => {\n res.push(Array.isArray(a) ? [...a, b] : [a, b]);\n });\n });\n return res;\n },\n [[]],\n );\n return product.map((arr) => arr.join(','));\n } else {\n return metric;\n }\n }, [groupBys, metric]);\n\n // 获取图例项\n const legendItems = useMemo(() => {\n // 当没有选维度时,x轴为合计\n let rows = [];\n let fieldType = 'string';\n if (groupBys.length === 0) {\n rows = baseData.map((item) => item[x_field]);\n rows = Array.from(new Set(rows)); // 去重\n fieldType = columnConfigMap[x_field]?.type || 'string';\n } else {\n // 当选一个维度时,x轴为维度,按照 options 的顺序排序\n rows = groupBys[0].options.filter((option) => groupBys[0].selected.includes(option));\n fieldType = columnConfigMap[groupBys[0].key]?.type || 'string';\n }\n if (fieldType === 'number') {\n rows = rows.sort((a: string | number, b: string | number) => {\n return Number(a) > Number(b) ? 1 : -1;\n });\n }\n return count ? rows.slice(0, count) : rows;\n }, [baseData, groupBys, x_field, count]);\n const chartData = useMemo(() => {\n // 存在多个维度\n if (groupBys && groupBys.length > 1) {\n // 如果存在已选维度为空,则不显示图表\n if (Array.isArray(groupBys) && groupBys.some((g) => Array.isArray(g.selected) && g.selected.length === 0)) {\n return [];\n }\n const validGroups = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0);\n const arrays = validGroups.map((g) => g.selected);\n const product = arrays.reduce(\n (acc, curr) => {\n const res: any[] = [];\n acc.forEach((a) => {\n curr.forEach((b) => {\n res.push(Array.isArray(a) ? [...a, b] : [a, b]);\n });\n });\n return res;\n },\n [[]],\n );\n const result = product\n .map((arr) => {\n const item = baseData.find((d) => {\n return arr.every((a: string, i: number) => {\n return d[groupBys[i].key] === a;\n });\n });\n if (!item) return null;\n return {\n ...item,\n name: arr.join(','),\n value: item[metric[0]],\n metricName: metric[0],\n format: columnConfigMap[metric[0]],\n };\n })\n .filter(Boolean);\n return count ? result.slice(0, count) : result;\n } else if (groupBys && groupBys.length === 1) {\n // 存在一个维度\n const selected = groupBys[0].selected;\n const result = selected\n .map((s) => {\n const item = baseData.find((d) => d[groupBys[0].key] === s);\n if (!item) return null;\n return {\n ...item,\n name: item[groupBys[0].key],\n value: item[metric[0]],\n metricName: metric[0],\n format: columnConfigMap[metric[0]],\n };\n })\n .filter((item) => item?.name && legendItems.includes(item.name));\n return count ? result.slice(0, count) : result;\n } else {\n // 不存在维度\n const result = baseData\n .map((item) => {\n return {\n ...item,\n name: item[x_field],\n value: item[metric[0]],\n metricName: metric[0],\n format: columnConfigMap[metric[0]],\n };\n })\n .filter((item) => {\n return legendItems.includes(item.name);\n });\n return count ? result.slice(0, count) : result;\n }\n }, [baseData, x_field, groupBys, metric, columnConfigMap, count]);\n\n // 获取series\n const series = useMemo(() => {\n return {\n name: metric[0],\n type: 'pie',\n radius: ['50%', '70%'],\n label: {\n color: '#666',\n },\n data: chartData.map((item) => {\n return {\n name: item?.name,\n value: item?.value,\n format: item?.format,\n };\n }),\n };\n }, [legendNames, chartData]);\n const legend = {\n bottom: 0,\n type: 'scroll',\n data: legendItems.map((item) => {\n return {\n name: item,\n textStyle: {\n color: '#666',\n },\n };\n }),\n };\n\n return (\n <>\n {chartData.length > 0 ? (\n <div className={styles.pieLegend} style={{ height: height || '100%', width: '100%' }}>\n <div style={{ height: height || '100%', width: '100%', minHeight: 220 }}>\n <Pie item={series} legend={legend} />\n </div>\n </div>\n ) : (\n <Empty className={styles.empty} description='暂无数据' image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </>\n );\n};\n\nexport default PieProperty;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import type { ColumnConfig, GroupByItem, SqlMetaConfig, TableData } from './typing';
3
+ import 'swiper/css';
4
+ import 'swiper/css/navigation';
5
+ import 'swiper/css/pagination';
6
+ type RowItem = {
7
+ [key: string]: number | string;
8
+ };
9
+ type PageTypes = {
10
+ count?: number;
11
+ metric: string[];
12
+ groupBys: GroupByItem[];
13
+ reportType: number;
14
+ tableData: TableData;
15
+ baseData: RowItem[];
16
+ columnConfigMap: {
17
+ [key: string]: ColumnConfig;
18
+ };
19
+ sqlFormatMap?: {
20
+ [key: string]: SqlMetaConfig;
21
+ };
22
+ cardSize?: string;
23
+ height?: number;
24
+ };
25
+ declare const _default: React.NamedExoticComponent<PageTypes>;
26
+ export default _default;