@liujitcn/kratos-admin-system 0.0.21 → 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 (106) hide show
  1. package/dist/package/declarations/src/api/system/base_language.d.ts +5 -4
  2. package/dist/package/declarations/src/api/system/base_translation.d.ts +7 -4
  3. package/dist/package/declarations/src/api/system/ops_monitoring.d.ts +19 -0
  4. package/dist/package/declarations/src/api/system/ops_monitoring_sse.d.ts +12 -0
  5. package/dist/package/declarations/src/components/DynamicTranslationCell.vue.d.ts +9 -32
  6. package/dist/package/declarations/src/components/DynamicTranslationEditor.vue.d.ts +3 -6
  7. package/dist/package/declarations/src/components/dynamicTranslation.d.ts +11 -17
  8. package/dist/package/declarations/src/locales/generated.d.ts +6536 -0
  9. package/dist/package/declarations/src/rpc/base/v1/ai_session.d.ts +12 -2
  10. package/dist/package/declarations/src/rpc/base/v1/ai_tool.d.ts +9 -1
  11. package/dist/package/declarations/src/rpc/base/v1/config.d.ts +35 -0
  12. package/dist/package/declarations/src/rpc/system/admin/v1/auth.d.ts +1 -1
  13. package/dist/package/declarations/src/rpc/system/admin/v1/base_config.d.ts +23 -7
  14. package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +7 -77
  15. package/dist/package/declarations/src/rpc/system/admin/v1/base_job.d.ts +9 -1
  16. package/dist/package/declarations/src/rpc/system/admin/v1/base_language.d.ts +7 -2
  17. package/dist/package/declarations/src/rpc/system/admin/v1/base_menu.d.ts +5 -40
  18. package/dist/package/declarations/src/rpc/system/admin/v1/base_migration.d.ts +6 -6
  19. package/dist/package/declarations/src/rpc/system/admin/v1/base_role.d.ts +13 -1
  20. package/dist/package/declarations/src/rpc/system/admin/v1/base_translation.d.ts +54 -81
  21. package/dist/package/declarations/src/rpc/system/admin/v1/base_user.d.ts +11 -1
  22. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen.d.ts +11 -11
  23. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_table.d.ts +11 -1
  24. package/dist/package/declarations/src/rpc/system/admin/v1/common.d.ts +13 -0
  25. package/dist/package/declarations/src/rpc/system/admin/v1/ops_monitoring.d.ts +222 -0
  26. package/dist/package/declarations/src/views/tool/ops-monitoring/index.vue.d.ts +3 -0
  27. package/dist/package/src/api/base/ai_message.ts +2 -2
  28. package/dist/package/src/api/system/base_language.ts +13 -15
  29. package/dist/package/src/api/system/base_translation.ts +17 -6
  30. package/dist/package/src/api/system/ops_monitoring.ts +88 -0
  31. package/dist/package/src/api/system/ops_monitoring_sse.ts +49 -0
  32. package/dist/package/src/components/DynamicTranslationCell.vue +199 -126
  33. package/dist/package/src/components/DynamicTranslationEditor.vue +109 -78
  34. package/dist/package/src/components/dynamicTranslation.ts +11 -31
  35. package/dist/package/src/locales/README.md +7 -5
  36. package/dist/package/src/locales/en-US.json +876 -872
  37. package/dist/package/src/locales/es-ES.json +900 -895
  38. package/dist/package/src/locales/fr-FR.json +896 -891
  39. package/dist/package/src/locales/generated.ts +22 -0
  40. package/dist/package/src/locales/ja-JP.json +876 -872
  41. package/dist/package/src/locales/ko-KR.json +881 -876
  42. package/dist/package/src/locales/zh-CN.json +876 -872
  43. package/dist/package/src/locales/zh-TW.json +876 -871
  44. package/dist/package/src/module.ts +3 -17
  45. package/dist/package/src/rpc/base/v1/ai_session.ts +13 -2
  46. package/dist/package/src/rpc/base/v1/ai_tool.ts +10 -1
  47. package/dist/package/src/rpc/base/v1/config.ts +47 -0
  48. package/dist/package/src/rpc/system/admin/v1/auth.ts +1 -1
  49. package/dist/package/src/rpc/system/admin/v1/base_config.ts +24 -7
  50. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +7 -79
  51. package/dist/package/src/rpc/system/admin/v1/base_job.ts +10 -1
  52. package/dist/package/src/rpc/system/admin/v1/base_language.ts +8 -2
  53. package/dist/package/src/rpc/system/admin/v1/base_menu.ts +5 -41
  54. package/dist/package/src/rpc/system/admin/v1/base_migration.ts +8 -8
  55. package/dist/package/src/rpc/system/admin/v1/base_role.ts +14 -1
  56. package/dist/package/src/rpc/system/admin/v1/base_translation.ts +54 -81
  57. package/dist/package/src/rpc/system/admin/v1/base_user.ts +12 -1
  58. package/dist/package/src/rpc/system/admin/v1/code_gen.ts +11 -11
  59. package/dist/package/src/rpc/system/admin/v1/code_gen_table.ts +12 -1
  60. package/dist/package/src/rpc/system/admin/v1/common.ts +21 -0
  61. package/dist/package/src/rpc/system/admin/v1/ops_monitoring.ts +255 -0
  62. package/dist/package/src/views/ai/chat/components/ChatPanel.vue +36 -36
  63. package/dist/package/src/views/ai/chat/components/SessionPanel.vue +6 -6
  64. package/dist/package/src/views/ai/chat/components/XSender.vue +20 -20
  65. package/dist/package/src/views/ai/chat/index.vue +33 -32
  66. package/dist/package/src/views/ai/chat/message.ts +16 -15
  67. package/dist/package/src/views/base/api/index.vue +55 -56
  68. package/dist/package/src/views/base/area/index.vue +18 -19
  69. package/dist/package/src/views/base/config/index.vue +143 -133
  70. package/dist/package/src/views/base/dept/index.vue +42 -43
  71. package/dist/package/src/views/base/dict/index.vue +49 -45
  72. package/dist/package/src/views/base/dict/item.vue +54 -49
  73. package/dist/package/src/views/base/job/index.vue +51 -52
  74. package/dist/package/src/views/base/job/log.vue +18 -18
  75. package/dist/package/src/views/{tool → base}/language/index.vue +51 -47
  76. package/dist/package/src/views/base/log/index.vue +40 -40
  77. package/dist/package/src/views/base/menu/index.vue +220 -177
  78. package/dist/package/src/views/base/migration/index.vue +24 -24
  79. package/dist/package/src/views/base/post/index.vue +42 -43
  80. package/dist/package/src/views/base/role/index.vue +54 -55
  81. package/dist/package/src/views/base/tenant/index.vue +42 -43
  82. package/dist/package/src/views/base/user/components/dept-tree.vue +1 -1
  83. package/dist/package/src/views/base/user/index.vue +69 -71
  84. package/dist/package/src/views/profile/components/base.vue +9 -9
  85. package/dist/package/src/views/profile/components/password.vue +19 -20
  86. package/dist/package/src/views/profile/components/security.vue +20 -20
  87. package/dist/package/src/views/profile/index.vue +3 -3
  88. package/dist/package/src/views/tool/api-doc/index.vue +1 -1
  89. package/dist/package/src/views/tool/code-gen/code-preview/index.vue +13 -13
  90. package/dist/package/src/views/tool/code-gen/columns/index.vue +89 -89
  91. package/dist/package/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue +5 -5
  92. package/dist/package/src/views/tool/code-gen/components/CodeGenProgressDialog.vue +21 -21
  93. package/dist/package/src/views/tool/code-gen/components/CodePreviewPane.vue +5 -5
  94. package/dist/package/src/views/tool/code-gen/config.ts +60 -60
  95. package/dist/package/src/views/tool/code-gen/preview/data.ts +2 -2
  96. package/dist/package/src/views/tool/code-gen/preview/index.vue +30 -31
  97. package/dist/package/src/views/tool/code-gen/proto/index.vue +43 -43
  98. package/dist/package/src/views/tool/code-gen/table/index.vue +95 -95
  99. package/dist/package/src/views/tool/ops-monitoring/index.vue +1175 -0
  100. package/dist/package/src/views/tool/project-doc/index.vue +7 -7
  101. package/package.json +2 -2
  102. package/dist/package/declarations/src/rpc/base/v1/enum.d.ts +0 -43
  103. package/dist/package/declarations/src/rpc/system/common/v1/enum.d.ts +0 -67
  104. package/dist/package/src/rpc/base/v1/enum.ts +0 -54
  105. package/dist/package/src/rpc/system/common/v1/enum.ts +0 -80
  106. /package/dist/package/declarations/src/views/{tool → base}/language/index.vue.d.ts +0 -0
