@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.
Files changed (166) hide show
  1. package/README.md +43 -2
  2. package/dist/package/declarations/index.d.ts +1 -0
  3. package/dist/package/declarations/src/api/bi/admin/v1/bi_card.d.ts +18 -0
  4. package/dist/package/declarations/src/api/bi/admin/v1/bi_card.js +46 -0
  5. package/dist/package/declarations/src/api/bi/admin/v1/bi_dashboard.d.ts +17 -0
  6. package/dist/package/declarations/src/api/bi/admin/v1/bi_dashboard.js +30 -0
  7. package/dist/package/declarations/src/api/bi/admin/v1/bi_query.d.ts +11 -0
  8. package/dist/package/declarations/src/api/bi/admin/v1/bi_query.js +41 -0
  9. package/dist/package/declarations/src/api/bi/admin/v1/bi_query_record.d.ts +10 -0
  10. package/dist/package/declarations/src/api/bi/admin/v1/bi_query_record.js +14 -0
  11. package/dist/package/declarations/src/api/bi/admin/v1/bi_source.d.ts +26 -0
  12. package/dist/package/declarations/src/api/bi/admin/v1/bi_source.js +46 -0
  13. package/dist/package/declarations/src/bi-core.d.ts +17 -0
  14. package/dist/package/declarations/src/bi-core.js +22 -0
  15. package/dist/package/declarations/src/bi-dashboard-schema.d.ts +31 -0
  16. package/dist/package/declarations/src/bi-dashboard-schema.js +39 -0
  17. package/dist/package/declarations/src/bi-messages.d.ts +247 -0
  18. package/dist/package/declarations/src/bi-messages.js +247 -0
  19. package/dist/package/declarations/src/bi-response.d.ts +10 -0
  20. package/dist/package/declarations/src/bi-response.js +33 -0
  21. package/dist/package/declarations/src/bi-vue.d.ts +10 -0
  22. package/dist/package/declarations/src/bi-vue.js +10 -0
  23. package/dist/package/declarations/src/card-schema.d.ts +30 -0
  24. package/dist/package/declarations/src/card-schema.js +87 -0
  25. package/dist/package/declarations/src/components/BiCardChartEditor.vue.d.ts +17 -0
  26. package/dist/package/declarations/src/components/BiCardChartEditor.vue.js +527 -0
  27. package/dist/package/declarations/src/components/BiCardFormDialog.vue.d.ts +20 -0
  28. package/dist/package/declarations/src/components/BiCardFormDialog.vue.js +495 -0
  29. package/dist/package/declarations/src/components/BiCardLibrary.vue.d.ts +3 -0
  30. package/dist/package/declarations/src/components/BiCardLibrary.vue.js +807 -0
  31. package/dist/package/declarations/src/components/BiCardVisualization.vue.d.ts +10 -0
  32. package/dist/package/declarations/src/components/BiCardVisualization.vue.js +97 -0
  33. package/dist/package/declarations/src/components/BiChart.vue.d.ts +20 -0
  34. package/dist/package/declarations/src/components/BiChart.vue.js +112 -0
  35. package/dist/package/declarations/src/components/BiDashboard.vue.d.ts +9 -0
  36. package/dist/package/declarations/src/components/BiDashboard.vue.js +81 -0
  37. package/dist/package/declarations/src/components/BiDashboardMenuDialog.vue.d.ts +12 -0
  38. package/dist/package/declarations/src/components/BiDashboardMenuDialog.vue.js +252 -0
  39. package/dist/package/declarations/src/components/BiDataCard.vue.d.ts +36 -0
  40. package/dist/package/declarations/src/components/BiDataCard.vue.js +372 -0
  41. package/dist/package/declarations/src/components/BiDesigner.vue.d.ts +17 -0
  42. package/dist/package/declarations/src/components/BiDesigner.vue.js +666 -0
  43. package/dist/package/declarations/src/components/BiSourceModelDialog.vue.d.ts +17 -0
  44. package/dist/package/declarations/src/components/BiSourceModelDialog.vue.js +2118 -0
  45. package/dist/package/declarations/src/components/BiWorkbenchPreview.vue.d.ts +7 -0
  46. package/dist/package/declarations/src/components/BiWorkbenchPreview.vue.js +176 -0
  47. package/dist/package/declarations/src/components/source-model-layout.d.ts +3 -0
  48. package/dist/package/declarations/src/components/source-model-layout.js +66 -0
  49. package/dist/package/declarations/src/dataset/index.d.ts +7 -0
  50. package/dist/package/declarations/src/dataset/index.js +25 -0
  51. package/dist/package/declarations/src/dataset/labels.d.ts +2 -0
  52. package/dist/package/declarations/src/dataset/labels.js +21 -0
  53. package/dist/package/declarations/src/dataset/transform.d.ts +20 -0
  54. package/dist/package/declarations/src/dataset/transform.js +173 -0
  55. package/dist/package/declarations/src/engine/chart-types.d.ts +14 -0
  56. package/dist/package/declarations/src/engine/chart-types.js +37 -0
  57. package/dist/package/declarations/src/engine/echarts.d.ts +16 -0
  58. package/dist/package/declarations/src/engine/echarts.js +491 -0
  59. package/dist/package/declarations/src/engine/types.d.ts +36 -0
  60. package/dist/package/declarations/src/engine/types.js +20 -0
  61. package/dist/package/declarations/src/env.d.ts +17 -0
  62. package/dist/package/declarations/src/env.js +67 -0
  63. package/dist/package/declarations/src/index.d.ts +1 -0
  64. package/dist/package/declarations/src/index.js +1 -0
  65. package/dist/package/declarations/src/locales/en-US.json +254 -0
  66. package/dist/package/declarations/src/locales/generated.d.ts +1021 -0
  67. package/dist/package/declarations/src/locales/generated.js +13 -0
  68. package/dist/package/declarations/src/locales/ja-JP.json +254 -0
  69. package/dist/package/declarations/src/locales/zh-CN.json +254 -0
  70. package/dist/package/declarations/src/locales/zh-TW.json +254 -0
  71. package/dist/package/declarations/src/module.d.ts +2 -0
  72. package/dist/package/declarations/src/module.js +9 -0
  73. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_card.d.ts +145 -0
  74. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_card.js +6 -0
  75. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_dashboard.d.ts +107 -0
  76. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_dashboard.js +6 -0
  77. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query.d.ts +157 -0
  78. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query.js +6 -0
  79. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query_record.d.ts +83 -0
  80. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query_record.js +15 -0
  81. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_source.d.ts +301 -0
  82. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_source.js +6 -0
  83. package/dist/package/declarations/src/rpc/common/v1/types.d.ts +60 -0
  84. package/dist/package/declarations/src/rpc/common/v1/types.js +6 -0
  85. package/dist/package/declarations/src/schema/layout.d.ts +7 -0
  86. package/dist/package/declarations/src/schema/layout.js +52 -0
  87. package/dist/package/declarations/src/schema/types.d.ts +83 -0
  88. package/dist/package/declarations/src/schema/types.js +1 -0
  89. package/dist/package/declarations/src/theme/index.d.ts +29 -0
  90. package/dist/package/declarations/src/theme/index.js +83 -0
  91. package/dist/package/declarations/src/theme/palettes.d.ts +7 -0
  92. package/dist/package/declarations/src/theme/palettes.js +28 -0
  93. package/dist/package/declarations/src/theme/presets.d.ts +73 -0
  94. package/dist/package/declarations/src/theme/presets.js +235 -0
  95. package/dist/package/declarations/src/views/card/index.vue.d.ts +3 -0
  96. package/dist/package/declarations/src/views/card/index.vue.js +18 -0
  97. package/dist/package/declarations/src/views/dashboard/index.vue.d.ts +3 -0
  98. package/dist/package/declarations/src/views/dashboard/index.vue.js +107 -0
  99. package/dist/package/declarations/src/views/designer/index.vue.d.ts +3 -0
  100. package/dist/package/declarations/src/views/designer/index.vue.js +332 -0
  101. package/dist/package/declarations/src/views/manage/index.vue.d.ts +3 -0
  102. package/dist/package/declarations/src/views/manage/index.vue.js +325 -0
  103. package/dist/package/declarations/src/views/query/index.vue.d.ts +3 -0
  104. package/dist/package/declarations/src/views/query/index.vue.js +876 -0
  105. package/dist/package/declarations/src/views/source/index.vue.d.ts +3 -0
  106. package/dist/package/declarations/src/views/source/index.vue.js +343 -0
  107. package/dist/package/declarations/src/views/workbench/index.vue.d.ts +3 -0
  108. package/dist/package/declarations/src/views/workbench/index.vue.js +362 -0
  109. package/dist/package/src/api/bi/admin/v1/bi_card.ts +67 -0
  110. package/dist/package/src/api/bi/admin/v1/bi_dashboard.ts +51 -0
  111. package/dist/package/src/api/bi/admin/v1/bi_query.ts +55 -0
  112. package/dist/package/src/api/bi/admin/v1/bi_query_record.ts +25 -0
  113. package/dist/package/src/api/bi/admin/v1/bi_source.ts +80 -0
  114. package/dist/package/src/bi-core.ts +43 -0
  115. package/dist/package/src/bi-dashboard-schema.ts +69 -0
  116. package/dist/package/src/bi-messages.ts +249 -0
  117. package/dist/package/src/bi-response.ts +39 -0
  118. package/dist/package/src/bi-vue.ts +13 -0
  119. package/dist/package/src/card-schema.ts +111 -0
  120. package/dist/package/src/components/BiCardChartEditor.vue +139 -0
  121. package/dist/package/src/components/BiCardFormDialog.vue +289 -0
  122. package/dist/package/src/components/BiCardLibrary.vue +310 -0
  123. package/dist/package/src/components/BiCardVisualization.vue +95 -0
  124. package/dist/package/src/components/BiChart.vue +134 -0
  125. package/dist/package/src/components/BiDashboard.vue +53 -0
  126. package/dist/package/src/components/BiDashboardMenuDialog.vue +177 -0
  127. package/dist/package/src/components/BiDataCard.vue +231 -0
  128. package/dist/package/src/components/BiDesigner.vue +287 -0
  129. package/dist/package/src/components/BiSourceModelDialog.vue +846 -0
  130. package/dist/package/src/components/BiWorkbenchPreview.vue +131 -0
  131. package/dist/package/src/components/source-model-layout.ts +62 -0
  132. package/dist/package/src/dataset/index.ts +28 -0
  133. package/dist/package/src/dataset/labels.ts +19 -0
  134. package/dist/package/src/dataset/transform.ts +189 -0
  135. package/dist/package/src/engine/chart-types.ts +44 -0
  136. package/dist/package/src/engine/echarts.ts +568 -0
  137. package/dist/package/src/engine/types.ts +60 -0
  138. package/dist/package/src/env.ts +82 -0
  139. package/dist/package/src/index.ts +1 -0
  140. package/dist/package/src/locales/en-US.json +254 -0
  141. package/dist/package/src/locales/generated.ts +16 -0
  142. package/dist/package/src/locales/ja-JP.json +254 -0
  143. package/dist/package/src/locales/zh-CN.json +254 -0
  144. package/dist/package/src/locales/zh-TW.json +254 -0
  145. package/dist/package/src/module.ts +12 -0
  146. package/dist/package/src/rpc/bi/admin/v1/bi_card.ts +169 -0
  147. package/dist/package/src/rpc/bi/admin/v1/bi_dashboard.ts +126 -0
  148. package/dist/package/src/rpc/bi/admin/v1/bi_query.ts +187 -0
  149. package/dist/package/src/rpc/bi/admin/v1/bi_query_record.ts +98 -0
  150. package/dist/package/src/rpc/bi/admin/v1/bi_source.ts +338 -0
  151. package/dist/package/src/rpc/common/v1/types.ts +77 -0
  152. package/dist/package/src/schema/layout.ts +54 -0
  153. package/dist/package/src/schema/types.ts +103 -0
  154. package/dist/package/src/styles.scss +1 -0
  155. package/dist/package/src/theme/index.ts +108 -0
  156. package/dist/package/src/theme/palettes.ts +34 -0
  157. package/dist/package/src/theme/presets.ts +278 -0
  158. package/dist/package/src/views/card/index.vue +5 -0
  159. package/dist/package/src/views/dashboard/index.vue +58 -0
  160. package/dist/package/src/views/designer/index.vue +164 -0
  161. package/dist/package/src/views/manage/index.vue +276 -0
  162. package/dist/package/src/views/query/index.vue +593 -0
  163. package/dist/package/src/views/source/index.vue +214 -0
  164. package/dist/package/src/views/workbench/index.vue +208 -0
  165. package/package.json +67 -3
  166. 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,5 @@
1
+ <template><BiCardLibrary /></template>
2
+ <script setup lang="ts">
3
+ import BiCardLibrary from "../../components/BiCardLibrary.vue";
4
+ defineOptions({ name: "BiCardLibraryPage", inheritAttrs: false });
5
+ </script>
@@ -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>