@liujitcn/kratos-admin-system 0.0.20 → 0.0.23

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 (118) hide show
  1. package/README.md +51 -50
  2. package/dist/package/declarations/src/api/system/base_language.d.ts +52 -0
  3. package/dist/package/declarations/src/api/system/base_translation.d.ts +10 -0
  4. package/dist/package/declarations/src/api/system/code_gen_i18n.d.ts +8 -0
  5. package/dist/package/declarations/src/api/system/ops_monitoring.d.ts +19 -0
  6. package/dist/package/declarations/src/api/system/ops_monitoring_sse.d.ts +12 -0
  7. package/dist/package/declarations/src/components/DynamicTranslationCell.vue.d.ts +16 -0
  8. package/dist/package/declarations/src/components/DynamicTranslationEditor.vue.d.ts +20 -0
  9. package/dist/package/declarations/src/components/dynamicTranslation.d.ts +38 -0
  10. package/dist/package/declarations/src/locales/generated.d.ts +6536 -0
  11. package/dist/package/declarations/src/rpc/base/v1/ai_session.d.ts +12 -2
  12. package/dist/package/declarations/src/rpc/base/v1/ai_tool.d.ts +9 -1
  13. package/dist/package/declarations/src/rpc/base/v1/config.d.ts +35 -0
  14. package/dist/package/declarations/src/rpc/system/admin/v1/auth.d.ts +1 -1
  15. package/dist/package/declarations/src/rpc/system/admin/v1/base_config.d.ts +23 -2
  16. package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +9 -0
  17. package/dist/package/declarations/src/rpc/system/admin/v1/base_job.d.ts +9 -1
  18. package/dist/package/declarations/src/rpc/system/admin/v1/base_language.d.ts +119 -0
  19. package/dist/package/declarations/src/rpc/system/admin/v1/base_menu.d.ts +6 -1
  20. package/dist/package/declarations/src/rpc/system/admin/v1/base_migration.d.ts +6 -6
  21. package/dist/package/declarations/src/rpc/system/admin/v1/base_role.d.ts +13 -1
  22. package/dist/package/declarations/src/rpc/system/admin/v1/base_translation.d.ts +75 -0
  23. package/dist/package/declarations/src/rpc/system/admin/v1/base_user.d.ts +11 -1
  24. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen.d.ts +13 -11
  25. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_column.d.ts +7 -0
  26. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_table.d.ts +24 -1
  27. package/dist/package/declarations/src/rpc/system/admin/v1/common.d.ts +13 -0
  28. package/dist/package/declarations/src/rpc/system/admin/v1/ops_monitoring.d.ts +222 -0
  29. package/dist/package/declarations/src/views/base/language/index.vue.d.ts +3 -0
  30. package/dist/package/declarations/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue.d.ts +23 -0
  31. package/dist/package/declarations/src/views/tool/code-gen/config.d.ts +7 -7
  32. package/dist/package/declarations/src/views/tool/ops-monitoring/index.vue.d.ts +3 -0
  33. package/dist/package/src/api/base/ai_message.ts +7 -12
  34. package/dist/package/src/api/base/sse.ts +3 -1
  35. package/dist/package/src/api/system/base_language.ts +135 -0
  36. package/dist/package/src/api/system/base_translation.ts +33 -0
  37. package/dist/package/src/api/system/code_gen_column.ts +17 -3
  38. package/dist/package/src/api/system/code_gen_i18n.ts +18 -0
  39. package/dist/package/src/api/system/code_gen_table.ts +12 -4
  40. package/dist/package/src/api/system/ops_monitoring.ts +88 -0
  41. package/dist/package/src/api/system/ops_monitoring_sse.ts +49 -0
  42. package/dist/package/src/components/DynamicTranslationCell.vue +249 -0
  43. package/dist/package/src/components/DynamicTranslationEditor.vue +197 -0
  44. package/dist/package/src/components/dynamicTranslation.ts +66 -0
  45. package/dist/package/src/locales/README.md +30 -0
  46. package/dist/package/src/locales/en-US.json +933 -0
  47. package/dist/package/src/locales/es-ES.json +933 -0
  48. package/dist/package/src/locales/fr-FR.json +933 -0
  49. package/dist/package/src/locales/generated.ts +22 -0
  50. package/dist/package/src/locales/ja-JP.json +933 -0
  51. package/dist/package/src/locales/ko-KR.json +933 -0
  52. package/dist/package/src/locales/zh-CN.json +933 -0
  53. package/dist/package/src/locales/zh-TW.json +933 -0
  54. package/dist/package/src/module.ts +6 -2
  55. package/dist/package/src/rpc/base/v1/ai_session.ts +13 -2
  56. package/dist/package/src/rpc/base/v1/ai_tool.ts +10 -1
  57. package/dist/package/src/rpc/base/v1/config.ts +47 -0
  58. package/dist/package/src/rpc/system/admin/v1/auth.ts +1 -1
  59. package/dist/package/src/rpc/system/admin/v1/base_config.ts +24 -2
  60. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +9 -0
  61. package/dist/package/src/rpc/system/admin/v1/base_job.ts +10 -1
  62. package/dist/package/src/rpc/system/admin/v1/base_language.ts +141 -0
  63. package/dist/package/src/rpc/system/admin/v1/base_menu.ts +6 -1
  64. package/dist/package/src/rpc/system/admin/v1/base_migration.ts +8 -8
  65. package/dist/package/src/rpc/system/admin/v1/base_role.ts +14 -1
  66. package/dist/package/src/rpc/system/admin/v1/base_translation.ts +90 -0
  67. package/dist/package/src/rpc/system/admin/v1/base_user.ts +12 -1
  68. package/dist/package/src/rpc/system/admin/v1/code_gen.ts +16 -12
  69. package/dist/package/src/rpc/system/admin/v1/code_gen_column.ts +8 -0
  70. package/dist/package/src/rpc/system/admin/v1/code_gen_table.ts +27 -1
  71. package/dist/package/src/rpc/system/admin/v1/common.ts +21 -0
  72. package/dist/package/src/rpc/system/admin/v1/ops_monitoring.ts +255 -0
  73. package/dist/package/src/views/ai/chat/components/AiMarkdown.vue +1 -6
  74. package/dist/package/src/views/ai/chat/components/ChatPanel.vue +75 -58
  75. package/dist/package/src/views/ai/chat/components/SessionPanel.vue +20 -9
  76. package/dist/package/src/views/ai/chat/components/XSender.vue +36 -23
  77. package/dist/package/src/views/ai/chat/index.vue +58 -41
  78. package/dist/package/src/views/ai/chat/message.ts +29 -27
  79. package/dist/package/src/views/base/api/index.vue +121 -84
  80. package/dist/package/src/views/base/area/index.vue +81 -32
  81. package/dist/package/src/views/base/config/index.vue +300 -96
  82. package/dist/package/src/views/base/dept/index.vue +110 -62
  83. package/dist/package/src/views/base/dict/index.vue +145 -62
  84. package/dist/package/src/views/base/dict/item.vue +155 -64
  85. package/dist/package/src/views/base/job/index.vue +134 -82
  86. package/dist/package/src/views/base/job/log.vue +24 -25
  87. package/dist/package/src/views/base/language/index.vue +260 -0
  88. package/dist/package/src/views/base/log/index.vue +68 -46
  89. package/dist/package/src/views/base/menu/index.vue +344 -200
  90. package/dist/package/src/views/base/migration/index.vue +49 -29
  91. package/dist/package/src/views/base/post/index.vue +128 -60
  92. package/dist/package/src/views/base/role/index.vue +145 -79
  93. package/dist/package/src/views/base/tenant/index.vue +132 -64
  94. package/dist/package/src/views/base/user/components/dept-tree.vue +2 -1
  95. package/dist/package/src/views/base/user/index.vue +194 -116
  96. package/dist/package/src/views/profile/components/base.vue +45 -28
  97. package/dist/package/src/views/profile/components/password.vue +45 -30
  98. package/dist/package/src/views/profile/components/security.vue +90 -54
  99. package/dist/package/src/views/profile/index.vue +10 -9
  100. package/dist/package/src/views/tool/api-doc/index.vue +6 -2
  101. package/dist/package/src/views/tool/code-gen/code-preview/index.vue +32 -16
  102. package/dist/package/src/views/tool/code-gen/columns/index.vue +382 -273
  103. package/dist/package/src/views/tool/code-gen/columns/option-copy.ts +1 -6
  104. package/dist/package/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue +118 -0
  105. package/dist/package/src/views/tool/code-gen/components/CodeGenProgressDialog.vue +65 -36
  106. package/dist/package/src/views/tool/code-gen/components/CodePreviewPane.vue +8 -5
  107. package/dist/package/src/views/tool/code-gen/config.ts +116 -79
  108. package/dist/package/src/views/tool/code-gen/preview/data.ts +19 -17
  109. package/dist/package/src/views/tool/code-gen/preview/index.vue +96 -59
  110. package/dist/package/src/views/tool/code-gen/proto/index.vue +110 -62
  111. package/dist/package/src/views/tool/code-gen/table/index.vue +201 -121
  112. package/dist/package/src/views/tool/ops-monitoring/index.vue +1175 -0
  113. package/dist/package/src/views/tool/project-doc/index.vue +17 -15
  114. package/package.json +6 -2
  115. package/dist/package/declarations/src/rpc/base/v1/enum.d.ts +0 -43
  116. package/dist/package/declarations/src/rpc/system/common/v1/enum.d.ts +0 -67
  117. package/dist/package/src/rpc/base/v1/enum.ts +0 -54
  118. package/dist/package/src/rpc/system/common/v1/enum.ts +0 -80