@@ -2,28 +2,28 @@
2
2
  <div class="table-box">
3
3
  <ProTable ref="proTable" row-key="id" :columns="columns" :request-api="requestBaseJobLogTable" />
4
4
 
5
- <ProDialog v-model="dialog.visible" :title="t('system.jobLog.title.detail')" width="1200px" @close="handleCloseDialog">
5
+ <ProDialog v-model="dialog.visible" :title="t('system.base.job.log.title.detail')" width="1200px" @close="handleCloseDialog">
6
6
  <div class="detail-container">
7
- <el-descriptions :title="t('system.jobLog.section.basic')" border :column="2">
8
- <el-descriptions-item :label="t('system.common.field.status')">
7
+ <el-descriptions :title="t('system.base.job.log.section.basic')" border :column="2">
8
+ <el-descriptions-item :label="t('common.field.status')">
9
9
  <DictLabel v-model="detail.status" code="base_job_log_status" />
10
10
  </el-descriptions-item>
11
- <el-descriptions-item :label="t('system.jobLog.field.processTime')">{{ detail.process_time }}</el-descriptions-item>
12
- <el-descriptions-item :label="t('system.jobLog.field.executeTime')">{{ detail.execute_time }}</el-descriptions-item>
11
+ <el-descriptions-item :label="t('system.base.job.log.field.process_time')">{{ detail.process_time }}</el-descriptions-item>
12
+ <el-descriptions-item :label="t('system.base.job.log.field.execute_time')">{{ detail.execute_time }}</el-descriptions-item>
13
13
  </el-descriptions>
14
14
 
15
- <el-descriptions :title="t('system.jobLog.section.execution')" border :column="1" class="mt-4">
16
- <el-descriptions-item :label="t('system.jobLog.field.input')">
15
+ <el-descriptions :title="t('system.base.job.log.section.execution')" border :column="1" class="mt-4">
16
+ <el-descriptions-item :label="t('system.base.job.log.field.input')">
17
17
  <pre class="code-block">{{ formatJson(detail.input) }}</pre>
