@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.
- package/@Docs-yoka/exports.generated.md +3 -3
- package/README.md +6 -6
- package/dist/es/assets/image/skills.zip +0 -0
- package/dist/es/business/Empty/index.js.map +1 -1
- package/dist/es/business/YkCharts/Area.d.ts +18 -0
- package/dist/es/business/YkCharts/Area.js +336 -0
- package/dist/es/business/YkCharts/Area.js.map +7 -0
- package/dist/es/business/YkCharts/Bar.d.ts +21 -0
- package/dist/es/business/YkCharts/Bar.js +316 -0
- package/dist/es/business/YkCharts/Bar.js.map +7 -0
- package/dist/es/business/YkCharts/BarProperty.d.ts +21 -0
- package/dist/es/business/YkCharts/BarProperty.js +357 -0
- package/dist/es/business/YkCharts/BarProperty.js.map +7 -0
- package/dist/es/business/YkCharts/BarTotal.d.ts +21 -0
- package/dist/es/business/YkCharts/BarTotal.js +288 -0
- package/dist/es/business/YkCharts/BarTotal.js.map +7 -0
- package/dist/es/business/YkCharts/Line.d.ts +21 -0
- package/dist/es/business/YkCharts/Line.js +342 -0
- package/dist/es/business/YkCharts/Line.js.map +7 -0
- package/dist/es/business/YkCharts/Pie.d.ts +19 -0
- package/dist/es/business/YkCharts/Pie.js +107 -0
- package/dist/es/business/YkCharts/Pie.js.map +7 -0
- package/dist/es/business/YkCharts/PieProperty.d.ts +18 -0
- package/dist/es/business/YkCharts/PieProperty.js +180 -0
- package/dist/es/business/YkCharts/PieProperty.js.map +7 -0
- package/dist/es/business/YkCharts/Pies.d.ts +26 -0
- package/dist/es/business/YkCharts/Pies.js +348 -0
- package/dist/es/business/YkCharts/Pies.js.map +7 -0
- package/dist/es/business/YkCharts/constants.d.ts +1 -0
- package/dist/es/business/YkCharts/constants.js +47 -0
- package/dist/es/business/YkCharts/constants.js.map +7 -0
- package/dist/es/business/YkCharts/hooks.d.ts +4 -0
- package/dist/es/business/YkCharts/hooks.js +37 -0
- package/dist/es/business/YkCharts/hooks.js.map +7 -0
- package/dist/es/business/YkCharts/index.d.ts +9 -0
- package/dist/es/business/YkCharts/index.js +20 -0
- package/dist/es/business/YkCharts/index.js.map +7 -0
- package/dist/es/business/YkCharts/index.module.less +164 -0
- package/dist/es/business/YkCharts/tooltip.less +92 -0
- package/dist/es/business/YkCharts/transformData.js +16 -0
- package/dist/es/business/YkCharts/transformData.js.map +7 -0
- package/dist/es/business/YkCharts/typing.d.ts +74 -0
- package/dist/es/business/YkCharts/typing.js +1 -0
- package/dist/es/business/YkCharts/typing.js.map +7 -0
- package/dist/es/business/YkCharts/utils.d.ts +4 -0
- package/dist/es/business/YkCharts/utils.js +109 -0
- package/dist/es/business/YkCharts/utils.js.map +7 -0
- package/dist/es/business/YkCharts/variables.less +13 -0
- package/dist/es/components/YKMarkdown/index.d.ts +11 -0
- package/dist/es/components/YKMarkdown/index.js +236 -0
- package/dist/es/components/YKMarkdown/index.js.map +7 -0
- package/dist/es/components/YKMarkdown/index.module.less +83 -0
- package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
- package/dist/es/creative/GlassSegmentedRadio/index.d.ts +1 -1
- package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
- package/dist/es/creative/SkillsWriter/index.js +191 -0
- package/dist/es/creative/SkillsWriter/index.js.map +7 -0
- package/dist/es/creative/SkillsWriter/index.module.less +21 -0
- package/dist/es/index.less +6 -1
- package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
- package/dist/es/utils/ykStorybookDoc.js +24 -2
- package/dist/es/utils/ykStorybookDoc.js.map +2 -2
- package/dist/lib/assets/image/skills.zip +0 -0
- package/dist/lib/business/Empty/index.js.map +1 -1
- package/dist/lib/business/YkCharts/Area.d.ts +18 -0
- package/dist/lib/business/YkCharts/Area.js +346 -0
- package/dist/lib/business/YkCharts/Area.js.map +7 -0
- package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
- package/dist/lib/business/YkCharts/Bar.js +323 -0
- package/dist/lib/business/YkCharts/Bar.js.map +7 -0
- package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
- package/dist/lib/business/YkCharts/BarProperty.js +370 -0
- package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
- package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
- package/dist/lib/business/YkCharts/BarTotal.js +295 -0
- package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
- package/dist/lib/business/YkCharts/Line.d.ts +21 -0
- package/dist/lib/business/YkCharts/Line.js +349 -0
- package/dist/lib/business/YkCharts/Line.js.map +7 -0
- package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
- package/dist/lib/business/YkCharts/Pie.js +117 -0
- package/dist/lib/business/YkCharts/Pie.js.map +7 -0
- package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
- package/dist/lib/business/YkCharts/PieProperty.js +193 -0
- package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
- package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
- package/dist/lib/business/YkCharts/Pies.js +337 -0
- package/dist/lib/business/YkCharts/Pies.js.map +7 -0
- package/dist/lib/business/YkCharts/constants.d.ts +1 -0
- package/dist/lib/business/YkCharts/constants.js +71 -0
- package/dist/lib/business/YkCharts/constants.js.map +7 -0
- package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
- package/dist/lib/business/YkCharts/hooks.js +62 -0
- package/dist/lib/business/YkCharts/hooks.js.map +7 -0
- package/dist/lib/business/YkCharts/index.d.ts +9 -0
- package/dist/lib/business/YkCharts/index.js +61 -0
- package/dist/lib/business/YkCharts/index.js.map +7 -0
- package/dist/lib/business/YkCharts/index.module.less +164 -0
- package/dist/lib/business/YkCharts/tooltip.less +92 -0
- package/dist/lib/business/YkCharts/transformData.js +40 -0
- package/dist/lib/business/YkCharts/transformData.js.map +7 -0
- package/dist/lib/business/YkCharts/typing.d.ts +74 -0
- package/dist/lib/business/YkCharts/typing.js +18 -0
- package/dist/lib/business/YkCharts/typing.js.map +7 -0
- package/dist/lib/business/YkCharts/utils.d.ts +4 -0
- package/dist/lib/business/YkCharts/utils.js +143 -0
- package/dist/lib/business/YkCharts/utils.js.map +7 -0
- package/dist/lib/business/YkCharts/variables.less +13 -0
- package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
- package/dist/lib/components/YKMarkdown/index.js +188 -0
- package/dist/lib/components/YKMarkdown/index.js.map +7 -0
- package/dist/lib/components/YKMarkdown/index.module.less +83 -0
- package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
- package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +1 -1
- package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
- package/dist/lib/creative/SkillsWriter/index.js +200 -0
- package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
- package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
- package/dist/lib/index.less +6 -1
- package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
- package/dist/lib/utils/ykStorybookDoc.js +23 -1
- package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
- package/package.json +152 -143
package/dist/es/index.less
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
// 自动聚合的样式文件
|
|
8
|
-
@import "../../src/Themes/TableTheme/index.less";
|
|
9
8
|
@import "../../src/assets/less/ant-reset.less";
|
|
10
9
|
@import "../../src/assets/less/index.less";
|
|
11
10
|
@import "../../src/assets/less/variables.less";
|
|
@@ -14,6 +13,9 @@
|
|
|
14
13
|
@import "../../src/business/ModCommonFilter/components/FilterButton/index.module.less";
|
|
15
14
|
@import "../../src/business/ModCommonFilter/components/PopoverContent/index.module.less";
|
|
16
15
|
@import "../../src/business/ModCommonFilter/index.module.less";
|
|
16
|
+
@import "../../src/business/YkCharts/index.module.less";
|
|
17
|
+
@import "../../src/business/YkCharts/tooltip.less";
|
|
18
|
+
@import "../../src/business/YkCharts/variables.less";
|
|
17
19
|
@import "../../src/business/YkLoginModule/styles.module.less";
|
|
18
20
|
@import "../../src/business/YkPorjectSelect/index.module.less";
|
|
19
21
|
@import "../../src/business/YkSqlEdit/code-mirror-custom.module.less";
|
|
@@ -23,13 +25,16 @@
|
|
|
23
25
|
@import "../../src/components/TreeTransfer/components/TreeTransferPanel/index.less";
|
|
24
26
|
@import "../../src/components/TreeTransfer/index.less";
|
|
25
27
|
@import "../../src/components/YkDateRangePicker/index.module.less";
|
|
28
|
+
@import "../../src/components/YKMarkdown/index.module.less";
|
|
26
29
|
@import "../../src/components/YkRangeDateWithVS/index.module.less";
|
|
27
30
|
@import "../../src/components/YkRangeTimeWithRecent/index.module.less";
|
|
28
31
|
@import "../../src/creative/ArcCheckbox/index.module.less";
|
|
29
32
|
@import "../../src/creative/ButtonRadioWithInfo/index.less";
|
|
30
33
|
@import "../../src/creative/ButtonWithProgress/index.less";
|
|
31
34
|
@import "../../src/creative/GlassSegmentedRadio/index.module.less";
|
|
35
|
+
@import "../../src/creative/SkillsWriter/index.module.less";
|
|
32
36
|
@import "../../src/layout/YkDrawer/index.module.less";
|
|
37
|
+
@import "../../src/Themes/TableTheme/index.less";
|
|
33
38
|
@import "../../src/ui/LogicOperator/index.module.less";
|
|
34
39
|
@import "../../src/ui/YkCard/index.module.less";
|
|
35
40
|
@import "../../src/ui/YkCheckbox/index.module.less";
|
|
@@ -13,5 +13,20 @@ export type YkStoryDocInput = {
|
|
|
13
13
|
* 组件特有备注(交互、API、Story 限制等);环境类说明由函数自动追加。
|
|
14
14
|
*/
|
|
15
15
|
notes?: string[];
|
|
16
|
+
/**
|
|
17
|
+
* 代码示例数组,每个示例包含标题和代码。
|
|
18
|
+
* 将在文档中以 ```tsx 代码块形式展示。
|
|
19
|
+
*/
|
|
20
|
+
examples?: YkStoryDocExample[];
|
|
21
|
+
};
|
|
22
|
+
/** 代码示例类型 */
|
|
23
|
+
export type YkStoryDocExample = {
|
|
24
|
+
/** 示例标题 */
|
|
25
|
+
title?: string;
|
|
26
|
+
/** 代码示例内容(tsx 代码块) */
|
|
27
|
+
code: string;
|
|
16
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* 生成完整的 Storybook 文档字符串
|
|
31
|
+
*/
|
|
17
32
|
export declare function ykStoryDoc(input: YkStoryDocInput): string;
|
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
// src/utils/ykStorybookDoc.ts
|
|
2
2
|
var YK_STORYBOOK_PLATFORM_NOTE = "业务侧使用 `@yoka-ui/ui` 时需保证 React 18、与库一致的 Ant Design 5;入口引入 Ant Design 全局样式(可与库一致使用 `antd/dist/reset.css`),并引入 `@yoka-ui/ui/dist/index.less`(以 README 为准)。";
|
|
3
|
+
function formatExamples(examples) {
|
|
4
|
+
if (!examples || examples.length === 0) {
|
|
5
|
+
return "";
|
|
6
|
+
}
|
|
7
|
+
return examples.map((example) => {
|
|
8
|
+
const title = example.title ? `### ${example.title}
|
|
9
|
+
|
|
10
|
+
` : "";
|
|
11
|
+
return `${title}\`\`\`tsx
|
|
12
|
+
${example.code}
|
|
13
|
+
\`\`\``;
|
|
14
|
+
}).join("\n\n");
|
|
15
|
+
}
|
|
3
16
|
function ykStoryDoc(input) {
|
|
4
|
-
var _a;
|
|
17
|
+
var _a, _b;
|
|
5
18
|
const deps = input.dependencies.length > 0 ? input.dependencies.join("、") : "`react`、`antd`(具体见源码 import)";
|
|
6
19
|
const extra = ((_a = input.notes) != null ? _a : []).filter(Boolean);
|
|
7
20
|
const remarks = [...extra, YK_STORYBOOK_PLATFORM_NOTE];
|
|
8
|
-
|
|
21
|
+
const baseDoc = `**描述**:${input.summary}
|
|
9
22
|
|
|
10
23
|
**依赖**:${deps}
|
|
11
24
|
|
|
12
25
|
**备注**:
|
|
13
26
|
${remarks.map((line) => `- ${line}`).join("\n")}`;
|
|
27
|
+
const examplesStr = formatExamples((_b = input.examples) != null ? _b : []);
|
|
28
|
+
if (examplesStr) {
|
|
29
|
+
return `${baseDoc}
|
|
30
|
+
|
|
31
|
+
## 代码示例
|
|
32
|
+
|
|
33
|
+
${examplesStr}`;
|
|
34
|
+
}
|
|
35
|
+
return baseDoc;
|
|
14
36
|
}
|
|
15
37
|
export {
|
|
16
38
|
ykStoryDoc
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/utils/ykStorybookDoc.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Storybook Autodocs 统一文案:**描述** / **依赖** / **备注**。\n * 用于各 `*.stories.tsx` 的 `meta.parameters.docs.description.component`。\n */\nexport type YkStoryDocInput = {\n /** 一句话概括组件用途(建议以句号结尾) */\n summary: string;\n /**\n * 运行时主要依赖:`npm 包(用到的子模块)` 或 `本库 · 模块名`\n */\n dependencies: string[];\n /**\n * 组件特有备注(交互、API、Story 限制等);环境类说明由函数自动追加。\n */\n notes?: string[];\n};\n\nconst YK_STORYBOOK_PLATFORM_NOTE =\n '业务侧使用 `@yoka-ui/ui` 时需保证 React 18、与库一致的 Ant Design 5;入口引入 Ant Design 全局样式(可与库一致使用 `antd/dist/reset.css`),并引入 `@yoka-ui/ui/dist/index.less`(以 README 为准)。';\n\nexport function ykStoryDoc(input: YkStoryDocInput): string {\n const deps = input.dependencies.length > 0 ? input.dependencies.join('、') : '`react`、`antd`(具体见源码 import)';\n\n const extra = (input.notes ?? []).filter(Boolean);\n const remarks = [...extra, YK_STORYBOOK_PLATFORM_NOTE];\n\n
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["/**\n * Storybook Autodocs 统一文案:**描述** / **依赖** / **备注**。\n * 用于各 `*.stories.tsx` 的 `meta.parameters.docs.description.component`。\n */\nexport type YkStoryDocInput = {\n /** 一句话概括组件用途(建议以句号结尾) */\n summary: string;\n /**\n * 运行时主要依赖:`npm 包(用到的子模块)` 或 `本库 · 模块名`\n */\n dependencies: string[];\n /**\n * 组件特有备注(交互、API、Story 限制等);环境类说明由函数自动追加。\n */\n notes?: string[];\n /**\n * 代码示例数组,每个示例包含标题和代码。\n * 将在文档中以 ```tsx 代码块形式展示。\n */\n examples?: YkStoryDocExample[];\n};\n\n/** 代码示例类型 */\nexport type YkStoryDocExample = {\n /** 示例标题 */\n title?: string;\n /** 代码示例内容(tsx 代码块) */\n code: string;\n};\n\nconst YK_STORYBOOK_PLATFORM_NOTE =\n '业务侧使用 `@yoka-ui/ui` 时需保证 React 18、与库一致的 Ant Design 5;入口引入 Ant Design 全局样式(可与库一致使用 `antd/dist/reset.css`),并引入 `@yoka-ui/ui/dist/index.less`(以 README 为准)。';\n\n/**\n * 生成代码示例的 Markdown 格式字符串\n */\nfunction formatExamples(examples: YkStoryDocExample[]): string {\n if (!examples || examples.length === 0) {\n return '';\n }\n\n return examples\n .map((example) => {\n const title = example.title ? `### ${example.title}\\n\\n` : '';\n return `${title}\\`\\`\\`tsx\\n${example.code}\\n\\`\\`\\``;\n })\n .join('\\n\\n');\n}\n\n/**\n * 生成完整的 Storybook 文档字符串\n */\nexport function ykStoryDoc(input: YkStoryDocInput): string {\n const deps = input.dependencies.length > 0 ? input.dependencies.join('、') : '`react`、`antd`(具体见源码 import)';\n\n const extra = (input.notes ?? []).filter(Boolean);\n const remarks = [...extra, YK_STORYBOOK_PLATFORM_NOTE];\n\n const baseDoc = `**描述**:${input.summary}\\n\\n**依赖**:${deps}\\n\\n**备注**:\\n${remarks.map((line) => `- ${line}`).join('\\n')}`;\n\n // 如果有代码示例,添加到文档末尾\n const examplesStr = formatExamples(input.examples ?? []);\n if (examplesStr) {\n return `${baseDoc}\\n\\n## 代码示例\\n\\n${examplesStr}`;\n }\n\n return baseDoc;\n}\n"],
|
|
5
|
+
"mappings": ";AA8BA,IAAM,6BACJ;AAKF,SAAS,eAAe,UAAuC;AAC7D,MAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,SAAO,SACJ,IAAI,CAAC,YAAY;AAChB,UAAM,QAAQ,QAAQ,QAAQ,OAAO,QAAQ;AAAA;AAAA,IAAc;AAC3D,WAAO,GAAG;AAAA,EAAmB,QAAQ;AAAA;AAAA,EACvC,CAAC,EACA,KAAK,MAAM;AAChB;AAKO,SAAS,WAAW,OAAgC;AApD3D;AAqDE,QAAM,OAAO,MAAM,aAAa,SAAS,IAAI,MAAM,aAAa,KAAK,GAAG,IAAI;AAE5E,QAAM,UAAS,WAAM,UAAN,YAAe,CAAC,GAAG,OAAO,OAAO;AAChD,QAAM,UAAU,CAAC,GAAG,OAAO,0BAA0B;AAErD,QAAM,UAAU,UAAU,MAAM;AAAA;AAAA,SAAqB;AAAA;AAAA;AAAA,EAAoB,QAAQ,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,KAAK,IAAI;AAGrH,QAAM,cAAc,gBAAe,WAAM,aAAN,YAAkB,CAAC,CAAC;AACvD,MAAI,aAAa;AACf,WAAO,GAAG;AAAA;AAAA;AAAA;AAAA,EAAyB;AAAA,EACrC;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/business/Empty/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Empty, Flex } from 'antd';\nimport type { ForwardedRef } from 'react';\nimport React from 'react';\nimport EmptyImg from './empty.png';\n\n/**\n * 空状态占位组件的 Props(ref 由 forwardRef 注入,无需在 props 中声明)\n */\ntype EmptyProps = {\n /** 空状态插图,不传则使用默认 empty.png */\n image?: React.ReactNode | string;\n /** 描述文案或自定义节点,默认「暂无数据」 */\n description?: string | React.ReactNode;\n /** 图片容器样式,会与默认宽高合并 */\n imageStyle?: React.CSSProperties;\n /** 根节点 Flex 的样式 */\n style?: React.CSSProperties;\n};\n\n/** 描述文字统一样式 */\nconst descriptionStyle: React.CSSProperties = {\n color: '#999',\n fontSize: 14,\n height: 20,\n lineHeight: '20px',\n};\n\n/**\n * 空状态占位:居中展示默认图 + 描述,支持自定义图片与文案,支持 ref 透传。\n */\nconst ForwardedEmptyPlaceholder = React.forwardRef(\n ({ image, description, imageStyle = {}, style = {} }: EmptyProps, ref: ForwardedRef<HTMLDivElement>) => {\n return (\n <Flex ref={ref} style={{ padding: '80px 0', ...style }} align
|
|
4
|
+
"sourcesContent": ["import { Empty, Flex } from 'antd';\nimport type { ForwardedRef } from 'react';\nimport React from 'react';\nimport EmptyImg from './empty.png';\n\n/**\n * 空状态占位组件的 Props(ref 由 forwardRef 注入,无需在 props 中声明)\n */\ntype EmptyProps = {\n /** 空状态插图,不传则使用默认 empty.png */\n image?: React.ReactNode | string;\n /** 描述文案或自定义节点,默认「暂无数据」 */\n description?: string | React.ReactNode;\n /** 图片容器样式,会与默认宽高合并 */\n imageStyle?: React.CSSProperties;\n /** 根节点 Flex 的样式 */\n style?: React.CSSProperties;\n};\n\n/** 描述文字统一样式 */\nconst descriptionStyle: React.CSSProperties = {\n color: '#999',\n fontSize: 14,\n height: 20,\n lineHeight: '20px',\n};\n\n/**\n * 空状态占位:居中展示默认图 + 描述,支持自定义图片与文案,支持 ref 透传。\n */\nconst ForwardedEmptyPlaceholder = React.forwardRef(\n ({ image, description, imageStyle = {}, style = {} }: EmptyProps, ref: ForwardedRef<HTMLDivElement>) => {\n return (\n <Flex ref={ref} style={{ padding: '80px 0', ...style }} align='center' justify='center'>\n <Empty\n image={image || EmptyImg}\n styles={{\n image: {\n height: 60,\n width: 150,\n display: 'inline-block',\n ...imageStyle,\n },\n }}\n description={\n description == null || description === '' ? (\n <span style={descriptionStyle}>暂无数据</span>\n ) : typeof description === 'string' ? (\n <span style={descriptionStyle}>{description}</span>\n ) : (\n description\n )\n }\n />\n </Flex>\n );\n },\n);\n\nForwardedEmptyPlaceholder.displayName = 'Empty';\n\nexport default ForwardedEmptyPlaceholder;\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4B;AAE5B,mBAAkB;AAClB,mBAAqB;AAiBrB,IAAM,mBAAwC;AAAA,EAC5C,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AACd;AAKA,IAAM,4BAA4B,aAAAA,QAAM;AAAA,EACtC,CAAC,EAAE,OAAO,aAAa,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAe,QAAsC;AACtG,WACE,6BAAAA,QAAA,cAAC,oBAAK,KAAU,OAAO,EAAE,SAAS,UAAU,GAAG,MAAM,GAAG,OAAM,UAAS,SAAQ,YAC7E,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,SAAS,aAAAC;AAAA,QAChB,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,SAAS;AAAA,YACT,GAAG;AAAA,UACL;AAAA,QACF;AAAA,QACA,aACE,eAAe,QAAQ,gBAAgB,KACrC,6BAAAD,QAAA,cAAC,UAAK,OAAO,oBAAkB,MAAI,IACjC,OAAO,gBAAgB,WACzB,6BAAAA,QAAA,cAAC,UAAK,OAAO,oBAAmB,WAAY,IAE5C;AAAA;AAAA,IAGN,CACF;AAAA,EAEJ;AACF;AAEA,0BAA0B,cAAc;AAExC,IAAO,gBAAQ;",
|
|
6
6
|
"names": ["React", "EmptyImg"]
|
|
7
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 Line: FC<PageTypes>;
|
|
18
|
+
export default Line;
|
|
@@ -0,0 +1,346 @@
|
|
|
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/Area.tsx
|
|
30
|
+
var Area_exports = {};
|
|
31
|
+
__export(Area_exports, {
|
|
32
|
+
default: () => Area_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(Area_exports);
|
|
35
|
+
var import_antd = require("antd");
|
|
36
|
+
var import_decimal = __toESM(require("decimal.js"));
|
|
37
|
+
var echarts = __toESM(require("echarts"));
|
|
38
|
+
var import_react = __toESM(require("react"));
|
|
39
|
+
var import_server = __toESM(require("react-dom/server"));
|
|
40
|
+
var import_constants = require("./constants");
|
|
41
|
+
var import_hooks = require("./hooks");
|
|
42
|
+
var import_index_module = __toESM(require("./index.module.less"));
|
|
43
|
+
var import_utils = require("./utils");
|
|
44
|
+
var Line = ({
|
|
45
|
+
count,
|
|
46
|
+
// 指标显示数量
|
|
47
|
+
metric,
|
|
48
|
+
// 指标
|
|
49
|
+
groupBys,
|
|
50
|
+
// 维度
|
|
51
|
+
tableData,
|
|
52
|
+
// 表格数据
|
|
53
|
+
baseData,
|
|
54
|
+
// 基础数据
|
|
55
|
+
columnConfigMap,
|
|
56
|
+
// 列配置
|
|
57
|
+
height
|
|
58
|
+
}) => {
|
|
59
|
+
const { x = [], table_head = [], table_body = [], x_field, group_by } = tableData;
|
|
60
|
+
const chartContainerRef = (0, import_react.useRef)(null);
|
|
61
|
+
const chartInstanceRef = (0, import_react.useRef)(null);
|
|
62
|
+
const index = table_head.indexOf(x_field);
|
|
63
|
+
const isTotalData = x.length === 0 && index === -1;
|
|
64
|
+
const effectiveX = isTotalData ? ["合计"] : x;
|
|
65
|
+
const fullData = (0, import_react.useMemo)(() => {
|
|
66
|
+
if (!metric || metric.length === 0) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
if (group_by && group_by.length > 0) {
|
|
70
|
+
const validGroupBys = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0);
|
|
71
|
+
const validGroupByKeys = validGroupBys.map((g) => g.key);
|
|
72
|
+
const metrics = (0, import_hooks.cartesianProduct)(metric, groupBys);
|
|
73
|
+
const chartData = [];
|
|
74
|
+
metrics.forEach((f) => {
|
|
75
|
+
const groupBysText = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0).map((g) => f[g.key]).filter((value) => value !== null && value !== "").join(",");
|
|
76
|
+
const mItem = effectiveX.map((m) => {
|
|
77
|
+
const obj = {};
|
|
78
|
+
obj[x_field] = m;
|
|
79
|
+
groupBys.forEach((g) => {
|
|
80
|
+
obj[g.key] = f[g.key];
|
|
81
|
+
});
|
|
82
|
+
const matchKeys = isTotalData ? validGroupByKeys : [x_field, ...validGroupByKeys];
|
|
83
|
+
const value = matchKeys.length > 0 ? baseData.filter((d) => matchKeys.every((key) => obj[key] === d[key])).reduce((sum, d) => sum + (Number(d[f.category]) || 0), 0) : baseData.reduce((sum, d) => sum + (Number(d[f.category]) || 0), 0);
|
|
84
|
+
obj.value = value;
|
|
85
|
+
obj.name = `${f.category}${groupBysText ? "," + groupBysText : ""}`;
|
|
86
|
+
obj.metricName = f.category;
|
|
87
|
+
obj.format = columnConfigMap[f.category];
|
|
88
|
+
obj.x = m;
|
|
89
|
+
return obj;
|
|
90
|
+
});
|
|
91
|
+
chartData.push(...mItem);
|
|
92
|
+
});
|
|
93
|
+
return chartData;
|
|
94
|
+
} else {
|
|
95
|
+
const chartData = [];
|
|
96
|
+
metric.forEach((m) => {
|
|
97
|
+
effectiveX.forEach((item) => {
|
|
98
|
+
if (isTotalData) {
|
|
99
|
+
const value = baseData.reduce((sum, d) => sum + (Number(d[m]) || 0), 0);
|
|
100
|
+
chartData.push({
|
|
101
|
+
x: item,
|
|
102
|
+
name: m,
|
|
103
|
+
metricName: m,
|
|
104
|
+
format: columnConfigMap[m],
|
|
105
|
+
value
|
|
106
|
+
});
|
|
107
|
+
} else {
|
|
108
|
+
const row = table_body.find((d) => d[index] === item);
|
|
109
|
+
const obj = {
|
|
110
|
+
x: item,
|
|
111
|
+
name: m,
|
|
112
|
+
metricName: m,
|
|
113
|
+
format: columnConfigMap[m]
|
|
114
|
+
};
|
|
115
|
+
table_head.forEach((key, i) => {
|
|
116
|
+
obj[key] = row ? row[i] : 0;
|
|
117
|
+
});
|
|
118
|
+
obj.value = obj[m];
|
|
119
|
+
chartData.push(obj);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
return chartData;
|
|
124
|
+
}
|
|
125
|
+
}, [
|
|
126
|
+
baseData,
|
|
127
|
+
metric,
|
|
128
|
+
groupBys,
|
|
129
|
+
effectiveX,
|
|
130
|
+
isTotalData,
|
|
131
|
+
index,
|
|
132
|
+
x_field,
|
|
133
|
+
table_head,
|
|
134
|
+
table_body,
|
|
135
|
+
columnConfigMap,
|
|
136
|
+
group_by,
|
|
137
|
+
x
|
|
138
|
+
]);
|
|
139
|
+
const yAxisFormatter = (0, import_react.useMemo)(() => {
|
|
140
|
+
var _a;
|
|
141
|
+
if (metric.length === 1) {
|
|
142
|
+
return (_a = columnConfigMap[metric[0]]) == null ? void 0 : _a.format;
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}, [metric, columnConfigMap]);
|
|
146
|
+
const series = (0, import_react.useMemo)(() => {
|
|
147
|
+
const first = effectiveX[0];
|
|
148
|
+
const firstData = fullData.filter((f) => f[x_field] === first);
|
|
149
|
+
firstData.sort((a, b) => b.value - a.value);
|
|
150
|
+
const sortedMetric = Array.from(new Set(firstData.map((item) => item.name)));
|
|
151
|
+
const countMetric = (firstData.length > 0 ? count ? sortedMetric.slice(0, count) : sortedMetric : metric).slice().sort((a, b) => {
|
|
152
|
+
const lowerA = (0, import_hooks.getIntervalLower)(String(a));
|
|
153
|
+
const lowerB = (0, import_hooks.getIntervalLower)(String(b));
|
|
154
|
+
if (!Number.isNaN(lowerA) && !Number.isNaN(lowerB))
|
|
155
|
+
return lowerA - lowerB;
|
|
156
|
+
return String(a).localeCompare(String(b));
|
|
157
|
+
});
|
|
158
|
+
return countMetric.map((interval) => ({
|
|
159
|
+
name: interval,
|
|
160
|
+
type: "line",
|
|
161
|
+
smooth: true,
|
|
162
|
+
stack: "Total",
|
|
163
|
+
areaStyle: {},
|
|
164
|
+
showSymbol: true,
|
|
165
|
+
symbol: "emptyCircle",
|
|
166
|
+
symbolSize: 0.8,
|
|
167
|
+
lineStyle: {
|
|
168
|
+
width: 1.5
|
|
169
|
+
},
|
|
170
|
+
emphasis: {
|
|
171
|
+
scale: 8
|
|
172
|
+
},
|
|
173
|
+
data: effectiveX.map((item) => {
|
|
174
|
+
const itemData = fullData.find((d) => d.name === interval && d.x === item);
|
|
175
|
+
return itemData ? itemData.value : 0;
|
|
176
|
+
})
|
|
177
|
+
}));
|
|
178
|
+
}, [fullData, metric, count, effectiveX, x_field]);
|
|
179
|
+
const grid = {
|
|
180
|
+
top: 10,
|
|
181
|
+
left: 0,
|
|
182
|
+
right: 10,
|
|
183
|
+
bottom: 40,
|
|
184
|
+
containLabel: true
|
|
185
|
+
};
|
|
186
|
+
const legend = {
|
|
187
|
+
bottom: 0,
|
|
188
|
+
type: "scroll",
|
|
189
|
+
itemWidth: 13,
|
|
190
|
+
itemStyle: {
|
|
191
|
+
opacity: 0
|
|
192
|
+
},
|
|
193
|
+
lineStyle: {
|
|
194
|
+
width: 2,
|
|
195
|
+
type: "solid"
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
const xAxis = {
|
|
199
|
+
type: "category",
|
|
200
|
+
data: effectiveX,
|
|
201
|
+
axisLine: {
|
|
202
|
+
lineStyle: {
|
|
203
|
+
color: "#EBEEF4"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
axisLabel: {
|
|
207
|
+
color: "#9CA4B3",
|
|
208
|
+
fontSize: 12
|
|
209
|
+
},
|
|
210
|
+
axisTick: {
|
|
211
|
+
alignWithLabel: true
|
|
212
|
+
},
|
|
213
|
+
boundaryGap: true
|
|
214
|
+
};
|
|
215
|
+
const yAxis = {
|
|
216
|
+
type: "value",
|
|
217
|
+
splitNumber: 4,
|
|
218
|
+
// 设置Y轴坐标点数量
|
|
219
|
+
axisLine: {
|
|
220
|
+
show: true,
|
|
221
|
+
lineStyle: {
|
|
222
|
+
color: "#EBEEF4",
|
|
223
|
+
shadowOffsetY: -10,
|
|
224
|
+
shadowColor: "#EBEEF4"
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
axisLabel: {
|
|
228
|
+
color: "#999999",
|
|
229
|
+
fontSize: 12,
|
|
230
|
+
formatter: (value) => {
|
|
231
|
+
if (yAxisFormatter === "percent") {
|
|
232
|
+
return new import_decimal.default(value).mul(100) + "%";
|
|
233
|
+
}
|
|
234
|
+
if (yAxisFormatter === "decimal") {
|
|
235
|
+
return (0, import_utils.formatValue)(value, yAxisFormatter);
|
|
236
|
+
}
|
|
237
|
+
const [result, unit] = (0, import_utils.formatNumber)(value, true);
|
|
238
|
+
return result + unit;
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
splitLine: {
|
|
242
|
+
lineStyle: {
|
|
243
|
+
type: [2, 3],
|
|
244
|
+
// 虚线
|
|
245
|
+
color: "#E7E7E7"
|
|
246
|
+
// 背景线颜色
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
axisTick: {
|
|
250
|
+
show: true
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
const tooltipFormatter = (params) => {
|
|
254
|
+
var _a;
|
|
255
|
+
const title = ((_a = params[0]) == null ? void 0 : _a.axisValue) ?? "";
|
|
256
|
+
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 }, params.map((m) => {
|
|
257
|
+
const metricName = m.seriesName.split(",")[0];
|
|
258
|
+
const columnConfig = columnConfigMap[metricName];
|
|
259
|
+
const format = (columnConfig == null ? void 0 : columnConfig.format) ?? "string";
|
|
260
|
+
const showValue = format === "currency" ? (0, import_utils.formatNumber)(m.value, true) : (0, import_utils.formatValue)(m.value, format);
|
|
261
|
+
const showValueText = showValue === "" || showValue[0] === "" ? "-" : showValue;
|
|
262
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.item, key: m.seriesName }, /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.point, 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));
|
|
263
|
+
})));
|
|
264
|
+
return import_server.default.renderToStaticMarkup(tooltipDom);
|
|
265
|
+
};
|
|
266
|
+
const tooltip = {
|
|
267
|
+
trigger: "axis",
|
|
268
|
+
padding: 0,
|
|
269
|
+
confine: true,
|
|
270
|
+
enterable: true,
|
|
271
|
+
axisPointer: {
|
|
272
|
+
type: "line",
|
|
273
|
+
// 设置悬浮指针为线
|
|
274
|
+
lineStyle: {
|
|
275
|
+
color: "#EBEEF4",
|
|
276
|
+
// 设置线的颜色
|
|
277
|
+
type: "dashed"
|
|
278
|
+
// 设置虚线样式
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
formatter: tooltipFormatter
|
|
282
|
+
};
|
|
283
|
+
const chartOptions = (0, import_react.useMemo)(() => {
|
|
284
|
+
return {
|
|
285
|
+
color: import_constants.chartColors,
|
|
286
|
+
grid,
|
|
287
|
+
legend: {
|
|
288
|
+
...legend,
|
|
289
|
+
itemWidth: 13,
|
|
290
|
+
itemStyle: {
|
|
291
|
+
opacity: 0
|
|
292
|
+
},
|
|
293
|
+
lineStyle: {
|
|
294
|
+
width: 2,
|
|
295
|
+
type: "solid"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
xAxis,
|
|
299
|
+
yAxis,
|
|
300
|
+
series,
|
|
301
|
+
tooltip
|
|
302
|
+
};
|
|
303
|
+
}, [series]);
|
|
304
|
+
(0, import_react.useEffect)(() => {
|
|
305
|
+
if (!chartContainerRef.current)
|
|
306
|
+
return;
|
|
307
|
+
let chart = chartInstanceRef.current;
|
|
308
|
+
if (!chart) {
|
|
309
|
+
chart = echarts.init(chartContainerRef.current);
|
|
310
|
+
chartInstanceRef.current = chart;
|
|
311
|
+
}
|
|
312
|
+
chart == null ? void 0 : chart.setOption(chartOptions, true);
|
|
313
|
+
return () => {
|
|
314
|
+
if (chartInstanceRef.current) {
|
|
315
|
+
chartInstanceRef.current.dispose();
|
|
316
|
+
chartInstanceRef.current = null;
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
}, [chartOptions]);
|
|
320
|
+
(0, import_react.useEffect)(() => {
|
|
321
|
+
const chartElement = chartContainerRef.current;
|
|
322
|
+
if (!chartElement)
|
|
323
|
+
return;
|
|
324
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
325
|
+
const chart = chartInstanceRef.current;
|
|
326
|
+
if (chart) {
|
|
327
|
+
chart.resize();
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
resizeObserver.observe(chartElement);
|
|
331
|
+
return () => {
|
|
332
|
+
resizeObserver.unobserve(chartElement);
|
|
333
|
+
resizeObserver.disconnect();
|
|
334
|
+
};
|
|
335
|
+
}, [fullData]);
|
|
336
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, fullData.length > 0 ? /* @__PURE__ */ import_react.default.createElement(
|
|
337
|
+
"div",
|
|
338
|
+
{
|
|
339
|
+
ref: chartContainerRef,
|
|
340
|
+
className: import_index_module.default.echarts,
|
|
341
|
+
style: { width: "100%", height: height || "100%", minHeight: 220 }
|
|
342
|
+
}
|
|
343
|
+
) : /* @__PURE__ */ import_react.default.createElement(import_antd.Empty, { className: import_index_module.default.empty, description: "暂无数据", image: import_antd.Empty.PRESENTED_IMAGE_SIMPLE }));
|
|
344
|
+
};
|
|
345
|
+
var Area_default = Line;
|
|
346
|
+
//# sourceMappingURL=Area.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/business/YkCharts/Area.tsx"],
|
|
4
|
+
"sourcesContent": ["import { Empty } from 'antd';\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 { cartesianProduct, getIntervalLower } from './hooks';\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 Line: FC<PageTypes> = ({\n count, // 指标显示数量\n metric, // 指标\n groupBys, // 维度\n tableData, // 表格数据\n baseData, // 基础数据\n columnConfigMap, // 列配置\n height,\n}) => {\n const { x = [], table_head = [], table_body = [], x_field, group_by } = tableData;\n const chartContainerRef = useRef<HTMLDivElement | null>(null);\n const chartInstanceRef = useRef<echarts.ECharts | null>(null);\n\n // x 为空且 x_field 不在 table_head 中时判定为合计数据,x 轴只显示「合计」\n const index = table_head.indexOf(x_field);\n const isTotalData = x.length === 0 && index === -1;\n const effectiveX = isTotalData ? ['合计'] : x;\n\n const fullData = useMemo(() => {\n if (!metric || metric.length === 0) {\n return [];\n }\n // 存在维度时的数据处理\n if (group_by && group_by.length > 0) {\n // 如果存在已选维度为空,则不显示图表\n // if (\n // Array.isArray(groupBys) &&\n // groupBys.some((g) => Array.isArray(g.selected) && g.selected.length === 0) &&\n // reportType !== 4 // 分布分析时,维度为空代表选了总体\n // ) {\n // return [];\n // }\n // selected 有值时按该维度展开;selected 为空时代表全选,该维度做累计\n const validGroupBys = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0);\n const validGroupByKeys = validGroupBys.map((g) => g.key);\n\n const metrics = cartesianProduct(metric, groupBys);\n const chartData: any[] = [];\n metrics.forEach((f) => {\n const groupBysText = groupBys\n .filter((g) => Array.isArray(g.selected) && g.selected.length > 0)\n .map((g) => f[g.key])\n .filter((value) => value !== null && value !== '')\n .join(',');\n\n const mItem = effectiveX.map((m) => {\n const obj: any = {};\n obj[x_field] = m;\n groupBys.forEach((g) => {\n obj[g.key] = f[g.key];\n });\n // 合计数据:仅按有选中的维度匹配并求和;否则按 x + 有选中的维度匹配。selected 为空的维度不参与匹配,等价于该维度做累计(总体)\n const matchKeys = isTotalData ? validGroupByKeys : [x_field, ...validGroupByKeys];\n // 当 matchKeys 为空(全部维度都是总体 / 或合计数据且无选中维度)时,直接对全表该指标求和\n const value =\n matchKeys.length > 0\n ? baseData\n .filter((d) => matchKeys.every((key) => obj[key] === d[key]))\n .reduce((sum, d) => sum + (Number(d[f.category]) || 0), 0)\n : baseData.reduce((sum, d) => sum + (Number(d[f.category]) || 0), 0);\n\n obj.value = value;\n obj.name = `${f.category}${groupBysText ? ',' + groupBysText : ''}`;\n obj.metricName = f.category;\n obj.format = columnConfigMap[f.category];\n obj.x = m;\n return obj;\n });\n chartData.push(...mItem);\n });\n return chartData;\n } else {\n const chartData: any[] = [];\n metric.forEach((m) => {\n effectiveX.forEach((item) => {\n if (isTotalData) {\n const value = baseData.reduce((sum, d) => sum + (Number(d[m]) || 0), 0);\n chartData.push({\n x: item,\n name: m,\n metricName: m,\n format: columnConfigMap[m],\n value,\n });\n } else {\n const row = table_body.find((d) => d[index] === item);\n const obj: any = {\n x: item,\n name: m,\n metricName: m,\n format: columnConfigMap[m],\n };\n table_head.forEach((key, i) => {\n obj[key] = row ? row[i] : 0;\n });\n obj.value = obj[m];\n chartData.push(obj);\n }\n });\n });\n return chartData;\n }\n }, [\n baseData,\n metric,\n groupBys,\n effectiveX,\n isTotalData,\n index,\n x_field,\n table_head,\n table_body,\n columnConfigMap,\n group_by,\n x,\n ]);\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 // 获取series\n const series = useMemo(() => {\n const first = effectiveX[0];\n const firstData = fullData.filter((f) => f[x_field] === first);\n firstData.sort((a, b) => (b.value as number) - (a.value as number));\n const sortedMetric = Array.from(new Set(firstData.map((item: RowItem) => item.name)));\n const countMetric = (firstData.length > 0 ? (count ? sortedMetric.slice(0, count) : sortedMetric) : metric)\n .slice()\n .sort((a, b) => {\n const lowerA = getIntervalLower(String(a));\n const lowerB = getIntervalLower(String(b));\n if (!Number.isNaN(lowerA) && !Number.isNaN(lowerB)) return lowerA - lowerB;\n return String(a).localeCompare(String(b));\n });\n return countMetric.map((interval) => ({\n name: interval,\n type: 'line',\n smooth: true,\n stack: 'Total',\n areaStyle: {},\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: effectiveX.map((item) => {\n const itemData = fullData.find((d) => d.name === interval && d.x === item);\n return itemData ? itemData.value : 0;\n }),\n }));\n }, [fullData, metric, count, effectiveX, x_field]);\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 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: effectiveX,\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 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}>{title}</div>\n <div className={styles.content}>\n {params.map((m: any) => {\n const metricName = m.seriesName.split(',')[0];\n const columnConfig = columnConfigMap[metricName];\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={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 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 return {\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 series,\n tooltip,\n };\n }, [series]);\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 }, [fullData]);\n\n return (\n <>\n {fullData.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 Line;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Decimal", "React", "styles", "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;
|