@@ -0,0 +1,222 @@
1
+ /** 运行信息查询条件。 */
2
+ export interface GetOpsRuntimeRequest {
3
+ }
4
+ /** 流量查询条件。 */
5
+ export interface GetOpsTrafficRequest {
6
+ /** 统计窗口,单位分钟 */
7
+ window_minutes: number;
8
+ }
9
+ /** 服务状态查询条件。 */
10
+ export interface GetOpsServicesRequest {
11
+ }
12
+ /** 存储状态查询条件。 */
13
+ export interface GetOpsStorageRequest {
14
+ }
15
+ /** 接口查询条件。 */
16
+ export interface GetOpsEndpointsRequest {
17
+ /** 统计窗口,单位分钟 */
18
+ window_minutes: number;
19
+ }
20
+ /** 实例查询条件。 */
21
+ export interface GetOpsNodesRequest {
22
+ }
23
+ /** 告警查询条件。 */
24
+ export interface GetOpsAlertsRequest {
25
+ /** 统计窗口,单位分钟 */
26
+ window_minutes: number;
27
+ }
28
+ /** 流量响应。 */
29
+ export interface OpsTrafficResponse {
30
+ /** 采集时间,RFC3339格式 */
31
+ collected_at: string;
32
+ /** 统计窗口,单位分钟 */
33
+ window_minutes: number;
34
+ /** 请求流量摘要 */
35
+ traffic: OpsTraffic | undefined;
36
+ /** 请求流量趋势 */
37
+ points: OpsTrafficPoint[];
38
+ }
39
+ /** 服务状态响应。 */
40
+ export interface OpsServicesResponse {
41
+ /** 采集时间,RFC3339格式 */
42
+ collected_at: string;
43
+ /** 服务依赖状态 */
44
+ services: OpsServiceStatus[];
45
+ }
46
+ /** 存储状态响应。 */
47
+ export interface OpsStorageResponse {
48
+ /** 采集时间,RFC3339格式 */
49
+ collected_at: string;
50
+ /** 数据存储状态 */
51
+ storage: OpsStorage[];
52
+ }
53
+ /** 接口摘要响应。 */
54
+ export interface OpsEndpointsResponse {
55
+ /** 采集时间,RFC3339格式 */
56
+ collected_at: string;
57
+ /** 统计窗口,单位分钟 */
58
+ window_minutes: number;
59
+ /** 接口请求摘要 */
60
+ endpoints: OpsEndpoint[];
61
+ }
62
+ /** 实例状态响应。 */
63
+ export interface OpsNodesResponse {
64
+ /** 采集时间,RFC3339格式 */
65
+ collected_at: string;
66
+ /** 实例资源状态 */
67
+ nodes: OpsNode[];
68
+ }
69
+ /** 告警响应。 */
70
+ export interface OpsAlertsResponse {
71
+ /** 采集时间,RFC3339格式 */
72
+ collected_at: string;
73
+ /** 统计窗口,单位分钟 */
74
+ window_minutes: number;
75
+ /** 近期告警事件 */
76
+ alerts: OpsAlert[];
77
+ }
78
+ /** 当前进程运行信息。 */
79
+ export interface OpsRuntime {
80
+ /** 服务名称 */
81
+ service_name: string;
82
+ /** 服务版本 */
83
+ version: string;
84
+ /** 主机名 */
85
+ hostname: string;
86
+ /** 运行环境 */
87
+ environment: string;
88
+ /** Go运行时版本 */
89
+ go_version: string;
90
+ /** 操作系统 */
91
+ os: string;
92
+ /** 系统架构 */
93
+ arch: string;
94
+ /** 启动时间,RFC3339格式 */
95
+ start_time: string;
96
+ /** 运行时长,单位秒 */
97
+ uptime_seconds: number;
98
+ /** 当前协程数量 */
99
+ goroutines: number;
100
+ /** 当前堆内存,单位字节 */
101
+ memory_alloc_bytes: number;
102
+ /** 进程向系统申请的内存,单位字节 */
103
+ memory_sys_bytes: number;
104
+ }
105
+ /** 请求流量摘要。 */
106
+ export interface OpsTraffic {
107
+ /** 每秒请求数 */
108
+ qps: number;
109
+ /** P95响应延迟,单位毫秒 */
110
+ p95_latency_ms: number;
111
+ /** 错误率,百分比 */
112
+ error_rate: number;
113
+ /** 可用性,百分比 */
114
+ availability: number;
115
+ /** 窗口内请求数 */
116
+ request_count: number;
117
+ }
118
+ /** 请求流量趋势点。 */
119
+ export interface OpsTrafficPoint {
120
+ /** 时间点,RFC3339格式 */
121
+ at: string;
122
+ /** 时间点每秒请求数 */
123
+ qps: number;
124
+ /** 时间点P95延迟,单位毫秒 */
125
+ p95_latency_ms: number;
126
+ /** QPS柱状图比例 */
127
+ qps_percent: number;
128
+ /** 延迟柱状图比例 */
129
+ latency_percent: number;
130
+ }
131
+ /** 服务或外部依赖状态。 */
132
+ export interface OpsServiceStatus {
133
+ /** 服务名称 */
134
+ name: string;
135
+ /** 服务地址 */
136
+ address: string;
137
+ /** 状态:正常、未配置或异常 */
138
+ status: string;
139
+ /** 状态说明 */
140
+ message: string;
141
+ /** 探测耗时,单位毫秒 */
142
+ latency_ms: number;
143
+ }
144
+ /** 数据存储状态。 */
145
+ export interface OpsStorage {
146
+ /** 存储名称 */
147
+ name: string;
148
+ /** 存储简称 */
149
+ short_name: string;
150
+ /** 存储地址 */
151
+ address: string;
152
+ /** 状态:正常、未配置或异常 */
153
+ status: string;
154
+ /** 存储指标 */
155
+ metrics: OpsMetric[];
156
+ /** 容量指标名称 */
157
+ capacity_label: string;
158
+ /** 容量使用百分比 */
159
+ capacity: number;
160
+ }
161
+ /** 存储或实例指标。 */
162
+ export interface OpsMetric {
163
+ /** 指标名称 */
164
+ label: string;
165
+ /** 指标值 */
166
+ value: string;
167
+ }
168
+ /** 接口请求摘要。 */
169
+ export interface OpsEndpoint {
170
+ /** 接口路径 */
171
+ route: string;
172
+ /** 每秒请求数 */
173
+ qps: number;
174
+ /** P95响应延迟,单位毫秒 */
175
+ p95_latency_ms: number;
176
+ /** 错误率,百分比 */
177
+ error_rate: number;
178
+ /** 接口状态 */
179
+ status: string;
180
+ }
181
+ /** 实例资源状态。 */
182
+ export interface OpsNode {
183
+ /** 实例名称 */
184
+ name: string;
185
+ /** 实例资源指标 */
186
+ metrics: OpsNodeMetric[];
187
+ }
188
+ /** 实例资源指标。 */
189
+ export interface OpsNodeMetric {
190
+ /** 指标名称 */
191
+ label: string;
192
+ /** 指标使用百分比 */
193
+ value: number;
194
+ }
195
+ /** 告警事件。 */
196
+ export interface OpsAlert {
197
+ /** 告警标题 */
198
+ title: string;
199
+ /** 告警详情 */
200
+ detail: string;
201
+ /** 告警时间,RFC3339格式 */
202
+ at: string;
203
+ /** 告警状态 */
204
+ status: string;
205
+ }
206
+ /** 运维监控服务。 */
207
+ export interface OpsMonitoringService {
208
+ /** 查询当前进程运行信息。 */
209
+ GetOpsRuntime(request: GetOpsRuntimeRequest): Promise<OpsRuntime>;
210
+ /** 查询请求流量与延迟趋势。 */
211
+ GetOpsTraffic(request: GetOpsTrafficRequest): Promise<OpsTrafficResponse>;
212
+ /** 查询服务和外部依赖状态。 */
213
+ GetOpsServices(request: GetOpsServicesRequest): Promise<OpsServicesResponse>;
214
+ /** 查询数据库和缓存状态。 */
215
+ GetOpsStorage(request: GetOpsStorageRequest): Promise<OpsStorageResponse>;
216
+ /** 查询接口请求摘要。 */
217
+ GetOpsEndpoints(request: GetOpsEndpointsRequest): Promise<OpsEndpointsResponse>;
218
+ /** 查询实例资源状态。 */
219
+ GetOpsNodes(request: GetOpsNodesRequest): Promise<OpsNodesResponse>;
220
+ /** 查询窗口内告警事件。 */
221
+ GetOpsAlerts(request: GetOpsAlertsRequest): Promise<OpsAlertsResponse>;
222
+ }
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,23 @@
1
+ import type { CodeGenLocaleConfig } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_translation";
2
+ /** 代码生成多语言编辑器属性。 */
3
+ interface CodeGenLocaleEditorProps {
4
+ /** 按语言区域索引的生成配置。 */
5
+ modelValue: Map<string, CodeGenLocaleConfig>;
6
+ /** 中文业务或字段描述。 */
7
+ sourceComment?: string;
8
+ /** 是否编辑左树标题。 */
9
+ showLeftTreeComment?: boolean;
10
+ /** 中文左树标题。 */
11
+ sourceLeftTreeComment?: string;
12
+ }
13
+ declare const __VLS_export: import("vue").DefineComponent<CodeGenLocaleEditorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
+ "update:modelValue": (value: Map<string, CodeGenLocaleConfig>) => any;
15
+ }, string, import("vue").PublicProps, Readonly<CodeGenLocaleEditorProps> & Readonly<{
16
+ "onUpdate:modelValue"?: ((value: Map<string, CodeGenLocaleConfig>) => any) | undefined;
17
+ }>, {
18
+ sourceComment: string;
19
+ showLeftTreeComment: boolean;
20
+ sourceLeftTreeComment: string;
21
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
+ declare const _default: typeof __VLS_export;
23
+ export default _default;
@@ -3,21 +3,21 @@ import type { ProFormOption } from "@liujitcn/kratos-admin-core/components/ProFo
3
3
  import type { CodeGenColumnFormConfig, CodeGenColumnListConfig, CodeGenColumnOptionConfig, CodeGenColumnQueryConfig } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/code_gen_column";
4
4
  import type { CodeGenLeftTreeConfig, CodeGenTableForm } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/code_gen_table";
5
5
  /** 代码生成表配置页面类型选项。 */
6
- export declare const codeGenPageTypeOptions: ProFormOption[];
6
+ export declare function codeGenPageTypeOptions(): ProFormOption[];
7
7
  /** 判断页面类型是否使用树形表格配置。 */
8
8
  export declare function isCodeGenTreePageType(pageType?: string): pageType is "tree" | "tree_lazy";
9
9
  /** 左树数据源类型选项。 */
10
- export declare const codeGenSourceTypeOptions: ProFormOption[];
10
+ export declare function codeGenSourceTypeOptions(): ProFormOption[];
11
11
  /** 查询操作符选项。 */
12
- export declare const codeGenQueryOperatorOptions: ProFormOption[];
12
+ export declare function codeGenQueryOperatorOptions(): ProFormOption[];
13
13
  /** 查询组件选项。 */
14
- export declare const codeGenQueryComponentOptions: ProFormOption[];
14
+ export declare function codeGenQueryComponentOptions(): ProFormOption[];
15
15
  /** 列表展示组件选项。 */
16
- export declare const codeGenListComponentOptions: ProFormOption[];
16
+ export declare function codeGenListComponentOptions(): ProFormOption[];
17
17
  /** 表单录入组件选项,保持与 ProForm 支持类型完整一致。 */
18
- export declare const codeGenFormComponentOptions: ProFormOption[];
18
+ export declare function codeGenFormComponentOptions(): ProFormOption[];
19
19
  /** 代码生成表配置校验规则。 */
20
- export declare const codeGenTableRules: FormRules;
20
+ export declare function codeGenTableRules(): FormRules;
21
21
  /** 创建默认左树右表页面配置。 */
22
22
  export declare function createDefaultCodeGenLeftTreeConfig(): CodeGenLeftTreeConfig;
23
23
  /** 创建代码生成表配置默认表单。 */
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -1,12 +1,6 @@
1
- import service, {
2
- getRequestAccessToken,
3
- handleAuthExpired,
4
- requestBaseURL
5
- } from "@liujitcn/kratos-admin-core/request";
6
- import type {
7
- ListAiMessageRequest,
8
- ListAiMessageResponse
9
- } from "@liujitcn/kratos-admin-system/rpc/base/v1/ai_session";
1
+ import service, { getRequestAccessToken, handleAuthExpired, requestBaseURL } from "@liujitcn/kratos-admin-core/request";
2
+ import { getLocaleRequestHeaders, t } from "@liujitcn/kratos-admin-core";
3
+ import type { ListAiMessageRequest, ListAiMessageResponse } from "@liujitcn/kratos-admin-system/rpc/base/v1/ai_session";
10
4
  import type {
11
5
  AiMessageService,
12
6
  DeleteAiMessageRequest,
@@ -28,7 +22,7 @@ export type AiMessageStreamOptions = {
28
22
 
29
23
  /** 从 direct stream 错误响应中提取后端业务提示。 */
30
24
  async function resolveStreamErrorMessage(response: Response): Promise<string> {
31
- const fallbackMessage = `AI 助手请求失败(${response.status})`;
25
+ const fallbackMessage = t("system.ai.request_failed_with_status", { status: response.status });
32
26
  const contentType = response.headers.get("Content-Type") ?? "";
33
27
  if (contentType.includes("application/json")) {
34
28
  try {
@@ -51,7 +45,8 @@ export async function SendAiMessageStream(request: SendAiMessageRequest, options
51
45
  const accessToken = await getRequestAccessToken();
52
46
  const headers: Record<string, string> = {
53
47
  Accept: "text/event-stream",
54
- "Content-Type": "application/json;charset=utf-8"
48
+ "Content-Type": "application/json;charset=utf-8",
49
+ ...getLocaleRequestHeaders()
55
50
  };
56
51
  if (accessToken) headers.Authorization = accessToken;
57
52
 
@@ -65,7 +60,7 @@ export async function SendAiMessageStream(request: SendAiMessageRequest, options
65
60
  // direct stream 不经过 axios 响应拦截器,需要在这里补齐登录失效处理。
66
61
  if (response.status === 401 || response.status === 403) {
67
62
  handleAuthExpired();
68
- throw new Error("登录状态已失效,请重新登录");
63
+ throw new Error(t("core.auth.session_expired"));
69
64
  }
70
65
  if (!response.ok) {
71
66
  throw new Error(await resolveStreamErrorMessage(response));
@@ -1,6 +1,7 @@
1
1
  import { EventStreamContentType, fetchEventSource, type EventSourceMessage } from "@microsoft/fetch-event-source";
2
2
  import type { SubscribeSseRequest } from "@liujitcn/kratos-admin-system/rpc/base/v1/sse";
3
3
  import { getRequestAccessToken, handleAuthExpired } from "@liujitcn/kratos-admin-core/request";
4
+ import { getLocaleRequestHeaders } from "@liujitcn/kratos-admin-core";
4
5
 
5
6
  const SSE_URL = "/events";
6
7
 
@@ -105,7 +106,8 @@ export class SseServiceImpl {
105
106
  openWhenHidden: true,
106
107
  headers: {
107
108
  Accept: EventStreamContentType,
108
- Authorization: accessToken
109
+ Authorization: accessToken,
110
+ ...getLocaleRequestHeaders()
109
111
  },
110
112
  async onopen(response) {
111
113
  const contentType = response.headers.get("content-type") ?? "";
@@ -0,0 +1,135 @@
1
+ import service from "@liujitcn/kratos-admin-core/request";
2
+ import { readonly, shallowRef } from "vue";
3
+ import {
4
+ type BaseLanguage,
5
+ type BaseLanguageForm,
6
+ type BaseLanguageService,
7
+ type CreateBaseLanguageRequest,
8
+ type DeleteBaseLanguageRequest,
9
+ type GetBaseLanguageRequest,
10
+ type OptionBaseLanguageRequest,
11
+ type OptionBaseLanguageResponse,
12
+ type PageBaseLanguageRequest,
13
+ type PageBaseLanguageResponse,
14
+ type SetBaseLanguagePrimaryRequest,
15
+ type SetBaseLanguageStatusRequest,
16
+ type UpdateBaseLanguageRequest
17
+ } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_language";
18
+ import type { Empty } from "@liujitcn/kratos-admin-system/rpc/google/protobuf/empty";
19
+
20
+ const BASE_LANGUAGE_URL = "/v1/admin/base/language";
21
+
22
+ /** Admin语言服务。 */
23
+ export class BaseLanguageServiceImpl implements BaseLanguageService {
24
+ /** 查询语言选项。 */
25
+ OptionBaseLanguage(request: OptionBaseLanguageRequest = {}): Promise<OptionBaseLanguageResponse> {
26
+ return service<OptionBaseLanguageRequest, OptionBaseLanguageResponse>({
27
+ url: `${BASE_LANGUAGE_URL}/option`,
28
+ method: "get",
29
+ params: request
30
+ });
31
+ }
32
+
33
+ /** 查询语言分页列表。 */
34
+ PageBaseLanguage(request: PageBaseLanguageRequest): Promise<PageBaseLanguageResponse> {
35
+ return service<PageBaseLanguageRequest, PageBaseLanguageResponse>({
36
+ url: BASE_LANGUAGE_URL,
37
+ method: "get",
38
+ params: request
39
+ });
40
+ }
41
+
42
+ /** 查询语言详情。 */
43
+ GetBaseLanguage(request: GetBaseLanguageRequest): Promise<BaseLanguageForm> {
44
+ return service<GetBaseLanguageRequest, BaseLanguageForm>({
45
+ url: `${BASE_LANGUAGE_URL}/${request.id}`,
46
+ method: "get"
47
+ });
48
+ }
49
+
50
+ /** 创建语言。 */
51
+ CreateBaseLanguage(request: CreateBaseLanguageRequest): Promise<Empty> {
52
+ return service<BaseLanguageForm | undefined, Empty>({
53
+ url: BASE_LANGUAGE_URL,
54
+ method: "post",
55
+ data: request.base_language
56
+ });
57
+ }
58
+
59
+ /** 更新语言。 */
60
+ UpdateBaseLanguage(request: UpdateBaseLanguageRequest): Promise<Empty> {
61
+ return service<BaseLanguageForm | undefined, Empty>({
62
+ url: `${BASE_LANGUAGE_URL}/${request.base_language?.id ?? ""}`,
63
+ method: "put",
64
+ data: request.base_language
65
+ });
66
+ }
67
+
68
+ /** 删除语言。 */
69
+ DeleteBaseLanguage(request: DeleteBaseLanguageRequest): Promise<Empty> {
70
+ return service<DeleteBaseLanguageRequest, Empty>({
71
+ url: `${BASE_LANGUAGE_URL}/${request.id}`,
72
+ method: "delete"
73
+ });
74
+ }
75
+
76
+ /** 设置语言启用状态。 */
77
+ SetBaseLanguageStatus(request: SetBaseLanguageStatusRequest): Promise<Empty> {
78
+ return service<SetBaseLanguageStatusRequest, Empty>({
79
+ url: `${BASE_LANGUAGE_URL}/${request.id}/status`,
80
+ method: "put",
81
+ data: request
82
+ });
83
+ }
84
+
85
+ /** 设置主语言。 */
86
+ SetBaseLanguagePrimary(request: SetBaseLanguagePrimaryRequest): Promise<Empty> {
87
+ return service<SetBaseLanguagePrimaryRequest, Empty>({
88
+ url: `${BASE_LANGUAGE_URL}/${request.id}/primary`,
89
+ method: "put",
90
+ data: request
91
+ });
92
+ }
93
+ }
94
+
95
+ export const defBaseLanguageService = new BaseLanguageServiceImpl();
96
+
97
+ const enabledBaseLanguages = shallowRef<BaseLanguage[]>([]);
98
+ let enabledBaseLanguagesRequest: Promise<BaseLanguage[]> | undefined;
99
+
100
+ /** 加载启用语言选项并在当前管理端会话内缓存。 */
101
+ export async function loadEnabledBaseLanguages(force = false): Promise<BaseLanguage[]> {
102
+ if (force) {
103
+ enabledBaseLanguagesRequest = undefined;
104
+ }
105
+ if (enabledBaseLanguagesRequest) return enabledBaseLanguagesRequest;
106
+ if (!force && enabledBaseLanguages.value.length) return enabledBaseLanguages.value;
107
+
108
+ enabledBaseLanguagesRequest = defBaseLanguageService
109
+ .OptionBaseLanguage({ enabled_only: true })
110
+ .then(response => {
111
+ const languages = response.base_languages ?? [];
112
+ enabledBaseLanguages.value = languages;
113
+ return languages;
114
+ })
115
+ .finally(() => {
116
+ enabledBaseLanguagesRequest = undefined;
117
+ });
118
+ return enabledBaseLanguagesRequest;
119
+ }
120
+
121
+ /** 返回响应式的启用语言选项。 */
122
+ export function useEnabledBaseLanguages() {
123
+ return { languages: readonly(enabledBaseLanguages) };
124
+ }
125
+
126
+ /** 返回当前缓存的启用语言选项快照。 */
127
+ export function getEnabledBaseLanguages(): BaseLanguage[] {
128
+ return enabledBaseLanguages.value;
129
+ }
130
+
131
+ /** 清除启用语言缓存,使下次使用时重新读取语言管理数据。 */
132
+ export function invalidateEnabledBaseLanguages() {
133
+ enabledBaseLanguages.value = [];
134
+ enabledBaseLanguagesRequest = undefined;
135
+ }
@@ -0,0 +1,33 @@
1
+ import service from "@liujitcn/kratos-admin-core/request";
2
+ import type { Empty } from "@liujitcn/kratos-admin-system/rpc/google/protobuf/empty";
3
+ import type {
4
+ BaseTranslationService,
5
+ DraftBaseTranslationRequest,
6
+ DraftBaseTranslationResponse,
7
+ UpdateBaseTranslationRequest
8
+ } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_translation";
9
+
10
+ const BASE_TRANSLATION_URL = "/v1/admin/base/translation";
11
+
12
+ /** BaseTranslationServiceImpl Admin 单条动态翻译服务。 */
13
+ export class BaseTranslationServiceImpl implements BaseTranslationService {
14
+ /** DraftBaseTranslation 翻译请求中的单个文本。 */
15
+ DraftBaseTranslation(request: DraftBaseTranslationRequest): Promise<DraftBaseTranslationResponse> {
16
+ return service<DraftBaseTranslationRequest, DraftBaseTranslationResponse>({
17
+ url: `${BASE_TRANSLATION_URL}/draft`,
18
+ method: "post",
19
+ data: request
20
+ });
21
+ }
22
+
23
+ /** UpdateBaseTranslation 修改或新增单条翻译信息。 */
24
+ UpdateBaseTranslation(request: UpdateBaseTranslationRequest): Promise<Empty> {
25
+ return service<UpdateBaseTranslationRequest, Empty>({
26
+ url: BASE_TRANSLATION_URL,
27
+ method: "put",
28
+ data: request
29
+ });
30
+ }
31
+ }
32
+
33
+ export const defBaseTranslationService = new BaseTranslationServiceImpl();
@@ -8,6 +8,7 @@ import {
8
8
  type SaveCodeGenColumnRequest
9
9
  } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/code_gen_column";
10
10
  import type { Empty } from "@liujitcn/kratos-admin-system/rpc/google/protobuf/empty";
11
+ import { normalizeCodeGenLocaleConfigMap, serializeCodeGenLocaleConfigMap } from "./code_gen_i18n";
11
12
 
12
13
  const CODE_GEN_DATABASE_TABLE_URL = "/v1/admin/code-gen/database/table";
13
14
  const CODE_GEN_TABLE_URL = "/v1/admin/code-gen/table";
@@ -23,11 +24,18 @@ export class CodeGenColumnServiceImpl implements CodeGenColumnService {
23
24
  }
24
25
 
25
26
  /** 查询代码生成字段配置。 */
26
- ListCodeGenColumn(request: ListCodeGenColumnRequest): Promise<ListCodeGenColumnResponse> {
27
- return service<ListCodeGenColumnRequest, ListCodeGenColumnResponse>({
27
+ async ListCodeGenColumn(request: ListCodeGenColumnRequest): Promise<ListCodeGenColumnResponse> {
28
+ const response = await service<ListCodeGenColumnRequest, ListCodeGenColumnResponse>({
28
29
  url: `${CODE_GEN_TABLE_URL}/${request.table_id}/column`,
29
30
  method: "get"
30
31
  });
32
+ return {
33
+ ...response,
34
+ code_gen_columns: (response.code_gen_columns ?? []).map(column => ({
35
+ ...column,
36
+ i18n_config: normalizeCodeGenLocaleConfigMap(column.i18n_config)
37
+ }))
38
+ };
31
39
  }
32
40
 
33
41
  /** 保存代码生成字段配置。 */
@@ -35,7 +43,13 @@ export class CodeGenColumnServiceImpl implements CodeGenColumnService {
35
43
  return service<SaveCodeGenColumnRequest, Empty>({
36
44
  url: `${CODE_GEN_TABLE_URL}/${request.table_id}/column`,
37
45
  method: "put",
38
- data: request
46
+ data: {
47
+ ...request,
48
+ code_gen_columns: request.code_gen_columns.map(column => ({
49
+ ...column,
50
+ i18n_config: serializeCodeGenLocaleConfigMap(column.i18n_config)
51
+ }))
52
+ }
39
53
  });
40
54
  }
41
55
  }
@@ -0,0 +1,18 @@
1
+ import type { CodeGenLocaleConfig } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_translation";
2
+
3
+ /** 代码生成国际化配置的 JSON 兼容形态。 */
4
+ type CodeGenLocaleConfigRecord = Record<string, CodeGenLocaleConfig>;
5
+
6
+ /** 将 REST 响应中的 JSON 对象规范为生成 RPC 声明使用的 Map。 */
7
+ export function normalizeCodeGenLocaleConfigMap(value: unknown): Map<string, CodeGenLocaleConfig> {
8
+ if (value instanceof Map) return new Map(value);
9
+ if (!value || typeof value !== "object") return new Map();
10
+ return new Map(Object.entries(value as CodeGenLocaleConfigRecord));
11
+ }
12
+
13
+ /** 将代码生成国际化 Map 转为后端可反序列化的 JSON 对象。 */
14
+ export function serializeCodeGenLocaleConfigMap(value: unknown): CodeGenLocaleConfigRecord {
15
+ if (value instanceof Map) return Object.fromEntries(value);
16
+ if (!value || typeof value !== "object") return {};
17
+ return value as CodeGenLocaleConfigRecord;
18
+ }
@@ -12,6 +12,7 @@ import {
12
12
  type UpdateCodeGenTableRequest
13
13
  } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/code_gen_table";
14
14
  import type { Empty } from "@liujitcn/kratos-admin-system/rpc/google/protobuf/empty";
15
+ import { normalizeCodeGenLocaleConfigMap, serializeCodeGenLocaleConfigMap } from "./code_gen_i18n";
15
16
 
16
17
  const CODE_GEN_TABLE_URL = "/v1/admin/code-gen/table";
17
18
  const CODE_GEN_DATABASE_TABLE_URL = "/v1/admin/code-gen/database/table";
@@ -37,11 +38,12 @@ export class CodeGenTableServiceImpl implements CodeGenTableService {
37
38
  }
38
39
 
39
40
  /** 查询代码生成表配置。 */
40
- GetCodeGenTable(request: GetCodeGenTableRequest): Promise<CodeGenTableForm> {
41
- return service<GetCodeGenTableRequest, CodeGenTableForm>({
41
+ async GetCodeGenTable(request: GetCodeGenTableRequest): Promise<CodeGenTableForm> {
42
+ const response = await service<GetCodeGenTableRequest, CodeGenTableForm>({
42
43
  url: `${CODE_GEN_TABLE_URL}/${request.id}`,
43
44
  method: "get"
44
45
  });
46
+ return { ...response, i18n_config: normalizeCodeGenLocaleConfigMap(response.i18n_config) };
45
47
  }
46
48
 
47
49
  /** 创建代码生成表配置。 */
@@ -49,7 +51,7 @@ export class CodeGenTableServiceImpl implements CodeGenTableService {
49
51
  return service<CodeGenTableForm | undefined, Empty>({
50
52
  url: CODE_GEN_TABLE_URL,
51
53
  method: "post",
52
- data: request.code_gen_table
54
+ data: serializeCodeGenTableForm(request.code_gen_table)
53
55
  });
54
56
  }
55
57
 
@@ -58,7 +60,7 @@ export class CodeGenTableServiceImpl implements CodeGenTableService {
58
60
  return service<CodeGenTableForm | undefined, Empty>({
59
61
  url: `${CODE_GEN_TABLE_URL}/${request.id}`,
60
62
  method: "put",
61
- data: request.code_gen_table
63
+ data: serializeCodeGenTableForm(request.code_gen_table)
62
64
  });
63
65
  }
64
66
 
@@ -72,3 +74,9 @@ export class CodeGenTableServiceImpl implements CodeGenTableService {
72
74
  }
73
75
 
74
76
  export const defCodeGenTableService = new CodeGenTableServiceImpl();
77
+
78
+ /** 将表配置中的 Map 转为 REST JSON 对象。 */
79
+ function serializeCodeGenTableForm(value?: CodeGenTableForm) {
80
+ if (!value) return value;
81
+ return { ...value, i18n_config: serializeCodeGenLocaleConfigMap(value.i18n_config) };
82
+ }