18
18
  </el-descriptions-item>
19
- <el-descriptions-item :label="t('system.jobLog.field.output')">
19
+ <el-descriptions-item :label="t('system.base.job.log.field.output')">
20
20
  <pre class="code-block">{{ formatJson(detail.output) }}</pre>
21
21
  </el-descriptions-item>
22
22
  </el-descriptions>
23
23
 
24
24
  <el-alert
25
- v-if="detail.status === BaseJobLogStatus.FAIL"
26
- :title="t('system.jobLog.field.error')"
25
+ v-if="detail.status === BaseJobLogStatus.BASE_JOB_LOG_STATUS_FAIL"
26
+ :title="t('system.base.job.log.field.error')"
27
27
  type="error"
28
28
  :description="detail.error"
29
29
  class="mt-4"
@@ -49,7 +49,7 @@ import { defBaseJobService } from "@liujitcn/kratos-admin-system/api/system/base
49
49
  import { buildPageRequest } from "@liujitcn/kratos-admin-core/table";
50
50
  import { formatJson } from "@liujitcn/kratos-admin-core/format";
51
51
  import type { BaseJobLog, PageBaseJobLogRequest } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_job";
52
- import { BaseJobLogStatus } from "@liujitcn/kratos-admin-system/rpc/system/common/v1/enum";
52
+ import { BaseJobLogStatus } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_job";
53
53
  import { t } from "@liujitcn/kratos-admin-core";
54
54
 
