@liujitcn/kratos-admin-bi 0.0.0-stage → 0.1.6
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/README.md +43 -2
- package/dist/package/declarations/index.d.ts +1 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_card.d.ts +18 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_card.js +46 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_dashboard.d.ts +17 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_dashboard.js +30 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_query.d.ts +11 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_query.js +41 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_query_record.d.ts +10 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_query_record.js +14 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_source.d.ts +26 -0
- package/dist/package/declarations/src/api/bi/admin/v1/bi_source.js +46 -0
- package/dist/package/declarations/src/bi-core.d.ts +17 -0
- package/dist/package/declarations/src/bi-core.js +22 -0
- package/dist/package/declarations/src/bi-dashboard-schema.d.ts +31 -0
- package/dist/package/declarations/src/bi-dashboard-schema.js +39 -0
- package/dist/package/declarations/src/bi-messages.d.ts +247 -0
- package/dist/package/declarations/src/bi-messages.js +247 -0
- package/dist/package/declarations/src/bi-response.d.ts +10 -0
- package/dist/package/declarations/src/bi-response.js +33 -0
- package/dist/package/declarations/src/bi-vue.d.ts +10 -0
- package/dist/package/declarations/src/bi-vue.js +10 -0
- package/dist/package/declarations/src/card-schema.d.ts +30 -0
- package/dist/package/declarations/src/card-schema.js +87 -0
- package/dist/package/declarations/src/components/BiCardChartEditor.vue.d.ts +17 -0
- package/dist/package/declarations/src/components/BiCardChartEditor.vue.js +527 -0
- package/dist/package/declarations/src/components/BiCardFormDialog.vue.d.ts +20 -0
- package/dist/package/declarations/src/components/BiCardFormDialog.vue.js +495 -0
- package/dist/package/declarations/src/components/BiCardLibrary.vue.d.ts +3 -0
- package/dist/package/declarations/src/components/BiCardLibrary.vue.js +807 -0
- package/dist/package/declarations/src/components/BiCardVisualization.vue.d.ts +10 -0
- package/dist/package/declarations/src/components/BiCardVisualization.vue.js +97 -0
- package/dist/package/declarations/src/components/BiChart.vue.d.ts +20 -0
- package/dist/package/declarations/src/components/BiChart.vue.js +112 -0
- package/dist/package/declarations/src/components/BiDashboard.vue.d.ts +9 -0
- package/dist/package/declarations/src/components/BiDashboard.vue.js +81 -0
- package/dist/package/declarations/src/components/BiDashboardMenuDialog.vue.d.ts +12 -0
- package/dist/package/declarations/src/components/BiDashboardMenuDialog.vue.js +252 -0
- package/dist/package/declarations/src/components/BiDataCard.vue.d.ts +36 -0
- package/dist/package/declarations/src/components/BiDataCard.vue.js +372 -0
- package/dist/package/declarations/src/components/BiDesigner.vue.d.ts +17 -0
- package/dist/package/declarations/src/components/BiDesigner.vue.js +666 -0
- package/dist/package/declarations/src/components/BiSourceModelDialog.vue.d.ts +17 -0
- package/dist/package/declarations/src/components/BiSourceModelDialog.vue.js +2118 -0
- package/dist/package/declarations/src/components/BiWorkbenchPreview.vue.d.ts +7 -0
- package/dist/package/declarations/src/components/BiWorkbenchPreview.vue.js +176 -0
- package/dist/package/declarations/src/components/source-model-layout.d.ts +3 -0
- package/dist/package/declarations/src/components/source-model-layout.js +66 -0
- package/dist/package/declarations/src/dataset/index.d.ts +7 -0
- package/dist/package/declarations/src/dataset/index.js +25 -0
- package/dist/package/declarations/src/dataset/labels.d.ts +2 -0
- package/dist/package/declarations/src/dataset/labels.js +21 -0
- package/dist/package/declarations/src/dataset/transform.d.ts +20 -0
- package/dist/package/declarations/src/dataset/transform.js +173 -0
- package/dist/package/declarations/src/engine/chart-types.d.ts +14 -0
- package/dist/package/declarations/src/engine/chart-types.js +37 -0
- package/dist/package/declarations/src/engine/echarts.d.ts +16 -0
- package/dist/package/declarations/src/engine/echarts.js +491 -0
- package/dist/package/declarations/src/engine/types.d.ts +36 -0
- package/dist/package/declarations/src/engine/types.js +20 -0
- package/dist/package/declarations/src/env.d.ts +17 -0
- package/dist/package/declarations/src/env.js +67 -0
- package/dist/package/declarations/src/index.d.ts +1 -0
- package/dist/package/declarations/src/index.js +1 -0
- package/dist/package/declarations/src/locales/en-US.json +254 -0
- package/dist/package/declarations/src/locales/generated.d.ts +1021 -0
- package/dist/package/declarations/src/locales/generated.js +13 -0
- package/dist/package/declarations/src/locales/ja-JP.json +254 -0
- package/dist/package/declarations/src/locales/zh-CN.json +254 -0
- package/dist/package/declarations/src/locales/zh-TW.json +254 -0
- package/dist/package/declarations/src/module.d.ts +2 -0
- package/dist/package/declarations/src/module.js +9 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_card.d.ts +145 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_card.js +6 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_dashboard.d.ts +107 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_dashboard.js +6 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query.d.ts +157 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query.js +6 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query_record.d.ts +83 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query_record.js +15 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_source.d.ts +301 -0
- package/dist/package/declarations/src/rpc/bi/admin/v1/bi_source.js +6 -0
- package/dist/package/declarations/src/rpc/common/v1/types.d.ts +60 -0
- package/dist/package/declarations/src/rpc/common/v1/types.js +6 -0
- package/dist/package/declarations/src/schema/layout.d.ts +7 -0
- package/dist/package/declarations/src/schema/layout.js +52 -0
- package/dist/package/declarations/src/schema/types.d.ts +83 -0
- package/dist/package/declarations/src/schema/types.js +1 -0
- package/dist/package/declarations/src/theme/index.d.ts +29 -0
- package/dist/package/declarations/src/theme/index.js +83 -0
- package/dist/package/declarations/src/theme/palettes.d.ts +7 -0
- package/dist/package/declarations/src/theme/palettes.js +28 -0
- package/dist/package/declarations/src/theme/presets.d.ts +73 -0
- package/dist/package/declarations/src/theme/presets.js +235 -0
- package/dist/package/declarations/src/views/card/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/card/index.vue.js +18 -0
- package/dist/package/declarations/src/views/dashboard/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/dashboard/index.vue.js +107 -0
- package/dist/package/declarations/src/views/designer/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/designer/index.vue.js +332 -0
- package/dist/package/declarations/src/views/manage/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/manage/index.vue.js +325 -0
- package/dist/package/declarations/src/views/query/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/query/index.vue.js +876 -0
- package/dist/package/declarations/src/views/source/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/source/index.vue.js +343 -0
- package/dist/package/declarations/src/views/workbench/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/workbench/index.vue.js +362 -0
- package/dist/package/src/api/bi/admin/v1/bi_card.ts +67 -0
- package/dist/package/src/api/bi/admin/v1/bi_dashboard.ts +51 -0
- package/dist/package/src/api/bi/admin/v1/bi_query.ts +55 -0
- package/dist/package/src/api/bi/admin/v1/bi_query_record.ts +25 -0
- package/dist/package/src/api/bi/admin/v1/bi_source.ts +80 -0
- package/dist/package/src/bi-core.ts +43 -0
- package/dist/package/src/bi-dashboard-schema.ts +69 -0
- package/dist/package/src/bi-messages.ts +249 -0
- package/dist/package/src/bi-response.ts +39 -0
- package/dist/package/src/bi-vue.ts +13 -0
- package/dist/package/src/card-schema.ts +111 -0
- package/dist/package/src/components/BiCardChartEditor.vue +139 -0
- package/dist/package/src/components/BiCardFormDialog.vue +289 -0
- package/dist/package/src/components/BiCardLibrary.vue +310 -0
- package/dist/package/src/components/BiCardVisualization.vue +95 -0
- package/dist/package/src/components/BiChart.vue +134 -0
- package/dist/package/src/components/BiDashboard.vue +53 -0
- package/dist/package/src/components/BiDashboardMenuDialog.vue +177 -0
- package/dist/package/src/components/BiDataCard.vue +231 -0
- package/dist/package/src/components/BiDesigner.vue +287 -0
- package/dist/package/src/components/BiSourceModelDialog.vue +846 -0
- package/dist/package/src/components/BiWorkbenchPreview.vue +131 -0
- package/dist/package/src/components/source-model-layout.ts +62 -0
- package/dist/package/src/dataset/index.ts +28 -0
- package/dist/package/src/dataset/labels.ts +19 -0
- package/dist/package/src/dataset/transform.ts +189 -0
- package/dist/package/src/engine/chart-types.ts +44 -0
- package/dist/package/src/engine/echarts.ts +568 -0
- package/dist/package/src/engine/types.ts +60 -0
- package/dist/package/src/env.ts +82 -0
- package/dist/package/src/index.ts +1 -0
- package/dist/package/src/locales/en-US.json +254 -0
- package/dist/package/src/locales/generated.ts +16 -0
- package/dist/package/src/locales/ja-JP.json +254 -0
- package/dist/package/src/locales/zh-CN.json +254 -0
- package/dist/package/src/locales/zh-TW.json +254 -0
- package/dist/package/src/module.ts +12 -0
- package/dist/package/src/rpc/bi/admin/v1/bi_card.ts +169 -0
- package/dist/package/src/rpc/bi/admin/v1/bi_dashboard.ts +126 -0
- package/dist/package/src/rpc/bi/admin/v1/bi_query.ts +187 -0
- package/dist/package/src/rpc/bi/admin/v1/bi_query_record.ts +98 -0
- package/dist/package/src/rpc/bi/admin/v1/bi_source.ts +338 -0
- package/dist/package/src/rpc/common/v1/types.ts +77 -0
- package/dist/package/src/schema/layout.ts +54 -0
- package/dist/package/src/schema/types.ts +103 -0
- package/dist/package/src/styles.scss +1 -0
- package/dist/package/src/theme/index.ts +108 -0
- package/dist/package/src/theme/palettes.ts +34 -0
- package/dist/package/src/theme/presets.ts +278 -0
- package/dist/package/src/views/card/index.vue +5 -0
- package/dist/package/src/views/dashboard/index.vue +58 -0
- package/dist/package/src/views/designer/index.vue +164 -0
- package/dist/package/src/views/manage/index.vue +276 -0
- package/dist/package/src/views/query/index.vue +593 -0
- package/dist/package/src/views/source/index.vue +214 -0
- package/dist/package/src/views/workbench/index.vue +208 -0
- package/package.json +67 -3
- package/tsconfig.json +12 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 命名色盘(style.palette 消费;缺省走主题色盘)。
|
|
3
|
+
*/
|
|
4
|
+
import type { BiResolvedTheme } from "./index";
|
|
5
|
+
|
|
6
|
+
export const BI_PALETTES: Record<string, string[]> = {
|
|
7
|
+
default: [
|
|
8
|
+
"#409eff", "#67c23a", "#e6a23c", "#f56c6c", "#909399",
|
|
9
|
+
"#36cfc9", "#722ed1", "#fa8c16", "#13c2c2", "#eb2f96",
|
|
10
|
+
],
|
|
11
|
+
ocean: [
|
|
12
|
+
"#1976d2", "#26a69a", "#42a5f5", "#26c6da", "#5c6bc0",
|
|
13
|
+
"#00acc1", "#7e57c2", "#0288d1", "#66bb6a", "#455a64",
|
|
14
|
+
],
|
|
15
|
+
sunset: [
|
|
16
|
+
"#f56c6c", "#e6a23c", "#fa8c16", "#d4380d", "#ff7a45",
|
|
17
|
+
"#c41d7f", "#eb2f96", "#faad14", "#f759ab", "#ad6800",
|
|
18
|
+
],
|
|
19
|
+
forest: [
|
|
20
|
+
"#67c23a", "#389e0d", "#13c2c2", "#52c41a", "#08979c",
|
|
21
|
+
"#237804", "#36cfc9", "#5b8c00", "#006d75", "#91d300",
|
|
22
|
+
],
|
|
23
|
+
mono: [
|
|
24
|
+
"#5b6470", "#78828e", "#98a1ab", "#3e454f", "#b9bfc7",
|
|
25
|
+
"#6f7885", "#8d95a0", "#4a525c", "#c8ccd3", "#5b6470",
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export function resolvePalette(key: string | undefined, theme: BiResolvedTheme): string[] {
|
|
30
|
+
if (key && BI_PALETTES[key]) return BI_PALETTES[key];
|
|
31
|
+
return theme.palette;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const BI_PALETTE_KEYS = Object.keys(BI_PALETTES);
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 仪表盘主题预设(大屏主题库):
|
|
3
|
+
* - 空键 / "auto":跟随宿主亮暗(现状行为)
|
|
4
|
+
* - 具名预设:把图表配色模式与卡片/画布外观"钉死"——宿主无论亮暗,
|
|
5
|
+
* 仪表盘都按预设渲染(大屏的核心诉求)。
|
|
6
|
+
* 卡片外观经 CSS 变量 --bi-card-* 下发,两端渲染器同链消费。
|
|
7
|
+
*
|
|
8
|
+
* 结构化 colors 字段与语义色常量合流自 go-wind-iot 大屏(screens/theme.ts):
|
|
9
|
+
* 主题只作用于舞台配色;语义色(告警红绿/严重级别)不随主题,跨主题语义稳定。
|
|
10
|
+
* schemaJson.theme 持久化完整对象时经 resolveScreenThemeColors 宽松解析:
|
|
11
|
+
* 未知 key / 缺字段逐项回退到预设基线。
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { BiResolvedTheme } from "./index";
|
|
15
|
+
import { resolveTheme } from "./index";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 结构化舞台色板(iot ScreenThemeColors 同形):
|
|
19
|
+
* axis/legend 供图表轴与图例;accent 为高亮色;text 为主文本。
|
|
20
|
+
*/
|
|
21
|
+
export interface BiStageColors {
|
|
22
|
+
bg: string;
|
|
23
|
+
panelBg: string;
|
|
24
|
+
panelBorder: string;
|
|
25
|
+
accent: string;
|
|
26
|
+
axis: string;
|
|
27
|
+
legend: string;
|
|
28
|
+
text: string;
|
|
29
|
+
series: string[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface BiDashboardThemePreset {
|
|
33
|
+
key: string;
|
|
34
|
+
/** 中文名(设计器下拉展示) */
|
|
35
|
+
name: string;
|
|
36
|
+
nameEn: string;
|
|
37
|
+
/** 图表色彩模式:预设钉死,不再跟随宿主亮暗 */
|
|
38
|
+
mode: "light" | "dark";
|
|
39
|
+
palette?: string[];
|
|
40
|
+
/** 仪表盘画布底色 */
|
|
41
|
+
canvasBg?: string;
|
|
42
|
+
cardBg?: string;
|
|
43
|
+
cardBorder?: string;
|
|
44
|
+
cardTitle?: string;
|
|
45
|
+
/** 结构化舞台色板(合流自 iot;轴/图例/强调色等图表细节) */
|
|
46
|
+
colors?: BiStageColors;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const BI_DASHBOARD_THEMES: Record<string, BiDashboardThemePreset> = {
|
|
50
|
+
"tech-blue": {
|
|
51
|
+
key: "tech-blue",
|
|
52
|
+
name: "科技蓝·大屏",
|
|
53
|
+
nameEn: "Tech Blue",
|
|
54
|
+
mode: "dark",
|
|
55
|
+
palette: [
|
|
56
|
+
"#3ea6ff", "#00e0c6", "#7c8cff", "#ffd166", "#ff6b8a",
|
|
57
|
+
"#00b8d9", "#9d7bff", "#38d982", "#ff9f43", "#5ad8f0",
|
|
58
|
+
],
|
|
59
|
+
canvasBg: "#050e1f",
|
|
60
|
+
cardBg: "rgba(10, 28, 58, 0.88)",
|
|
61
|
+
cardBorder: "rgba(64, 169, 255, 0.38)",
|
|
62
|
+
cardTitle: "#d6f0ff",
|
|
63
|
+
colors: {
|
|
64
|
+
bg: "#050e1f",
|
|
65
|
+
panelBg: "rgba(10, 28, 58, 0.88)",
|
|
66
|
+
panelBorder: "rgba(64, 169, 255, 0.38)",
|
|
67
|
+
accent: "#3ea6ff",
|
|
68
|
+
axis: "#7fa8cf",
|
|
69
|
+
legend: "#9fd8ff",
|
|
70
|
+
text: "#d6f0ff",
|
|
71
|
+
series: ["#3ea6ff", "#00e0c6", "#7c8cff", "#ffd166", "#ff6b8a", "#00b8d9", "#9d7bff", "#38d982"],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
ocean: {
|
|
75
|
+
key: "ocean",
|
|
76
|
+
name: "深海蓝·大屏",
|
|
77
|
+
nameEn: "Ocean",
|
|
78
|
+
mode: "dark",
|
|
79
|
+
palette: ["#00fdfa", "#07f7a8", "#e3b337", "#f5023d", "#0072ff", "#ff7a45", "#8fc3f5", "#b37feb", "#36cfc9", "#5ad8f0"],
|
|
80
|
+
canvasBg: "#0a1628",
|
|
81
|
+
cardBg: "rgba(8, 35, 63, 0.65)",
|
|
82
|
+
cardBorder: "rgba(0, 168, 255, 0.35)",
|
|
83
|
+
cardTitle: "#cfe6ff",
|
|
84
|
+
colors: {
|
|
85
|
+
bg: "#0a1628",
|
|
86
|
+
panelBg: "rgba(8, 35, 63, 0.65)",
|
|
87
|
+
panelBorder: "rgba(0, 168, 255, 0.35)",
|
|
88
|
+
accent: "#00fdfa",
|
|
89
|
+
axis: "#7fa8cf",
|
|
90
|
+
legend: "#9fd8ff",
|
|
91
|
+
text: "#cfe6ff",
|
|
92
|
+
series: ["#00fdfa", "#07f7a8", "#e3b337", "#f5023d", "#0072ff", "#ff7a45", "#8fc3f5", "#b37feb"],
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
forest: {
|
|
96
|
+
key: "forest",
|
|
97
|
+
name: "森林绿·大屏",
|
|
98
|
+
nameEn: "Forest",
|
|
99
|
+
mode: "dark",
|
|
100
|
+
palette: ["#07f7a8", "#00fdfa", "#e3b337", "#f5023d", "#2f9e44", "#94d82d", "#66d9e8", "#b37feb", "#38d982", "#13c2c2"],
|
|
101
|
+
canvasBg: "#071a12",
|
|
102
|
+
cardBg: "rgba(10, 51, 32, 0.65)",
|
|
103
|
+
cardBorder: "rgba(7, 247, 168, 0.35)",
|
|
104
|
+
cardTitle: "#d0f5e4",
|
|
105
|
+
colors: {
|
|
106
|
+
bg: "#071a12",
|
|
107
|
+
panelBg: "rgba(10, 51, 32, 0.65)",
|
|
108
|
+
panelBorder: "rgba(7, 247, 168, 0.35)",
|
|
109
|
+
accent: "#07f7a8",
|
|
110
|
+
axis: "#7fcfa8",
|
|
111
|
+
legend: "#a8f0d0",
|
|
112
|
+
text: "#d0f5e4",
|
|
113
|
+
series: ["#07f7a8", "#00fdfa", "#e3b337", "#f5023d", "#2f9e44", "#94d82d", "#66d9e8", "#b37feb"],
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
purple: {
|
|
117
|
+
key: "purple",
|
|
118
|
+
name: "星云紫·大屏",
|
|
119
|
+
nameEn: "Nebula Purple",
|
|
120
|
+
mode: "dark",
|
|
121
|
+
palette: ["#b37feb", "#8c9eff", "#f78fb3", "#ffd166", "#00fdfa", "#07f7a8", "#ff7a45", "#8fc3f5", "#722ed1", "#9d7bff"],
|
|
122
|
+
canvasBg: "#170f2b",
|
|
123
|
+
cardBg: "rgba(42, 27, 74, 0.65)",
|
|
124
|
+
cardBorder: "rgba(179, 127, 235, 0.35)",
|
|
125
|
+
cardTitle: "#e4d9f7",
|
|
126
|
+
colors: {
|
|
127
|
+
bg: "#170f2b",
|
|
128
|
+
panelBg: "rgba(42, 27, 74, 0.65)",
|
|
129
|
+
panelBorder: "rgba(179, 127, 235, 0.35)",
|
|
130
|
+
accent: "#b37feb",
|
|
131
|
+
axis: "#a08cc8",
|
|
132
|
+
legend: "#cbb8ee",
|
|
133
|
+
text: "#e4d9f7",
|
|
134
|
+
series: ["#b37feb", "#8c9eff", "#f78fb3", "#ffd166", "#00fdfa", "#07f7a8", "#ff7a45", "#8fc3f5"],
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
dawn: {
|
|
138
|
+
key: "dawn",
|
|
139
|
+
name: "暮光橙·大屏",
|
|
140
|
+
nameEn: "Dawn",
|
|
141
|
+
mode: "dark",
|
|
142
|
+
palette: ["#ffb14d", "#ff7a45", "#f5023d", "#e3b337", "#07f7a8", "#00fdfa", "#8fc3f5", "#b37feb", "#fa8c16", "#eb2f96"],
|
|
143
|
+
canvasBg: "#1f1410",
|
|
144
|
+
cardBg: "rgba(66, 40, 24, 0.65)",
|
|
145
|
+
cardBorder: "rgba(255, 177, 77, 0.35)",
|
|
146
|
+
cardTitle: "#f7e8d8",
|
|
147
|
+
colors: {
|
|
148
|
+
bg: "#1f1410",
|
|
149
|
+
panelBg: "rgba(66, 40, 24, 0.65)",
|
|
150
|
+
panelBorder: "rgba(255, 177, 77, 0.35)",
|
|
151
|
+
accent: "#ffb14d",
|
|
152
|
+
axis: "#cfa88a",
|
|
153
|
+
legend: "#f0d4b8",
|
|
154
|
+
text: "#f7e8d8",
|
|
155
|
+
series: ["#ffb14d", "#ff7a45", "#f5023d", "#e3b337", "#07f7a8", "#00fdfa", "#8fc3f5", "#b37feb"],
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
"midnight-violet": {
|
|
159
|
+
key: "midnight-violet",
|
|
160
|
+
name: "午夜紫·大屏",
|
|
161
|
+
nameEn: "Midnight Violet",
|
|
162
|
+
mode: "dark",
|
|
163
|
+
palette: [
|
|
164
|
+
"#9d7bff", "#ff6b8a", "#5ad8f0", "#ffd166", "#7cf29c",
|
|
165
|
+
"#c77dff", "#4cc9f0", "#ff9e6d", "#b892ff", "#6ef3d6",
|
|
166
|
+
],
|
|
167
|
+
canvasBg: "#0d0821",
|
|
168
|
+
cardBg: "rgba(30, 21, 66, 0.88)",
|
|
169
|
+
cardBorder: "rgba(157, 123, 255, 0.4)",
|
|
170
|
+
cardTitle: "#e8deff",
|
|
171
|
+
},
|
|
172
|
+
"aurora-teal": {
|
|
173
|
+
key: "aurora-teal",
|
|
174
|
+
name: "极光青·大屏",
|
|
175
|
+
nameEn: "Aurora Teal",
|
|
176
|
+
mode: "dark",
|
|
177
|
+
palette: [
|
|
178
|
+
"#00e0c6", "#38d982", "#4cc9f0", "#a7f3d0", "#ffd166",
|
|
179
|
+
"#059fb0", "#7cf29c", "#36cfc9", "#94e3ff", "#2b9348",
|
|
180
|
+
],
|
|
181
|
+
canvasBg: "#041f1e",
|
|
182
|
+
cardBg: "rgba(6, 51, 48, 0.88)",
|
|
183
|
+
cardBorder: "rgba(0, 224, 198, 0.35)",
|
|
184
|
+
cardTitle: "#d0fff8",
|
|
185
|
+
},
|
|
186
|
+
graphite: {
|
|
187
|
+
key: "graphite",
|
|
188
|
+
name: "石墨灰·大屏",
|
|
189
|
+
nameEn: "Graphite",
|
|
190
|
+
mode: "dark",
|
|
191
|
+
palette: [
|
|
192
|
+
"#8ab4f8", "#a8adb8", "#c7ccd6", "#6f7885", "#dfe3e8",
|
|
193
|
+
"#5f8dd3", "#98a1ab", "#b0b8c2", "#7d8590", "#9aa5b1",
|
|
194
|
+
],
|
|
195
|
+
canvasBg: "#111318",
|
|
196
|
+
cardBg: "rgba(26, 29, 36, 0.9)",
|
|
197
|
+
cardBorder: "rgba(200, 204, 211, 0.22)",
|
|
198
|
+
cardTitle: "#e8eaed",
|
|
199
|
+
},
|
|
200
|
+
paper: {
|
|
201
|
+
key: "paper",
|
|
202
|
+
name: "清晨·浅色",
|
|
203
|
+
nameEn: "Morning Paper",
|
|
204
|
+
mode: "light",
|
|
205
|
+
palette: [
|
|
206
|
+
"#409eff", "#67c23a", "#e6a23c", "#f56c6c", "#909399",
|
|
207
|
+
"#36cfc9", "#722ed1", "#fa8c16", "#13c2c2", "#eb2f96",
|
|
208
|
+
],
|
|
209
|
+
canvasBg: "#eef2f7",
|
|
210
|
+
cardBg: "#ffffff",
|
|
211
|
+
cardBorder: "#e4e9f0",
|
|
212
|
+
cardTitle: "#1f2937",
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
export const BI_THEME_PRESET_KEYS = Object.keys(BI_DASHBOARD_THEMES);
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* 语义色:不随主题翻转(告警红绿 / 严重级别跨主题语义稳定)。
|
|
220
|
+
* 图表/组件渲染"状态语义"时用这组,配色仍走主题色盘。
|
|
221
|
+
*/
|
|
222
|
+
export const BI_SEMANTIC_COLORS = {
|
|
223
|
+
danger: "#f5023d",
|
|
224
|
+
warning: "#e3b337",
|
|
225
|
+
success: "#07f7a8",
|
|
226
|
+
info: "#0072ff",
|
|
227
|
+
offline: "#5f88b0",
|
|
228
|
+
} as const;
|
|
229
|
+
|
|
230
|
+
export function getDashboardThemePreset(key: string | undefined): BiDashboardThemePreset | null {
|
|
231
|
+
if (!key || key === "auto") return null;
|
|
232
|
+
return BI_DASHBOARD_THEMES[key] ?? null;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* 舞台色板宽松解析(iot resolveTheme 同语义):
|
|
237
|
+
* 传入 { key, ...部分颜色覆盖 },未知 key / 缺字段逐项回退预设基线;
|
|
238
|
+
* series 数组不足 4 色也回退。无主题返回 null(走宿主亮暗链)。
|
|
239
|
+
*/
|
|
240
|
+
export function resolveStageColors(
|
|
241
|
+
theme?: ({ key?: string } & Partial<BiStageColors>) | null
|
|
242
|
+
): BiStageColors | null {
|
|
243
|
+
const base = getDashboardThemePreset(theme?.key)?.colors;
|
|
244
|
+
if (!base) {
|
|
245
|
+
// 无结构化基线的预设(或 auto):不给舞台色板,走变量链
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
if (!theme) return base;
|
|
249
|
+
return {
|
|
250
|
+
bg: theme.bg || base.bg,
|
|
251
|
+
panelBg: theme.panelBg || base.panelBg,
|
|
252
|
+
panelBorder: theme.panelBorder || base.panelBorder,
|
|
253
|
+
accent: theme.accent || base.accent,
|
|
254
|
+
axis: theme.axis || base.axis,
|
|
255
|
+
legend: theme.legend || base.legend,
|
|
256
|
+
text: theme.text || base.text,
|
|
257
|
+
series: Array.isArray(theme.series) && theme.series.length >= 4 ? theme.series : base.series,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* 解析生效主题:具名预设以 mode/palette 钉死图表主题;
|
|
263
|
+
* 无预设回落亮暗自动(现状行为)。
|
|
264
|
+
*/
|
|
265
|
+
export function resolveDashboardTheme(
|
|
266
|
+
key: string | undefined,
|
|
267
|
+
autoIsDark: boolean
|
|
268
|
+
): { theme: BiResolvedTheme; preset: BiDashboardThemePreset | null } {
|
|
269
|
+
const preset = getDashboardThemePreset(key);
|
|
270
|
+
if (!preset) {
|
|
271
|
+
return { theme: resolveTheme(autoIsDark ? "dark" : "light"), preset: null };
|
|
272
|
+
}
|
|
273
|
+
const base = resolveTheme(preset.mode);
|
|
274
|
+
return {
|
|
275
|
+
theme: preset.palette ? { ...base, palette: preset.palette } : base,
|
|
276
|
+
preset,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<main class="bi-dashboard-page">
|
|
3
|
+
<el-alert v-if="error" :title="error" type="error" show-icon :closable="false" /><el-skeleton
|
|
4
|
+
v-else-if="loading"
|
|
5
|
+
:rows="8"
|
|
6
|
+
animated
|
|
7
|
+
/><BiDashboard v-else :schema="layout" :results="results" />
|
|
8
|
+
</main>
|
|
9
|
+
</template>
|
|
10
|
+
<script setup lang="ts">
|
|
11
|
+
import { computed, ref, watch, onBeforeUnmount } from "vue";
|
|
12
|
+
import { useRoute } from "vue-router";
|
|
13
|
+
import { t } from "@liujitcn/kratos-admin-core";
|
|
14
|
+
import BiDashboard from "../../components/BiDashboard.vue";
|
|
15
|
+
import { parseDashboardLayout, dashboardResults } from "../../bi-dashboard-schema";
|
|
16
|
+
import type { DashboardLayout } from "../../bi-dashboard-schema";
|
|
17
|
+
import type { BiQueryResult } from "../../rpc/bi/admin/v1/bi_query";
|
|
18
|
+
import { defBiDashboardService } from "../../api/bi/admin/v1/bi_dashboard";
|
|
19
|
+
defineOptions({ name: "BiDashboard", inheritAttrs: false });
|
|
20
|
+
const route = useRoute();
|
|
21
|
+
const id = computed(() => {
|
|
22
|
+
return Number(route.params.id || route.path.match(/^\/reports\/dashboard\/([1-9]\d*)$/)?.[1] || 0);
|
|
23
|
+
});
|
|
24
|
+
const layout = ref<DashboardLayout>({ schemaVersion: 3, name: "", cards: [] });
|
|
25
|
+
const results = ref(new Map<string, BiQueryResult | undefined>());
|
|
26
|
+
const loading = ref(false),
|
|
27
|
+
error = ref("");
|
|
28
|
+
let request = 0;
|
|
29
|
+
/** 从地址路径读取仪表盘编号,忽略切换页面前的迟到结果。 */
|
|
30
|
+
async function load() {
|
|
31
|
+
const current = ++request;
|
|
32
|
+
error.value = "";
|
|
33
|
+
results.value = new Map();
|
|
34
|
+
layout.value = { schemaVersion: 3, name: "", cards: [] };
|
|
35
|
+
if (!Number.isSafeInteger(id.value) || id.value <= 0) {
|
|
36
|
+
error.value = t("bi.dashboard.invalid_id");
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
loading.value = true;
|
|
40
|
+
try {
|
|
41
|
+
const result = await defBiDashboardService.GetBiDashboardData({ id: id.value, version: 0 });
|
|
42
|
+
if (current !== request) return;
|
|
43
|
+
layout.value = parseDashboardLayout(result.schema_json);
|
|
44
|
+
results.value = dashboardResults(result);
|
|
45
|
+
} catch (cause) {
|
|
46
|
+
if (current === request) error.value = cause instanceof Error ? cause.message : t("bi.query.error");
|
|
47
|
+
} finally {
|
|
48
|
+
if (current === request) loading.value = false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
watch(id, () => void load(), { immediate: true });
|
|
52
|
+
onBeforeUnmount(() => request++);
|
|
53
|
+
</script>
|
|
54
|
+
<style scoped>
|
|
55
|
+
.bi-dashboard-page {
|
|
56
|
+
min-width: 0;
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<main class="bi-designer-page">
|
|
3
|
+
<el-card class="admin-page-card bi-designer-page__toolbar" shadow="never">
|
|
4
|
+
<header>
|
|
5
|
+
<h2>{{ dashboard?.name || t("bi.dashboard.edit") }}</h2>
|
|
6
|
+
<div>
|
|
7
|
+
<el-button :icon="icons.ArrowLeft" @click="router.push('/bi/manage')">{{ t("common.action.back") }}</el-button
|
|
8
|
+
><el-button :icon="icons.Document" :loading="saving" :disabled="!dashboard" @click="save(false)">{{
|
|
9
|
+
t("bi.dashboard.save")
|
|
10
|
+
}}</el-button
|
|
11
|
+
><el-button
|
|
12
|
+
:icon="icons.Promotion"
|
|
13
|
+
type="primary"
|
|
14
|
+
:loading="saving"
|
|
15
|
+
:disabled="!layout.cards.length"
|
|
16
|
+
@click="save(true)"
|
|
17
|
+
>{{ t("bi.dashboard.publish") }}</el-button
|
|
18
|
+
>
|
|
19
|
+
</div>
|
|
20
|
+
</header>
|
|
21
|
+
</el-card>
|
|
22
|
+
<el-skeleton v-if="loading" :rows="6" animated /><el-alert
|
|
23
|
+
v-else-if="!dashboard"
|
|
24
|
+
:title="t('bi.dashboard.select_first')"
|
|
25
|
+
type="info"
|
|
26
|
+
show-icon
|
|
27
|
+
/><BiDesigner v-else v-model="layout" :cards="cards" @edit-card="editCard" @create-card="editCard()" /><BiCardFormDialog
|
|
28
|
+
v-model="cardOpen"
|
|
29
|
+
:sources="sources"
|
|
30
|
+
:card="editingCard"
|
|
31
|
+
@saved="loadCards"
|
|
32
|
+
/>
|
|
33
|
+
</main>
|
|
34
|
+
</template>
|
|
35
|
+
<script setup lang="ts">
|
|
36
|
+
import { computed, ref, watch } from "vue";
|
|
37
|
+
import { useRoute, useRouter } from "vue-router";
|
|
38
|
+
import { t } from "@liujitcn/kratos-admin-core";
|
|
39
|
+
import BiDesigner from "../../components/BiDesigner.vue";
|
|
40
|
+
import BiCardFormDialog from "../../components/BiCardFormDialog.vue";
|
|
41
|
+
import { parseDashboardLayout } from "../../bi-dashboard-schema";
|
|
42
|
+
import type { DashboardLayout } from "../../bi-dashboard-schema";
|
|
43
|
+
import type { BiCard } from "../../rpc/bi/admin/v1/bi_card";
|
|
44
|
+
import type { BiDashboard } from "../../rpc/bi/admin/v1/bi_dashboard";
|
|
45
|
+
import type { BiSourceDescriptor } from "../../rpc/bi/admin/v1/bi_query";
|
|
46
|
+
import { defBiDashboardService } from "../../api/bi/admin/v1/bi_dashboard";
|
|
47
|
+
import { defBiCardService } from "../../api/bi/admin/v1/bi_card";
|
|
48
|
+
import { defBiQueryService } from "../../api/bi/admin/v1/bi_query";
|
|
49
|
+
defineOptions({ name: "BiDesignerPage", inheritAttrs: false });
|
|
50
|
+
const icons = { ArrowLeft, Document, Promotion };
|
|
51
|
+
const route = useRoute(),
|
|
52
|
+
router = useRouter(),
|
|
53
|
+
id = computed(() => Number(route.query.id || 0));
|
|
54
|
+
const dashboard = ref<BiDashboard>(),
|
|
55
|
+
cards = ref<BiCard[]>([]),
|
|
56
|
+
sources = ref<BiSourceDescriptor[]>([]),
|
|
57
|
+
layout = ref<DashboardLayout>({ schemaVersion: 3, name: "", cards: [] });
|
|
58
|
+
const loading = ref(false),
|
|
59
|
+
saving = ref(false),
|
|
60
|
+
cardOpen = ref(false),
|
|
61
|
+
editingCard = ref<BiCard>();
|
|
62
|
+
let request = 0;
|
|
63
|
+
/** 编辑入口按仪表盘编号切换,卡片来自当前用户可见的统一卡片库。 */
|
|
64
|
+
async function load() {
|
|
65
|
+
const current = ++request;
|
|
66
|
+
dashboard.value = undefined;
|
|
67
|
+
if (!id.value) return;
|
|
68
|
+
loading.value = true;
|
|
69
|
+
try {
|
|
70
|
+
const [record, dictionary] = await Promise.all([
|
|
71
|
+
defBiDashboardService.GetBiDashboard({ id: id.value }),
|
|
72
|
+
defBiQueryService.ListBiSources({})
|
|
73
|
+
]);
|
|
74
|
+
if (current !== request) return;
|
|
75
|
+
if (!record.can_edit) throw new Error(t("bi.dashboard.read_only"));
|
|
76
|
+
dashboard.value = record;
|
|
77
|
+
layout.value = { ...parseDashboardLayout(record.schema_json), name: record.name };
|
|
78
|
+
sources.value = dictionary.sources;
|
|
79
|
+
await loadCards();
|
|
80
|
+
} catch (cause) {
|
|
81
|
+
ElMessage.error(cause instanceof Error ? cause.message : t("bi.query.error"));
|
|
82
|
+
} finally {
|
|
83
|
+
if (current === request) loading.value = false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** 分页加载可见卡片,避免设计器只能使用第一页的图表。 */
|
|
87
|
+
async function loadCards() {
|
|
88
|
+
const result: BiCard[] = [];
|
|
89
|
+
let page = 1;
|
|
90
|
+
while (true) {
|
|
91
|
+
const data = await defBiCardService.PageBiCard({
|
|
92
|
+
name: "",
|
|
93
|
+
source_code: "",
|
|
94
|
+
category: "",
|
|
95
|
+
search_source_codes: [],
|
|
96
|
+
page_num: page,
|
|
97
|
+
page_size: 100
|
|
98
|
+
});
|
|
99
|
+
result.push(...data.cards);
|
|
100
|
+
if (result.length >= data.total || !data.cards.length) break;
|
|
101
|
+
page++;
|
|
102
|
+
}
|
|
103
|
+
cards.value = result;
|
|
104
|
+
}
|
|
105
|
+
/** 新建与编辑统一复用卡片表单。 */
|
|
106
|
+
function editCard(card?: BiCard) {
|
|
107
|
+
if (!card) {
|
|
108
|
+
void router.push("/bi/query");
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
editingCard.value = card;
|
|
112
|
+
cardOpen.value = true;
|
|
113
|
+
}
|
|
114
|
+
/** 保存引用布局,发布时由服务端生成独立卡片配置快照。 */
|
|
115
|
+
async function save(publish: boolean) {
|
|
116
|
+
if (!dashboard.value || saving.value) return;
|
|
117
|
+
saving.value = true;
|
|
118
|
+
try {
|
|
119
|
+
const saved = await defBiDashboardService.SaveBiDashboard({
|
|
120
|
+
dashboard: { ...dashboard.value, name: layout.value.name, schema_json: JSON.stringify(layout.value) }
|
|
121
|
+
});
|
|
122
|
+
dashboard.value = saved;
|
|
123
|
+
if (publish) {
|
|
124
|
+
dashboard.value = await defBiDashboardService.PublishBiDashboard({ id: saved.id, version: saved.draft_version });
|
|
125
|
+
void router.push(`/bi/dashboard/${saved.id}`);
|
|
126
|
+
}
|
|
127
|
+
ElMessage.success(t(publish ? "bi.dashboard.publish_success" : "bi.dashboard.save_success"));
|
|
128
|
+
} catch (cause) {
|
|
129
|
+
ElMessage.error(cause instanceof Error ? cause.message : t("bi.query.error"));
|
|
130
|
+
} finally {
|
|
131
|
+
saving.value = false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
watch(id, () => void load(), { immediate: true });
|
|
135
|
+
</script>
|
|
136
|
+
<style scoped>
|
|
137
|
+
.bi-designer-page {
|
|
138
|
+
min-width: 0;
|
|
139
|
+
}
|
|
140
|
+
.bi-designer-page__toolbar {
|
|
141
|
+
margin-bottom: 16px;
|
|
142
|
+
}
|
|
143
|
+
.bi-designer-page__toolbar header {
|
|
144
|
+
display: flex;
|
|
145
|
+
align-items: center;
|
|
146
|
+
justify-content: space-between;
|
|
147
|
+
flex-wrap: wrap;
|
|
148
|
+
gap: 12px;
|
|
149
|
+
}
|
|
150
|
+
.bi-designer-page h2 {
|
|
151
|
+
margin: 0;
|
|
152
|
+
font-size: 22px;
|
|
153
|
+
font-weight: 600;
|
|
154
|
+
color: var(--admin-page-text-primary);
|
|
155
|
+
}
|
|
156
|
+
.bi-designer-page__toolbar header > div {
|
|
157
|
+
display: flex;
|
|
158
|
+
flex-wrap: wrap;
|
|
159
|
+
gap: 8px;
|
|
160
|
+
}
|
|
161
|
+
.bi-designer-page__toolbar .el-button + .el-button {
|
|
162
|
+
margin-left: 0;
|
|
163
|
+
}
|
|
164
|
+
</style>
|