@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.
- package/README.md +51 -50
- package/dist/package/declarations/src/api/system/base_language.d.ts +52 -0
- package/dist/package/declarations/src/api/system/base_translation.d.ts +10 -0
- package/dist/package/declarations/src/api/system/code_gen_i18n.d.ts +8 -0
- package/dist/package/declarations/src/api/system/ops_monitoring.d.ts +19 -0
- package/dist/package/declarations/src/api/system/ops_monitoring_sse.d.ts +12 -0
- package/dist/package/declarations/src/components/DynamicTranslationCell.vue.d.ts +16 -0
- package/dist/package/declarations/src/components/DynamicTranslationEditor.vue.d.ts +20 -0
- package/dist/package/declarations/src/components/dynamicTranslation.d.ts +38 -0
- package/dist/package/declarations/src/locales/generated.d.ts +6536 -0
- package/dist/package/declarations/src/rpc/base/v1/ai_session.d.ts +12 -2
- package/dist/package/declarations/src/rpc/base/v1/ai_tool.d.ts +9 -1
- package/dist/package/declarations/src/rpc/base/v1/config.d.ts +35 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/auth.d.ts +1 -1
- package/dist/package/declarations/src/rpc/system/admin/v1/base_config.d.ts +23 -2
- package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +9 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/base_job.d.ts +9 -1
- package/dist/package/declarations/src/rpc/system/admin/v1/base_language.d.ts +119 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/base_menu.d.ts +6 -1
- package/dist/package/declarations/src/rpc/system/admin/v1/base_migration.d.ts +6 -6
- package/dist/package/declarations/src/rpc/system/admin/v1/base_role.d.ts +13 -1
- package/dist/package/declarations/src/rpc/system/admin/v1/base_translation.d.ts +75 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/base_user.d.ts +11 -1
- package/dist/package/declarations/src/rpc/system/admin/v1/code_gen.d.ts +13 -11
- package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_column.d.ts +7 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_table.d.ts +24 -1
- package/dist/package/declarations/src/rpc/system/admin/v1/common.d.ts +13 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/ops_monitoring.d.ts +222 -0
- package/dist/package/declarations/src/views/base/language/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue.d.ts +23 -0
- package/dist/package/declarations/src/views/tool/code-gen/config.d.ts +7 -7
- package/dist/package/declarations/src/views/tool/ops-monitoring/index.vue.d.ts +3 -0
- package/dist/package/src/api/base/ai_message.ts +7 -12
- package/dist/package/src/api/base/sse.ts +3 -1
- package/dist/package/src/api/system/base_language.ts +135 -0
- package/dist/package/src/api/system/base_translation.ts +33 -0
- package/dist/package/src/api/system/code_gen_column.ts +17 -3
- package/dist/package/src/api/system/code_gen_i18n.ts +18 -0
- package/dist/package/src/api/system/code_gen_table.ts +12 -4
- package/dist/package/src/api/system/ops_monitoring.ts +88 -0
- package/dist/package/src/api/system/ops_monitoring_sse.ts +49 -0
- package/dist/package/src/components/DynamicTranslationCell.vue +249 -0
- package/dist/package/src/components/DynamicTranslationEditor.vue +197 -0
- package/dist/package/src/components/dynamicTranslation.ts +66 -0
- package/dist/package/src/locales/README.md +30 -0
- package/dist/package/src/locales/en-US.json +933 -0
- package/dist/package/src/locales/es-ES.json +933 -0
- package/dist/package/src/locales/fr-FR.json +933 -0
- package/dist/package/src/locales/generated.ts +22 -0
- package/dist/package/src/locales/ja-JP.json +933 -0
- package/dist/package/src/locales/ko-KR.json +933 -0
- package/dist/package/src/locales/zh-CN.json +933 -0
- package/dist/package/src/locales/zh-TW.json +933 -0
- package/dist/package/src/module.ts +6 -2
- package/dist/package/src/rpc/base/v1/ai_session.ts +13 -2
- package/dist/package/src/rpc/base/v1/ai_tool.ts +10 -1
- package/dist/package/src/rpc/base/v1/config.ts +47 -0
- package/dist/package/src/rpc/system/admin/v1/auth.ts +1 -1
- package/dist/package/src/rpc/system/admin/v1/base_config.ts +24 -2
- package/dist/package/src/rpc/system/admin/v1/base_dict.ts +9 -0
- package/dist/package/src/rpc/system/admin/v1/base_job.ts +10 -1
- package/dist/package/src/rpc/system/admin/v1/base_language.ts +141 -0
- package/dist/package/src/rpc/system/admin/v1/base_menu.ts +6 -1
- package/dist/package/src/rpc/system/admin/v1/base_migration.ts +8 -8
- package/dist/package/src/rpc/system/admin/v1/base_role.ts +14 -1
- package/dist/package/src/rpc/system/admin/v1/base_translation.ts +90 -0
- package/dist/package/src/rpc/system/admin/v1/base_user.ts +12 -1
- package/dist/package/src/rpc/system/admin/v1/code_gen.ts +16 -12
- package/dist/package/src/rpc/system/admin/v1/code_gen_column.ts +8 -0
- package/dist/package/src/rpc/system/admin/v1/code_gen_table.ts +27 -1
- package/dist/package/src/rpc/system/admin/v1/common.ts +21 -0
- package/dist/package/src/rpc/system/admin/v1/ops_monitoring.ts +255 -0
- package/dist/package/src/views/ai/chat/components/AiMarkdown.vue +1 -6
- package/dist/package/src/views/ai/chat/components/ChatPanel.vue +75 -58
- package/dist/package/src/views/ai/chat/components/SessionPanel.vue +20 -9
- package/dist/package/src/views/ai/chat/components/XSender.vue +36 -23
- package/dist/package/src/views/ai/chat/index.vue +58 -41
- package/dist/package/src/views/ai/chat/message.ts +29 -27
- package/dist/package/src/views/base/api/index.vue +121 -84
- package/dist/package/src/views/base/area/index.vue +81 -32
- package/dist/package/src/views/base/config/index.vue +300 -96
- package/dist/package/src/views/base/dept/index.vue +110 -62
- package/dist/package/src/views/base/dict/index.vue +145 -62
- package/dist/package/src/views/base/dict/item.vue +155 -64
- package/dist/package/src/views/base/job/index.vue +134 -82
- package/dist/package/src/views/base/job/log.vue +24 -25
- package/dist/package/src/views/base/language/index.vue +260 -0
- package/dist/package/src/views/base/log/index.vue +68 -46
- package/dist/package/src/views/base/menu/index.vue +344 -200
- package/dist/package/src/views/base/migration/index.vue +49 -29
- package/dist/package/src/views/base/post/index.vue +128 -60
- package/dist/package/src/views/base/role/index.vue +145 -79
- package/dist/package/src/views/base/tenant/index.vue +132 -64
- package/dist/package/src/views/base/user/components/dept-tree.vue +2 -1
- package/dist/package/src/views/base/user/index.vue +194 -116
- package/dist/package/src/views/profile/components/base.vue +45 -28
- package/dist/package/src/views/profile/components/password.vue +45 -30
- package/dist/package/src/views/profile/components/security.vue +90 -54
- package/dist/package/src/views/profile/index.vue +10 -9
- package/dist/package/src/views/tool/api-doc/index.vue +6 -2
- package/dist/package/src/views/tool/code-gen/code-preview/index.vue +32 -16
- package/dist/package/src/views/tool/code-gen/columns/index.vue +382 -273
- package/dist/package/src/views/tool/code-gen/columns/option-copy.ts +1 -6
- package/dist/package/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue +118 -0
- package/dist/package/src/views/tool/code-gen/components/CodeGenProgressDialog.vue +65 -36
- package/dist/package/src/views/tool/code-gen/components/CodePreviewPane.vue +8 -5
- package/dist/package/src/views/tool/code-gen/config.ts +116 -79
- package/dist/package/src/views/tool/code-gen/preview/data.ts +19 -17
- package/dist/package/src/views/tool/code-gen/preview/index.vue +96 -59
- package/dist/package/src/views/tool/code-gen/proto/index.vue +110 -62
- package/dist/package/src/views/tool/code-gen/table/index.vue +201 -121
- package/dist/package/src/views/tool/ops-monitoring/index.vue +1175 -0
- package/dist/package/src/views/tool/project-doc/index.vue +17 -15
- package/package.json +6 -2
- package/dist/package/declarations/src/rpc/base/v1/enum.d.ts +0 -43
- package/dist/package/declarations/src/rpc/system/common/v1/enum.d.ts +0 -67
- package/dist/package/src/rpc/base/v1/enum.ts +0 -54
- package/dist/package/src/rpc/system/common/v1/enum.ts +0 -80
|
@@ -12,19 +12,22 @@
|
|
|
12
12
|
<FormDialog
|
|
13
13
|
v-model="dialog.visible"
|
|
14
14
|
ref="formDialogRef"
|
|
15
|
-
:title="dialog.
|
|
15
|
+
:title="t(dialog.editing ? 'system.base.role.action.edit' : 'system.base.role.action.create')"
|
|
16
16
|
width="500px"
|
|
17
17
|
:model="formData"
|
|
18
18
|
:fields="formFields"
|
|
19
19
|
:rules="rules"
|
|
20
|
-
label-width="100px"
|
|
21
20
|
@confirm="handleSubmit"
|
|
22
21
|
@close="handleCloseDialog"
|
|
23
22
|
/>
|
|
24
23
|
|
|
25
|
-
<el-drawer
|
|
24
|
+
<el-drawer
|
|
25
|
+
v-model="assignPermDialogVisible"
|
|
26
|
+
:title="t('system.base.role.title.assign_permission', { name: checkedBaseRole.name || '' })"
|
|
27
|
+
size="500"
|
|
28
|
+
>
|
|
26
29
|
<div class="perm-toolbar">
|
|
27
|
-
<el-input v-model="permKeywords" clearable class="perm-search" placeholder="
|
|
30
|
+
<el-input v-model="permKeywords" clearable class="perm-search" :placeholder="t('system.base.role.placeholder.menu_permission')">
|
|
28
31
|
<template #prefix>
|
|
29
32
|
<Search />
|
|
30
33
|
</template>
|
|
@@ -32,19 +35,21 @@
|
|
|
32
35
|
|
|
33
36
|
<div class="perm-toolbar__actions">
|
|
34
37
|
<div class="perm-toolbar__group">
|
|
35
|
-
<span class="perm-toolbar__label"
|
|
38
|
+
<span class="perm-toolbar__label">{{ t("system.base.role.field.tree_operation") }}</span>
|
|
36
39
|
<el-button type="primary" size="small" plain class="perm-toolbar__button" @click="togglePermTree">
|
|
37
40
|
<template #icon>
|
|
38
41
|
<Switch />
|
|
39
42
|
</template>
|
|
40
|
-
{{ isExpanded ? "
|
|
43
|
+
{{ t(isExpanded ? "system.base.role.action.collapse_nodes" : "system.base.role.action.expand_nodes") }}
|
|
41
44
|
</el-button>
|
|
42
45
|
</div>
|
|
43
46
|
<div class="perm-toolbar__group perm-toolbar__group--linkage">
|
|
44
|
-
<span class="perm-toolbar__label"
|
|
45
|
-
<el-checkbox v-model="parentChildLinked" @change="handelParentChildLinkedChange"
|
|
47
|
+
<span class="perm-toolbar__label">{{ t("system.base.role.field.selection_mode") }}</span>
|
|
48
|
+
<el-checkbox v-model="parentChildLinked" @change="handelParentChildLinkedChange">{{
|
|
49
|
+
t("system.base.role.field.parent_child_linked")
|
|
50
|
+
}}</el-checkbox>
|
|
46
51
|
<el-tooltip placement="bottom">
|
|
47
|
-
<template #content
|
|
52
|
+
<template #content>{{ t("system.base.role.message.parent_child_linked_tip") }}</template>
|
|
48
53
|
<el-icon class="perm-linkage__icon">
|
|
49
54
|
<QuestionFilled />
|
|
50
55
|
</el-icon>
|
|
@@ -70,8 +75,8 @@
|
|
|
70
75
|
|
|
71
76
|
<template #footer>
|
|
72
77
|
<div class="dialog-footer">
|
|
73
|
-
<el-button type="primary" @click="handleAssignPermSubmit"
|
|
74
|
-
<el-button @click="assignPermDialogVisible = false"
|
|
78
|
+
<el-button type="primary" @click="handleAssignPermSubmit">{{ t("common.action.confirm") }}</el-button>
|
|
79
|
+
<el-button @click="assignPermDialogVisible = false">{{ t("common.action.cancel") }}</el-button>
|
|
75
80
|
</div>
|
|
76
81
|
</template>
|
|
77
82
|
</el-drawer>
|
|
@@ -97,6 +102,7 @@ import { Status } from "@liujitcn/kratos-admin-system/rpc/common/v1/enum";
|
|
|
97
102
|
import { buildPageRequest, normalizeSelectedIds } from "@liujitcn/kratos-admin-core/table";
|
|
98
103
|
import { useUserStore } from "@liujitcn/kratos-admin-core/stores/runtime";
|
|
99
104
|
import { DEFAULT_TENANT_CODE, requestTenantOptions } from "@liujitcn/kratos-admin-core/tenant";
|
|
105
|
+
import { t } from "@liujitcn/kratos-admin-core";
|
|
100
106
|
|
|
101
107
|
defineOptions({
|
|
102
108
|
name: "BaseRole",
|
|
@@ -122,16 +128,16 @@ const formDialogRef = ref<InstanceType<typeof FormDialog>>();
|
|
|
122
128
|
const permTreeRef = ref<InstanceType<typeof ElTree>>();
|
|
123
129
|
|
|
124
130
|
const dialog = reactive({
|
|
125
|
-
|
|
131
|
+
editing: false,
|
|
126
132
|
visible: false
|
|
127
133
|
});
|
|
128
134
|
|
|
129
135
|
const menuPermOptions = ref<TreeOptionResponse_Option[]>([]);
|
|
130
136
|
const tenantOptions = ref<SelectOptionResponse_Option[]>([]);
|
|
131
|
-
const statusOptions
|
|
132
|
-
{ label: "
|
|
133
|
-
{ label: "
|
|
134
|
-
];
|
|
137
|
+
const statusOptions = computed<ProFormOption[]>(() => [
|
|
138
|
+
{ label: t("common.status.enabled"), value: Status.ENABLE },
|
|
139
|
+
{ label: t("common.status.disabled"), value: Status.DISABLE }
|
|
140
|
+
]);
|
|
135
141
|
const protectedRoleCodes = new Set(["admin", "authuser", "user"]);
|
|
136
142
|
|
|
137
143
|
const formData = reactive<BaseRoleFormState>({
|
|
@@ -153,24 +159,56 @@ const formData = reactive<BaseRoleFormState>({
|
|
|
153
159
|
remark: ""
|
|
154
160
|
});
|
|
155
161
|
|
|
156
|
-
const rules =
|
|
157
|
-
tenant_id: [
|
|
162
|
+
const rules = computed(() => ({
|
|
163
|
+
tenant_id: [
|
|
164
|
+
{
|
|
165
|
+
required: true,
|
|
166
|
+
message: t("common.validation.required_select", { field: t("system.base.role.field.tenant") }),
|
|
167
|
+
trigger: "change"
|
|
168
|
+
}
|
|
169
|
+
],
|
|
158
170
|
name: [
|
|
159
|
-
{
|
|
160
|
-
|
|
171
|
+
{
|
|
172
|
+
required: true,
|
|
173
|
+
message: t("common.validation.required_input", { field: t("system.base.role.field.name") }),
|
|
174
|
+
trigger: "blur"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
max: 30,
|
|
178
|
+
message: t("common.validation.max_length", { field: t("system.base.role.field.name"), max: 30 }),
|
|
179
|
+
trigger: "blur"
|
|
180
|
+
}
|
|
161
181
|
],
|
|
162
182
|
code: [
|
|
163
|
-
{
|
|
164
|
-
|
|
183
|
+
{
|
|
184
|
+
required: true,
|
|
185
|
+
message: t("common.validation.required_input", { field: t("system.base.role.field.code") }),
|
|
186
|
+
trigger: "blur"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
max: 20,
|
|
190
|
+
message: t("common.validation.max_length", { field: t("system.base.role.field.code"), max: 20 }),
|
|
191
|
+
trigger: "blur"
|
|
192
|
+
}
|
|
193
|
+
],
|
|
194
|
+
data_scope: [
|
|
195
|
+
{
|
|
196
|
+
required: true,
|
|
197
|
+
message: t("common.validation.required_select", { field: t("system.base.role.field.data_scope") }),
|
|
198
|
+
trigger: "change"
|
|
199
|
+
}
|
|
165
200
|
],
|
|
166
|
-
data_scope: [{ required: true, message: "请选择数据权限", trigger: "change" }],
|
|
167
201
|
menus: [
|
|
168
|
-
{
|
|
202
|
+
{
|
|
203
|
+
required: true,
|
|
204
|
+
message: t("common.validation.required_select", { field: t("system.base.role.field.menu_permission") }),
|
|
205
|
+
trigger: "change"
|
|
206
|
+
},
|
|
169
207
|
{
|
|
170
208
|
validator: (_rule: unknown, value: unknown, callback: (error?: Error) => void) => {
|
|
171
209
|
const menuIds = Array.isArray(value) ? value : [];
|
|
172
210
|
if (new Set(menuIds).size !== menuIds.length) {
|
|
173
|
-
callback(new Error("
|
|
211
|
+
callback(new Error(t("system.base.role.validation.menu_duplicate")));
|
|
174
212
|
return;
|
|
175
213
|
}
|
|
176
214
|
callback();
|
|
@@ -178,9 +216,21 @@ const rules = reactive({
|
|
|
178
216
|
trigger: "change"
|
|
179
217
|
}
|
|
180
218
|
],
|
|
181
|
-
status: [
|
|
182
|
-
|
|
183
|
-
|
|
219
|
+
status: [
|
|
220
|
+
{
|
|
221
|
+
required: true,
|
|
222
|
+
message: t("common.validation.required_select", { field: t("common.field.status") }),
|
|
223
|
+
trigger: "change"
|
|
224
|
+
}
|
|
225
|
+
],
|
|
226
|
+
remark: [
|
|
227
|
+
{
|
|
228
|
+
max: 500,
|
|
229
|
+
message: t("common.validation.max_length", { field: t("common.field.remark"), max: 500 }),
|
|
230
|
+
trigger: "blur"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
}));
|
|
184
234
|
|
|
185
235
|
const checkedBaseRole = ref<CheckedBaseRole>({});
|
|
186
236
|
const assignPermDialogVisible = ref(false);
|
|
@@ -195,10 +245,10 @@ const isDefaultTenant = computed(() => userStore.userInfo.tenant_code === DEFAUL
|
|
|
195
245
|
const formFields = computed<ProFormField[]>(() => [
|
|
196
246
|
{
|
|
197
247
|
prop: "tenant_id",
|
|
198
|
-
label: "
|
|
248
|
+
label: t("system.base.role.field.tenant"),
|
|
199
249
|
component: "select",
|
|
200
250
|
props: {
|
|
201
|
-
placeholder: "
|
|
251
|
+
placeholder: t("system.base.role.placeholder.tenant"),
|
|
202
252
|
filterable: true,
|
|
203
253
|
disabled: Boolean(formData.id),
|
|
204
254
|
onChange: handleFormTenantChange
|
|
@@ -206,17 +256,22 @@ const formFields = computed<ProFormField[]>(() => [
|
|
|
206
256
|
visible: () => isDefaultTenant.value,
|
|
207
257
|
options: tenantOptions.value
|
|
208
258
|
},
|
|
209
|
-
{
|
|
259
|
+
{
|
|
260
|
+
prop: "name",
|
|
261
|
+
label: t("system.base.role.field.name"),
|
|
262
|
+
component: "input",
|
|
263
|
+
props: { placeholder: t("system.base.role.placeholder.name") }
|
|
264
|
+
},
|
|
210
265
|
{
|
|
211
266
|
prop: "code",
|
|
212
|
-
label: "
|
|
267
|
+
label: t("system.base.role.field.code"),
|
|
213
268
|
component: "input",
|
|
214
|
-
props: { placeholder: "
|
|
269
|
+
props: { placeholder: t("system.base.role.placeholder.code"), disabled: Boolean(formData.id && formData.code === "tenant") }
|
|
215
270
|
},
|
|
216
|
-
{ prop: "data_scope", label: "
|
|
271
|
+
{ prop: "data_scope", label: t("system.base.role.field.data_scope"), component: "dict", props: { code: "base_role_data_scope" } },
|
|
217
272
|
{
|
|
218
273
|
prop: "menus",
|
|
219
|
-
label: "
|
|
274
|
+
label: t("system.base.role.field.menu_permission"),
|
|
220
275
|
component: "tree-select",
|
|
221
276
|
options: menuPermOptions.value as unknown as ProFormOption[],
|
|
222
277
|
props: {
|
|
@@ -229,12 +284,17 @@ const formFields = computed<ProFormField[]>(() => [
|
|
|
229
284
|
onCheck: handleCheck
|
|
230
285
|
}
|
|
231
286
|
},
|
|
232
|
-
{
|
|
287
|
+
{
|
|
288
|
+
prop: "remark",
|
|
289
|
+
label: t("common.field.remark"),
|
|
290
|
+
component: "textarea",
|
|
291
|
+
props: { placeholder: t("common.placeholder.remark") }
|
|
292
|
+
},
|
|
233
293
|
{
|
|
234
294
|
prop: "status",
|
|
235
|
-
label: "
|
|
295
|
+
label: t("common.field.status"),
|
|
236
296
|
component: "radio-group",
|
|
237
|
-
options: statusOptions,
|
|
297
|
+
options: statusOptions.value,
|
|
238
298
|
props: { disabled: isRoleProtected(formData.code) }
|
|
239
299
|
}
|
|
240
300
|
]);
|
|
@@ -246,7 +306,7 @@ const columns = computed<ColumnProps[]>(() => [
|
|
|
246
306
|
? ([
|
|
247
307
|
{
|
|
248
308
|
prop: "tenant_id",
|
|
249
|
-
label: "
|
|
309
|
+
label: t("system.base.role.field.tenant_short"),
|
|
250
310
|
minWidth: 140,
|
|
251
311
|
showOverflowTooltip: true,
|
|
252
312
|
search: { el: "select", key: "tenant_id", props: { filterable: true }, order: 1 },
|
|
@@ -254,36 +314,42 @@ const columns = computed<ColumnProps[]>(() => [
|
|
|
254
314
|
}
|
|
255
315
|
] satisfies ColumnProps[])
|
|
256
316
|
: []),
|
|
257
|
-
{ prop: "name", label: "
|
|
258
|
-
{ prop: "code", label: "
|
|
259
|
-
{
|
|
260
|
-
|
|
317
|
+
{ prop: "name", label: t("system.base.role.field.name"), minWidth: 140, search: { el: "input" } },
|
|
318
|
+
{ prop: "code", label: t("system.base.role.field.code"), minWidth: 160, search: { el: "input" } },
|
|
319
|
+
{
|
|
320
|
+
prop: "data_scope",
|
|
321
|
+
label: t("system.base.role.field.data_scope"),
|
|
322
|
+
minWidth: 120,
|
|
323
|
+
dictCode: "base_role_data_scope",
|
|
324
|
+
search: { el: "select" }
|
|
325
|
+
},
|
|
326
|
+
{ prop: "remark", label: t("common.field.remark"), minWidth: 160 },
|
|
261
327
|
{
|
|
262
328
|
prop: "status",
|
|
263
|
-
label: "
|
|
329
|
+
label: t("common.field.status"),
|
|
264
330
|
minWidth: 100,
|
|
265
331
|
search: { el: "select" },
|
|
266
332
|
cellType: "status",
|
|
267
333
|
statusProps: {
|
|
268
334
|
activeValue: Status.ENABLE,
|
|
269
335
|
inactiveValue: Status.DISABLE,
|
|
270
|
-
activeText: "
|
|
271
|
-
inactiveText: "
|
|
336
|
+
activeText: t("common.status.enabled"),
|
|
337
|
+
inactiveText: t("common.status.disabled"),
|
|
272
338
|
disabled: scope => !canChangeRoleStatus(scope.row as BaseRole) || !BUTTONS.value["base:role:status"],
|
|
273
339
|
beforeChange: scope => handleBeforeSetStatus(scope.row as BaseRole)
|
|
274
340
|
}
|
|
275
341
|
},
|
|
276
|
-
{ prop: "created_at", label: "
|
|
277
|
-
{ prop: "updated_at", label: "
|
|
342
|
+
{ prop: "created_at", label: t("common.field.created_at"), minWidth: 180 },
|
|
343
|
+
{ prop: "updated_at", label: t("common.field.updated_at"), minWidth: 180 },
|
|
278
344
|
{
|
|
279
345
|
prop: "operation",
|
|
280
|
-
label: "
|
|
346
|
+
label: t("common.field.action"),
|
|
281
347
|
width: 280,
|
|
282
348
|
fixed: "right",
|
|
283
349
|
cellType: "actions",
|
|
284
350
|
actions: [
|
|
285
351
|
{
|
|
286
|
-
label: "
|
|
352
|
+
label: t("system.base.role.action.assign_permission"),
|
|
287
353
|
type: "primary",
|
|
288
354
|
link: true,
|
|
289
355
|
icon: Position,
|
|
@@ -291,7 +357,7 @@ const columns = computed<ColumnProps[]>(() => [
|
|
|
291
357
|
onClick: scope => handleOpenAssignPermDialog(scope.row as BaseRole)
|
|
292
358
|
},
|
|
293
359
|
{
|
|
294
|
-
label: "
|
|
360
|
+
label: t("common.action.edit"),
|
|
295
361
|
type: "primary",
|
|
296
362
|
link: true,
|
|
297
363
|
icon: EditPen,
|
|
@@ -300,7 +366,7 @@ const columns = computed<ColumnProps[]>(() => [
|
|
|
300
366
|
onClick: (scope, params) => handleOpenDialog((params?.roleId as number | undefined) ?? (scope.row as BaseRole).id)
|
|
301
367
|
},
|
|
302
368
|
{
|
|
303
|
-
label: "
|
|
369
|
+
label: t("common.action.delete"),
|
|
304
370
|
type: "danger",
|
|
305
371
|
link: true,
|
|
306
372
|
icon: Delete,
|
|
@@ -312,23 +378,23 @@ const columns = computed<ColumnProps[]>(() => [
|
|
|
312
378
|
]);
|
|
313
379
|
|
|
314
380
|
/** 角色顶部按钮配置。 */
|
|
315
|
-
const headerActions
|
|
381
|
+
const headerActions = computed<HeaderActionProps[]>(() => [
|
|
316
382
|
{
|
|
317
|
-
label: "
|
|
383
|
+
label: t("common.action.create"),
|
|
318
384
|
type: "success",
|
|
319
385
|
icon: CirclePlus,
|
|
320
386
|
hidden: () => !BUTTONS.value["base:role:create"],
|
|
321
387
|
onClick: () => handleOpenDialog()
|
|
322
388
|
},
|
|
323
389
|
{
|
|
324
|
-
label: "
|
|
390
|
+
label: t("common.action.delete"),
|
|
325
391
|
type: "danger",
|
|
326
392
|
icon: Delete,
|
|
327
393
|
hidden: () => !BUTTONS.value["base:role:delete"],
|
|
328
394
|
disabled: scope => !scope.selectedList.length,
|
|
329
395
|
onClick: scope => handleDelete(scope.selectedList as BaseRole[])
|
|
330
396
|
}
|
|
331
|
-
];
|
|
397
|
+
]);
|
|
332
398
|
|
|
333
399
|
/**
|
|
334
400
|
* 请求角色列表,并由 ProTable 统一维护分页与搜索参数。
|
|
@@ -336,7 +402,7 @@ const headerActions: HeaderActionProps[] = [
|
|
|
336
402
|
async function requestBaseRoleTable(params: PageBaseRoleRequest) {
|
|
337
403
|
const data = await defBaseRoleService.PageBaseRole({
|
|
338
404
|
...buildPageRequest(params),
|
|
339
|
-
tenant_id: isDefaultTenant.value ? params.tenant_id : undefined
|
|
405
|
+
tenant_id: isDefaultTenant.value ? params.tenant_id : undefined
|
|
340
406
|
});
|
|
341
407
|
return { data: { list: data.base_roles ?? [], total: data.total } };
|
|
342
408
|
}
|
|
@@ -381,7 +447,7 @@ async function handleFormTenantChange() {
|
|
|
381
447
|
async function handleOpenDialog(roleId?: number) {
|
|
382
448
|
resetForm();
|
|
383
449
|
await loadTenantOptions();
|
|
384
|
-
dialog.
|
|
450
|
+
dialog.editing = Boolean(roleId);
|
|
385
451
|
dialog.visible = true;
|
|
386
452
|
if (!roleId) {
|
|
387
453
|
await loadMenuPermOptions();
|
|
@@ -437,7 +503,7 @@ function handleSubmit() {
|
|
|
437
503
|
? defBaseRoleService.UpdateBaseRole({ base_role: submitData })
|
|
438
504
|
: defBaseRoleService.CreateBaseRole({ base_role: submitData });
|
|
439
505
|
request.then(() => {
|
|
440
|
-
ElMessage.success(submitData.id ? "
|
|
506
|
+
ElMessage.success(t(submitData.id ? "system.base.role.message.update_success" : "system.base.role.message.create_success"));
|
|
441
507
|
handleCloseDialog();
|
|
442
508
|
refreshTable();
|
|
443
509
|
});
|
|
@@ -471,21 +537,21 @@ function canDeleteRole(row?: BaseRole) {
|
|
|
471
537
|
*/
|
|
472
538
|
async function handleBeforeSetStatus(row: BaseRole) {
|
|
473
539
|
if (!canChangeRoleStatus(row)) {
|
|
474
|
-
ElMessage.warning("
|
|
540
|
+
ElMessage.warning(t("system.base.role.message.protected_status"));
|
|
475
541
|
return false;
|
|
476
542
|
}
|
|
477
543
|
|
|
478
544
|
const nextStatus = row.status === Status.ENABLE ? Status.DISABLE : Status.ENABLE;
|
|
479
|
-
const
|
|
545
|
+
const action = t(nextStatus === Status.ENABLE ? "common.status.enabled" : "common.status.disabled");
|
|
480
546
|
const roleName = row.name || row.code || `ID:${row.id}`;
|
|
481
547
|
try {
|
|
482
|
-
await ElMessageBox.confirm(
|
|
483
|
-
confirmButtonText: "
|
|
484
|
-
cancelButtonText: "
|
|
548
|
+
await ElMessageBox.confirm(t("system.base.role.message.confirm_status", { action, name: roleName }), t("common.title.notice"), {
|
|
549
|
+
confirmButtonText: t("common.action.confirm"),
|
|
550
|
+
cancelButtonText: t("common.action.cancel"),
|
|
485
551
|
type: "warning"
|
|
486
552
|
});
|
|
487
553
|
await defBaseRoleService.SetBaseRoleStatus({ id: row.id, status: nextStatus });
|
|
488
|
-
ElMessage.success(
|
|
554
|
+
ElMessage.success(t("common.message.status_success", { action }));
|
|
489
555
|
refreshTable();
|
|
490
556
|
return true;
|
|
491
557
|
} catch {
|
|
@@ -503,7 +569,7 @@ function handleDelete(selected?: number | string | Array<number | string> | Base
|
|
|
503
569
|
? [selected as BaseRole]
|
|
504
570
|
: [];
|
|
505
571
|
if (roleList.some(role => !canDeleteRole(role))) {
|
|
506
|
-
ElMessage.warning("
|
|
572
|
+
ElMessage.warning(t("system.base.role.message.protected_delete"));
|
|
507
573
|
return;
|
|
508
574
|
}
|
|
509
575
|
|
|
@@ -511,29 +577,29 @@ function handleDelete(selected?: number | string | Array<number | string> | Base
|
|
|
511
577
|
roleList.length ? roleList.map(item => item.id) : normalizeSelectedIds(selected as number | string | Array<number | string>)
|
|
512
578
|
).join(",");
|
|
513
579
|
if (!roleIds) {
|
|
514
|
-
ElMessage.warning("
|
|
580
|
+
ElMessage.warning(t("common.message.select_delete_item"));
|
|
515
581
|
return;
|
|
516
582
|
}
|
|
517
583
|
|
|
518
584
|
const confirmMessage = roleList.length
|
|
519
585
|
? roleList.length === 1
|
|
520
|
-
?
|
|
521
|
-
:
|
|
522
|
-
: "
|
|
586
|
+
? t("system.base.role.message.confirm_delete_single", { name: roleList[0].name || roleList[0].code || `ID:${roleList[0].id}` })
|
|
587
|
+
: t("system.base.role.message.confirm_delete_batch", { count: roleList.length })
|
|
588
|
+
: t("system.base.role.message.confirm_delete_selected");
|
|
523
589
|
|
|
524
|
-
ElMessageBox.confirm(confirmMessage, "
|
|
525
|
-
confirmButtonText: "
|
|
526
|
-
cancelButtonText: "
|
|
590
|
+
ElMessageBox.confirm(confirmMessage, t("common.title.warning"), {
|
|
591
|
+
confirmButtonText: t("common.action.confirm"),
|
|
592
|
+
cancelButtonText: t("common.action.cancel"),
|
|
527
593
|
type: "warning"
|
|
528
594
|
}).then(
|
|
529
595
|
() => {
|
|
530
596
|
defBaseRoleService.DeleteBaseRole({ id: roleIds }).then(() => {
|
|
531
|
-
ElMessage.success("
|
|
597
|
+
ElMessage.success(t("system.base.role.message.delete_success"));
|
|
532
598
|
refreshTable();
|
|
533
599
|
});
|
|
534
600
|
},
|
|
535
601
|
() => {
|
|
536
|
-
ElMessage.info("
|
|
602
|
+
ElMessage.info(t("system.base.role.message.delete_canceled"));
|
|
537
603
|
}
|
|
538
604
|
);
|
|
539
605
|
}
|
|
@@ -544,7 +610,7 @@ function handleDelete(selected?: number | string | Array<number | string> | Base
|
|
|
544
610
|
async function handleOpenAssignPermDialog(row: BaseRole) {
|
|
545
611
|
if (!row.id) return;
|
|
546
612
|
if (!canManageRole(row)) {
|
|
547
|
-
ElMessage.warning("
|
|
613
|
+
ElMessage.warning(t("system.base.role.message.protected_permission"));
|
|
548
614
|
return;
|
|
549
615
|
}
|
|
550
616
|
checkedBaseRole.value = { id: row.id, name: row.name };
|
|
@@ -565,15 +631,15 @@ function handleAssignPermSubmit() {
|
|
|
565
631
|
const checkedNodes = (permTreeRef.value?.getCheckedNodes(false, true) as Array<{ value: number }> | undefined) ?? [];
|
|
566
632
|
const checkedMenuIds = checkedNodes.map(node => Number(node.value));
|
|
567
633
|
if (!checkedMenuIds.length) {
|
|
568
|
-
ElMessage.warning("
|
|
634
|
+
ElMessage.warning(t("common.validation.required_select", { field: t("system.base.role.field.menu_permission") }));
|
|
569
635
|
return;
|
|
570
636
|
}
|
|
571
637
|
if (new Set(checkedMenuIds).size !== checkedMenuIds.length) {
|
|
572
|
-
ElMessage.warning("
|
|
638
|
+
ElMessage.warning(t("system.base.role.validation.menu_duplicate"));
|
|
573
639
|
return;
|
|
574
640
|
}
|
|
575
641
|
defBaseRoleService.SetBaseRoleMenu({ id: roleId, menus: checkedMenuIds }).then(() => {
|
|
576
|
-
ElMessage.success("
|
|
642
|
+
ElMessage.success(t("system.base.role.message.assign_success"));
|
|
577
643
|
assignPermDialogVisible.value = false;
|
|
578
644
|
refreshTable();
|
|
579
645
|
});
|