55
55
  defineOptions({
@@ -79,7 +79,7 @@ function createDefaultDetail(): BaseJobLog {
79
79
  /** 错误信息 */
80
80
  error: "",
81
81
  /** 状态 */
82
- status: BaseJobLogStatus.UNKNOWN_BJLS,
82
+ status: BaseJobLogStatus.BASE_JOB_LOG_STATUS_UNSPECIFIED,
83
83
  /** 消耗时间 */
84
84
  process_time: "",
85
85
  /** 执行时间 */
@@ -93,14 +93,14 @@ const detail = reactive<BaseJobLog>(createDefaultDetail());
93
93
  const columns = computed<ColumnProps[]>(() => [
94
94
  {
95
95
  prop: "status",
96
- label: t("system.common.field.status"),
96
+ label: t("common.field.status"),
97
97
  minWidth: 120,
98
98
  dictCode: "base_job_log_status",
99
99
  search: { el: "select" }
100
100
  },
101
101
  {
102
102
  prop: "execute_time",
103
- label: t("system.jobLog.field.executeTime"),
103
+ label: t("system.base.job.log.field.execute_time"),
104
104
  minWidth: 180,
105
105
  search: {
106
106
  el: "date-picker",
@@ -109,16 +109,16 @@ const columns = computed<ColumnProps[]>(() => [
109
109
  editable: false,
110
110
  class: "!w-[240px]",
111
111
  rangeSeparator: "~",
112
- startPlaceholder: t("system.common.placeholder.startDate"),
113
- endPlaceholder: t("system.common.placeholder.endDate"),
112
+ startPlaceholder: t("common.placeholder.start_date"),
113
+ endPlaceholder: t("common.placeholder.end_date"),
114
114
  valueFormat: "YYYY-MM-DD"
115
115
  }
116
116
  }
117
117
  },
118
- { prop: "process_time", label: t("system.jobLog.field.processTimeMs"), minWidth: 130, align: "right" },
118
+ { prop: "process_time", label: t("system.base.job.log.field.process_time_ms"), minWidth: 130, align: "right" },
119
119
  {
120
120
  prop: "detailAction",
121
- label: t("system.common.field.action"),
121
+ label: t("common.field.action"),
122
122
  width: 100,
123
123
  fixed: "right",
124
124
  cellType: "actions",
@@ -12,12 +12,11 @@
12
12
  <FormDialog
13
13
  v-model="dialog.visible"
14
14
  ref="formDialogRef"
15
- :title="t(dialog.editing ? 'system.language.action.edit' : 'system.language.action.create')"
15
+ :title="t(dialog.editing ? 'system.base.language.action.edit' : 'system.base.language.action.create')"
16
16
  width="620px"
17
17
  :model="formData"
18
18
  :fields="formFields"
19
19
  :rules="rules"
20
- label-width="110px"
21
20
  @confirm="handleSubmit"
22
21
  @close="handleCloseDialog"
23
22
  />
@@ -34,7 +33,7 @@ import FormDialog from "@liujitcn/kratos-admin-core/components/Dialog/FormDialog
34
33
  import type { ProFormField, ProFormOption } from "@liujitcn/kratos-admin-core/components/ProForm/interface";
35
34
  import { useAuthButtons } from "@liujitcn/kratos-admin-core/auth";
36
35
  import { buildPageRequest, normalizeSelectedIds } from "@liujitcn/kratos-admin-core/table";
37
- import { t } from "@liujitcn/kratos-admin-core";
36
+ import { applyLanguageConfig, defLanguageService, t } from "@liujitcn/kratos-admin-core";
38
37
  import { defBaseLanguageService, invalidateEnabledBaseLanguages } from "@liujitcn/kratos-admin-system/api/system/base_language";
39
38
  import type { BaseLanguage, BaseLanguageForm, PageBaseLanguageRequest } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_language";
40
39
  import { Status } from "@liujitcn/kratos-admin-system/rpc/common/v1/enum";
@@ -51,24 +50,23 @@ const formData = reactive<BaseLanguageForm>({
51
50
  language_name: "",
52
51
  native_name: "",
53
52
  sort: 100,
54
- is_primary: false,
55
53
  status: Status.ENABLE
56
54
  });
57
55
 
58
56
  const rules = computed(() => ({
59
57
  language_code: [
60
- { required: true, message: t("system.language.placeholder.code"), trigger: "blur" },
61
- { max: 16, message: t("system.common.validation.maxLength", { field: t("system.language.field.code"), max: 16 }), trigger: "blur" }
58
+ { required: true, message: t("system.base.language.placeholder.code"), trigger: "blur" },
59
+ { max: 16, message: t("common.validation.max_length", { field: t("system.base.language.field.code"), max: 16 }), trigger: "blur" }
62
60
  ],
63
61
  language_name: [
64
- { required: true, message: t("system.language.placeholder.name"), trigger: "blur" },
65
- { max: 50, message: t("system.common.validation.maxLength", { field: t("system.language.field.name"), max: 50 }), trigger: "blur" }
62
+ { required: true, message: t("system.base.language.placeholder.name"), trigger: "blur" },
63
+ { max: 50, message: t("common.validation.max_length", { field: t("system.base.language.field.name"), max: 50 }), trigger: "blur" }
66
64
  ],
67
65
  native_name: [
68
- { required: true, message: t("system.language.placeholder.nativeName"), trigger: "blur" },
69
- { max: 50, message: t("system.common.validation.maxLength", { field: t("system.language.field.nativeName"), max: 50 }), trigger: "blur" }
66
+ { required: true, message: t("system.base.language.placeholder.native_name"), trigger: "blur" },
67
+ { max: 50, message: t("common.validation.max_length", { field: t("system.base.language.field.native_name"), max: 50 }), trigger: "blur" }
70
68
  ],
71
- sort: [{ required: true, message: t("system.language.placeholder.sort"), trigger: "change" }]
69
+ sort: [{ required: true, message: t("system.base.language.placeholder.sort"), trigger: "change" }]
72
70
  }));
73
71
 
74
72
  const statusOptions = computed<ProFormOption[]>(() => [
@@ -77,22 +75,20 @@ const statusOptions = computed<ProFormOption[]>(() => [
77
75
  ]);
78
76
 
79
77
  const formFields = computed<ProFormField[]>(() => [
80
- { prop: "language_code", label: t("system.language.field.code"), component: "input", props: { placeholder: t("system.language.placeholder.code"), disabled: dialog.editing } },
81
- { prop: "language_name", label: t("system.language.field.name"), component: "input", props: { placeholder: t("system.language.placeholder.name") } },
82
- { prop: "native_name", label: t("system.language.field.nativeName"), component: "input", props: { placeholder: t("system.language.placeholder.nativeName") } },
83
- { prop: "sort", label: t("system.language.field.sort"), component: "input-number", props: { min: 0, controlsPosition: "right", style: { width: "100%" } } },
84
- { prop: "is_primary", label: t("system.language.field.primary"), component: "switch" },
85
- { prop: "status", label: t("system.language.field.status"), component: "radio-group", options: statusOptions.value }
78
+ { prop: "language_code", label: t("system.base.language.field.code"), component: "input", props: { placeholder: t("system.base.language.placeholder.code"), disabled: dialog.editing } },
79
+ { prop: "language_name", label: t("system.base.language.field.name"), component: "input", props: { placeholder: t("system.base.language.placeholder.name") } },
80
+ { prop: "native_name", label: t("system.base.language.field.native_name"), component: "input", props: { placeholder: t("system.base.language.placeholder.native_name") } },
81
+ { prop: "sort", label: t("system.base.language.field.sort"), component: "input-number", props: { min: 0, controlsPosition: "right", style: { width: "100%" } } },
82
+ { prop: "status", label: t("system.base.language.field.status"), component: "radio-group", options: statusOptions.value }
86
83
  ]);
87
84
 
88
85
  const columns = computed<ColumnProps[]>(() => [
89
- { prop: "native_name", label: t("system.language.field.nativeName"), minWidth: 130 },
90
- { type: "index", label: t("system.common.field.index"), width: 70 },
91
- { prop: "language_name", label: t("system.language.field.name"), minWidth: 130, search: { el: "input" } },
92
- { prop: "language_code", label: t("system.language.field.code"), minWidth: 120, search: { el: "input" } },
86
+ { prop: "native_name", label: t("system.base.language.field.native_name"), minWidth: 130 },
87
+ { prop: "language_name", label: t("system.base.language.field.name"), minWidth: 130, search: { el: "input" } },
88
+ { prop: "language_code", label: t("system.base.language.field.code"), minWidth: 120, search: { el: "input" } },
93
89
  {
94
90
  prop: "is_primary",
95
- label: t("system.language.field.primary"),
91
+ label: t("system.base.language.field.primary"),
96
92
  minWidth: 100,
97
93
  cellType: "status",
98
94
  statusProps: {
@@ -100,13 +96,13 @@ const columns = computed<ColumnProps[]>(() => [
100
96
  inactiveValue: false,
101
97
  activeText: t("common.status.enabled"),
102
98
  inactiveText: t("common.status.disabled"),
103
- disabled: () => !BUTTONS.value["tool:language:update"],
99
+ disabled: () => !BUTTONS.value["base:language:primary"],
104
100
  beforeChange: scope => handleBeforeSetPrimary(scope.row as BaseLanguage)
105
101
  }
106
102
  },
107
103
  {
108
104
  prop: "status",
109
- label: t("system.language.field.status"),
105
+ label: t("system.base.language.field.status"),
110
106
  minWidth: 100,
111
107
  search: { el: "select" },
112
108
  cellType: "status",
@@ -115,28 +111,28 @@ const columns = computed<ColumnProps[]>(() => [
115
111
  inactiveValue: Status.DISABLE,
116
112
  activeText: t("common.status.enabled"),
117
113
  inactiveText: t("common.status.disabled"),
118
- disabled: () => !BUTTONS.value["tool:language:status"],
114
+ disabled: () => !BUTTONS.value["base:language:status"],
119
115
  beforeChange: scope => handleBeforeSetStatus(scope.row as BaseLanguage)
120
116
  }
121
117
  },
122
- { prop: "sort", label: t("system.language.field.sort"), width: 80 },
123
- { prop: "created_at", label: t("system.common.field.createdAt"), minWidth: 180 },
118
+ { prop: "sort", label: t("system.base.language.field.sort"), width: 80 },
119
+ { prop: "created_at", label: t("common.field.created_at"), minWidth: 180 },
124
120
  {
125
121
  prop: "operation",
126
- label: t("system.common.field.operation"),
122
+ label: t("common.field.operation"),
127
123
  width: 150,
128
124
  fixed: "right",
129
125
  cellType: "actions",
130
126
  actions: [
131
- { label: t("common.action.edit"), type: "primary", link: true, icon: EditPen, hidden: () => !BUTTONS.value["tool:language:update"], onClick: scope => handleOpenDialog((scope.row as BaseLanguage).id) },
132
- { label: t("common.action.delete"), type: "danger", link: true, icon: Delete, hidden: () => !BUTTONS.value["tool:language:delete"], onClick: scope => handleDelete(scope.row as BaseLanguage) }
127
+ { label: t("common.action.edit"), type: "primary", link: true, icon: EditPen, hidden: () => !BUTTONS.value["base:language:update"], onClick: scope => handleOpenDialog((scope.row as BaseLanguage).id) },
128
+ { label: t("common.action.delete"), type: "danger", link: true, icon: Delete, hidden: () => !BUTTONS.value["base:language:delete"], onClick: scope => handleDelete(scope.row as BaseLanguage) }
133
129
  ]
134
130
  }
135
131
  ]);
136
132
 
137
133
  const headerActions = computed<HeaderActionProps[]>(() => [
138
- { label: t("common.action.create"), type: "success", icon: CirclePlus, hidden: () => !BUTTONS.value["tool:language:create"], onClick: () => handleOpenDialog() },
139
- { label: t("common.action.delete"), type: "danger", icon: Delete, hidden: () => !BUTTONS.value["tool:language:delete"], disabled: scope => !scope.selectedList.length, onClick: scope => handleDelete(scope.selectedList as BaseLanguage[]) }
134
+ { label: t("common.action.create"), type: "success", icon: CirclePlus, hidden: () => !BUTTONS.value["base:language:create"], onClick: () => handleOpenDialog() },
135
+ { label: t("common.action.delete"), type: "danger", icon: Delete, hidden: () => !BUTTONS.value["base:language:delete"], disabled: scope => !scope.selectedList.length, onClick: scope => handleDelete(scope.selectedList as BaseLanguage[]) }
140
136
  ]);
141
137
 
142
138
  /** 请求语言分页列表。 */
@@ -164,7 +160,7 @@ function handleCloseDialog() {
164
160
  function resetForm() {
165
161
  formDialogRef.value?.resetFields();
166
162
  formDialogRef.value?.clearValidate();
167
- Object.assign(formData, { id: 0, language_code: "", language_name: "", native_name: "", sort: 100, is_primary: false, status: Status.ENABLE });
163
+ Object.assign(formData, { id: 0, language_code: "", language_name: "", native_name: "", sort: 100, status: Status.ENABLE });
168
164
  }
169
165
 
170
166
  /** 提交语言表单。 */
@@ -177,7 +173,8 @@ function handleSubmit() {
177
173
  : defBaseLanguageService.CreateBaseLanguage({ base_language: payload });
178
174
  request.then(() => {
179
175
  invalidateEnabledBaseLanguages();
180
- ElMessage.success(t(payload.id ? "system.common.message.updateSuccess" : "system.common.message.createSuccess", { resource: t("system.language.resource") }));
176
+ void refreshAdminLanguageConfig();
177
+ ElMessage.success(t(payload.id ? "common.message.update_success" : "common.message.create_success", { resource: t("system.base.language.resource") }));
181
178
  handleCloseDialog();
182
179
  proTable.value?.getTableList();
183
180
  });
@@ -187,11 +184,11 @@ function handleSubmit() {
187
184
  /** 设置语言状态前保护主语言。 */
188
185
  function handleBeforeSetStatus(row: BaseLanguage) {
189
186
  if (row.is_primary && row.status === Status.ENABLE) {
190
- ElMessage.warning(t("system.language.message.primaryCannotDisable"));
187
+ ElMessage.warning(t("system.base.language.message.primary_cannot_disable"));
191
188
  return Promise.resolve(false);
192
189
  }
193
190
  return ElMessageBox.confirm(
194
- t("system.language.message.confirmStatus", { action: row.status === Status.ENABLE ? t("common.status.disabled") : t("common.status.enabled"), name: row.native_name }),
191
+ t("system.base.language.message.confirm_status", { action: row.status === Status.ENABLE ? t("common.status.disabled") : t("common.status.enabled"), name: row.native_name }),
195
192
  t("common.title.warning"),
196
193
  { type: "warning", confirmButtonText: t("common.action.confirm"), cancelButtonText: t("common.action.cancel") }
197
194
  ).then(
@@ -200,6 +197,7 @@ function handleBeforeSetStatus(row: BaseLanguage) {
200
197
  .SetBaseLanguageStatus({ id: row.id, status: row.status === Status.ENABLE ? Status.DISABLE : Status.ENABLE })
201
198
  .then(() => {
202
199
  invalidateEnabledBaseLanguages();
200
+ void refreshAdminLanguageConfig();
203
201
  return true;
204
202
  }),
205
203
  () => false
@@ -210,20 +208,16 @@ function handleBeforeSetStatus(row: BaseLanguage) {
210
208
  function handleBeforeSetPrimary(row: BaseLanguage) {
211
209
  if (row.is_primary) return Promise.resolve(false);
212
210
  return ElMessageBox.confirm(
213
- t("system.language.message.confirmPrimary", { name: row.native_name }),
211
+ t("system.base.language.message.confirm_primary", { name: row.native_name }),
214
212
  t("common.title.warning"),
215
213
  { type: "warning", confirmButtonText: t("common.action.confirm"), cancelButtonText: t("common.action.cancel") }
216
214
  ).then(
217
215
  () =>
218
216
  defBaseLanguageService
219
- .UpdateBaseLanguage({
220
- base_language: {
221
- ...row,
222
- is_primary: true
223
- }
224
- })
217
+ .SetBaseLanguagePrimary({ id: row.id })
225
218
  .then(() => {
226
219
  invalidateEnabledBaseLanguages();
220
+ void refreshAdminLanguageConfig();
227
221
  proTable.value?.getTableList();
228
222
  return true;
229
223
  }),
@@ -235,22 +229,32 @@ function handleBeforeSetPrimary(row: BaseLanguage) {
235
229
  function handleDelete(selected?: BaseLanguage | BaseLanguage[] | number | string | Array<number | string>) {
236
230
  const rows = Array.isArray(selected) ? (selected.filter(item => typeof item === "object") as BaseLanguage[]) : selected && typeof selected === "object" ? [selected] : [];
237
231
  if (rows.some(item => item.is_primary)) {
238
- ElMessage.warning(t("system.language.message.primaryCannotDelete"));
232
+ ElMessage.warning(t("system.base.language.message.primary_cannot_delete"));
239
233
  return;
240
234
  }
241
235
  const ids = (rows.length ? rows.map(item => item.id) : normalizeSelectedIds(selected as number | string | Array<number | string>)).join(",");
242
236
  if (!ids) {
243
- ElMessage.warning(t("system.common.message.selectDeleteItem"));
237
+ ElMessage.warning(t("common.message.select_delete_item"));
244
238
  return;
245
239
  }
246
- ElMessageBox.confirm(t("system.language.message.confirmDelete", { name: rows.length === 1 ? rows[0].native_name : ids }), t("common.title.warning"), {
240
+ ElMessageBox.confirm(t("system.base.language.message.confirm_delete", { name: rows.length === 1 ? rows[0].native_name : ids }), t("common.title.warning"), {
247
241
  type: "warning",
248
242
  confirmButtonText: t("common.action.confirm"),
249
243
  cancelButtonText: t("common.action.cancel")
250
244
  }).then(() => defBaseLanguageService.DeleteBaseLanguage({ id: ids })).then(() => {
251
245
  invalidateEnabledBaseLanguages();
252
- ElMessage.success(t("system.common.message.deleteSuccess", { resource: t("system.language.resource") }));
246
+ void refreshAdminLanguageConfig();
247
+ ElMessage.success(t("common.message.delete_success", { resource: t("system.base.language.resource") }));
253
248
  proTable.value?.getTableList();
254
249
  });
255
250
  }
251
+
252
+ /** refreshAdminLanguageConfig 刷新核心语言切换器的运行时配置。 */
253
+ async function refreshAdminLanguageConfig() {
254
+ try {
255
+ applyLanguageConfig(await defLanguageService.OptionLanguage({}));
256
+ } catch {
257
+ // 语言管理操作成功但公共语言查询失败时,保留当前切换器配置。
258
+ }
259
+ }
256
260
  </script>
@@ -2,83 +2,83 @@
2
2
  <div class="table-box">
3
3
  <ProTable ref="proTable" row-key="id" :columns="columns" :request-api="requestBaseLogTable" />
4
4
 
5
- <ProDialog v-model="dialog.visible" :title="t('system.log.title.detail')" width="1500px" @close="handleCloseDialog">
5
+ <ProDialog v-model="dialog.visible" :title="t('system.base.log.title.detail')" width="1500px" @close="handleCloseDialog">
6
6
  <div class="detail-container">
7
- <el-descriptions :title="t('system.log.section.basic')" border :column="2">
8
- <el-descriptions-item :label="t('system.log.field.result')">
7
+ <el-descriptions :title="t('system.base.log.section.basic')" border :column="2">
8
+ <el-descriptions-item :label="t('system.base.log.field.result')">
9
9
  <el-tag :type="detail.is_success ? 'success' : 'danger'" effect="light">
10
- {{ t(detail.is_success ? "system.log.status.success" : "system.log.status.failed") }}
10
+ {{ t(detail.is_success ? "system.base.log.status.success" : "system.base.log.status.failed") }}
11
11
  </el-tag>
12
12
  </el-descriptions-item>
13
- <el-descriptions-item :label="t('system.log.field.statusCode')">
13
+ <el-descriptions-item :label="t('system.base.log.field.status_code')">
14
14
  <el-tag :type="statusCodeColor" effect="light">{{ detail.status_code || "--" }}</el-tag>
15
15
  </el-descriptions-item>
16
- <el-descriptions-item :label="t('system.log.field.costTime')">{{ detail.cost_time || "--" }}</el-descriptions-item>
17
- <el-descriptions-item :label="t('system.log.field.requestTime')">{{
16
+ <el-descriptions-item :label="t('system.base.log.field.cost_time')">{{ detail.cost_time || "--" }}</el-descriptions-item>
17
+ <el-descriptions-item :label="t('system.base.log.field.request_time')">{{
18
18
  detail.request_time || "--"
19
19
  }}</el-descriptions-item>
20
20
  </el-descriptions>
21
21
 
22
22
  <el-descriptions
23
- :title="t('system.log.section.request')"
23
+ :title="t('system.base.log.section.request')"
24
24
  border
25
25
  :column="2"
26
26
  direction="vertical"
27
27
  class="mt-4 compact-descriptions"
28
28
  >
29
- <el-descriptions-item :label="t('system.log.field.requestId')">{{ detail.request_id || "--" }}</el-descriptions-item>
30
- <el-descriptions-item :label="t('system.log.field.operation')">
29
+ <el-descriptions-item :label="t('system.base.log.field.request_id')">{{ detail.request_id || "--" }}</el-descriptions-item>
30
+ <el-descriptions-item :label="t('system.base.log.field.operation')">
31
31
  <el-tag effect="plain">{{ detail.operation || "--" }}</el-tag>
32
32
  </el-descriptions-item>
33
- <el-descriptions-item :label="t('system.log.field.method')">
33
+ <el-descriptions-item :label="t('system.base.log.field.method')">
34
34
  <el-tag effect="plain">{{ detail.method || "--" }}</el-tag>
35
35
  </el-descriptions-item>
36
- <el-descriptions-item :label="t('system.log.field.path')">{{ detail.path || "--" }}</el-descriptions-item>
37
- <el-descriptions-item v-if="detail.request_uri" :label="t('system.log.field.requestUri')" :span="2">{{
36
+ <el-descriptions-item :label="t('system.base.log.field.path')">{{ detail.path || "--" }}</el-descriptions-item>
37
+ <el-descriptions-item v-if="detail.request_uri" :label="t('system.base.log.field.request_uri')" :span="2">{{
38
38
  detail.request_uri
39
39
  }}</el-descriptions-item>
40
- <el-descriptions-item v-if="detail.referer" :label="t('system.log.field.referer')" :span="2">{{
40
+ <el-descriptions-item v-if="detail.referer" :label="t('system.base.log.field.referer')" :span="2">{{
41
41
  detail.referer
42
42
  }}</el-descriptions-item>
43
- <el-descriptions-item :label="t('system.log.field.requestHeader')" :span="2">
43
+ <el-descriptions-item :label="t('system.base.log.field.request_header')" :span="2">
44
44
  <pre class="code-block">{{ formatPayload(detail.request_header) }}</pre>
45
45
  </el-descriptions-item>
46
- <el-descriptions-item :label="t('system.log.field.requestBody')" :span="2">
46
+ <el-descriptions-item :label="t('system.base.log.field.request_body')" :span="2">
47
47
  <pre class="code-block">{{ formatPayload(detail.request_body) }}</pre>
48
48
  </el-descriptions-item>
49
- <el-descriptions-item :label="t('system.log.field.requestResult')" :span="2">
49
+ <el-descriptions-item :label="t('system.base.log.field.request_result')" :span="2">
50
50
  <pre class="code-block">{{ formatPayload(detail.response) }}</pre>
51
51
  </el-descriptions-item>
52
52
  </el-descriptions>
53
53
 
54
- <el-descriptions :title="t('system.log.section.user')" border :column="2" class="mt-4">
55
- <el-descriptions-item :label="t('system.log.field.userId')">{{ detail.user_id || "--" }}</el-descriptions-item>
56
- <el-descriptions-item :label="t('system.log.field.userName')">{{ detail.user_name || "--" }}</el-descriptions-item>
57
- <el-descriptions-item :label="t('system.log.field.clientIp')">{{ detail.client_ip || "--" }}</el-descriptions-item>
58
- <el-descriptions-item :label="t('system.log.field.location')">{{ detail.location || "--" }}</el-descriptions-item>
54
+ <el-descriptions :title="t('system.base.log.section.user')" border :column="2" class="mt-4">
55
+ <el-descriptions-item :label="t('system.base.log.field.user_id')">{{ detail.user_id || "--" }}</el-descriptions-item>
56
+ <el-descriptions-item :label="t('system.base.log.field.user_name')">{{ detail.user_name || "--" }}</el-descriptions-item>
57
+ <el-descriptions-item :label="t('system.base.log.field.client_ip')">{{ detail.client_ip || "--" }}</el-descriptions-item>
58
+ <el-descriptions-item :label="t('system.base.log.field.location')">{{ detail.location || "--" }}</el-descriptions-item>
59
59
  </el-descriptions>
60
60
 
61
61
  <el-descriptions
62
- :title="t('system.log.section.client')"
62
+ :title="t('system.base.log.section.client')"
63
63
  border
64
64
  :column="2"
65
65
  direction="vertical"
66
66
  class="mt-4 compact-descriptions"
67
67
  >
68
- <el-descriptions-item :label="t('system.log.field.browser')">
68
+ <el-descriptions-item :label="t('system.base.log.field.browser')">
69
69
  {{ [detail.browser_name, detail.browser_version].filter(Boolean).join(" ") || "--" }}
70
70
  </el-descriptions-item>
71
- <el-descriptions-item :label="t('system.log.field.os')">
71
+ <el-descriptions-item :label="t('system.base.log.field.os')">
72
72
  {{ [detail.os_name, detail.os_version].filter(Boolean).join(" ") || "--" }}
73
73
  </el-descriptions-item>
74
- <el-descriptions-item :label="t('system.log.field.clientName')">{{ detail.client_name || "--" }}</el-descriptions-item>
75
- <el-descriptions-item :label="t('system.log.field.clientId')">{{ detail.client_id || "--" }}</el-descriptions-item>
74
+ <el-descriptions-item :label="t('system.base.log.field.client_name')">{{ detail.client_name || "--" }}</el-descriptions-item>
75
+ <el-descriptions-item :label="t('system.base.log.field.client_id')">{{ detail.client_id || "--" }}</el-descriptions-item>
76
76
  <el-descriptions-item label="User Agent" :span="2">{{ detail.user_agent || "--" }}</el-descriptions-item>
77
77
  </el-descriptions>
78
78
 
79
79
  <el-alert
80
80
  v-if="!detail.is_success"
81
- :title="t('system.log.field.reason')"
81
+ :title="t('system.base.log.field.reason')"
82
82
  type="error"
83
83
  :description="detail.reason"
84
84
  class="mt-4"
@@ -220,19 +220,19 @@ function formatPayload(value: string): string {
220
220
  const columns = computed<ColumnProps[]>(() => [
221
221
  {
222
222
  prop: "operation",
223
- label: t("system.log.field.operation"),
223
+ label: t("system.base.log.field.operation"),
224
224
  minWidth: 240,
225
225
  search: { el: "input" }
226
226
  },
227
227
  {
228
228
  prop: "status_code",
229
- label: t("system.log.field.statusCode"),
229
+ label: t("system.base.log.field.status_code"),
230
230
  minWidth: 100,
231
231
  search: { el: "input-number", props: { min: 0, controlsPosition: "right" } }
232
232
  },
233
233
  {
234
234
  prop: "request_time",
235
- label: t("system.log.field.requestTime"),
235
+ label: t("system.base.log.field.request_time"),
236
236
  minWidth: 140,
237
237
  search: {
238
238
  el: "date-picker",
@@ -241,21 +241,21 @@ const columns = computed<ColumnProps[]>(() => [
241
241
  editable: false,
242
242
  class: "!w-[240px]",
243
243
  rangeSeparator: "~",
244
- startPlaceholder: t("system.common.placeholder.startDate"),
245
- endPlaceholder: t("system.common.placeholder.endDate"),
244
+ startPlaceholder: t("common.placeholder.start_date"),
245
+ endPlaceholder: t("common.placeholder.end_date"),
246
246
  valueFormat: "YYYY-MM-DD"
247
247
  }
248
248
  }
249
249
  },
250
- { prop: "user_name", label: t("system.log.field.userName"), minWidth: 80 },
251
- { prop: "client_ip", label: t("system.log.field.clientIp"), minWidth: 80 },
252
- { prop: "location", label: t("system.log.field.location"), minWidth: 80 },
253
- { prop: "browser_name", label: t("system.log.field.browser"), minWidth: 80 },
254
- { prop: "os_name", label: t("system.log.field.os"), minWidth: 80 },
255
- { prop: "cost_time", label: t("system.log.field.costTime"), minWidth: 100, align: "right" },
250
+ { prop: "user_name", label: t("system.base.log.field.user_name"), minWidth: 80 },
251
+ { prop: "client_ip", label: t("system.base.log.field.client_ip"), minWidth: 80 },
252
+ { prop: "location", label: t("system.base.log.field.location"), minWidth: 80 },
253
+ { prop: "browser_name", label: t("system.base.log.field.browser"), minWidth: 80 },
254
+ { prop: "os_name", label: t("system.base.log.field.os"), minWidth: 80 },
255
+ { prop: "cost_time", label: t("system.base.log.field.cost_time"), minWidth: 100, align: "right" },
256
256
  {
257
257
  prop: "detailAction",
258
- label: t("system.common.field.action"),
258
+ label: t("common.field.action"),
259
259
  width: 100,
260
260
  fixed: "right",
261
261
  cellType: "actions",