@liujitcn/kratos-admin-system 0.0.20 → 0.0.21

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 (86) hide show
  1. package/README.md +51 -50
  2. package/dist/package/declarations/src/api/system/base_language.d.ts +51 -0
  3. package/dist/package/declarations/src/api/system/base_translation.d.ts +7 -0
  4. package/dist/package/declarations/src/api/system/code_gen_i18n.d.ts +8 -0
  5. package/dist/package/declarations/src/components/DynamicTranslationCell.vue.d.ts +39 -0
  6. package/dist/package/declarations/src/components/DynamicTranslationEditor.vue.d.ts +23 -0
  7. package/dist/package/declarations/src/components/dynamicTranslation.d.ts +44 -0
  8. package/dist/package/declarations/src/rpc/system/admin/v1/base_config.d.ts +5 -0
  9. package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +79 -0
  10. package/dist/package/declarations/src/rpc/system/admin/v1/base_language.d.ts +114 -0
  11. package/dist/package/declarations/src/rpc/system/admin/v1/base_menu.d.ts +40 -0
  12. package/dist/package/declarations/src/rpc/system/admin/v1/base_translation.d.ts +102 -0
  13. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen.d.ts +2 -0
  14. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_column.d.ts +7 -0
  15. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_table.d.ts +13 -0
  16. package/dist/package/declarations/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue.d.ts +23 -0
  17. package/dist/package/declarations/src/views/tool/code-gen/config.d.ts +7 -7
  18. package/dist/package/declarations/src/views/tool/language/index.vue.d.ts +3 -0
  19. package/dist/package/src/api/base/ai_message.ts +7 -12
  20. package/dist/package/src/api/base/sse.ts +3 -1
  21. package/dist/package/src/api/system/base_language.ts +137 -0
  22. package/dist/package/src/api/system/base_translation.ts +22 -0
  23. package/dist/package/src/api/system/code_gen_column.ts +17 -3
  24. package/dist/package/src/api/system/code_gen_i18n.ts +18 -0
  25. package/dist/package/src/api/system/code_gen_table.ts +12 -4
  26. package/dist/package/src/components/DynamicTranslationCell.vue +176 -0
  27. package/dist/package/src/components/DynamicTranslationEditor.vue +166 -0
  28. package/dist/package/src/components/dynamicTranslation.ts +86 -0
  29. package/dist/package/src/locales/README.md +28 -0
  30. package/dist/package/src/locales/en-US.json +929 -0
  31. package/dist/package/src/locales/es-ES.json +928 -0
  32. package/dist/package/src/locales/fr-FR.json +928 -0
  33. package/dist/package/src/locales/ja-JP.json +929 -0
  34. package/dist/package/src/locales/ko-KR.json +928 -0
  35. package/dist/package/src/locales/zh-CN.json +929 -0
  36. package/dist/package/src/locales/zh-TW.json +928 -0
  37. package/dist/package/src/module.ts +19 -1
  38. package/dist/package/src/rpc/system/admin/v1/base_config.ts +5 -0
  39. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +81 -0
  40. package/dist/package/src/rpc/system/admin/v1/base_language.ts +135 -0
  41. package/dist/package/src/rpc/system/admin/v1/base_menu.ts +41 -0
  42. package/dist/package/src/rpc/system/admin/v1/base_translation.ts +117 -0
  43. package/dist/package/src/rpc/system/admin/v1/code_gen.ts +5 -1
  44. package/dist/package/src/rpc/system/admin/v1/code_gen_column.ts +8 -0
  45. package/dist/package/src/rpc/system/admin/v1/code_gen_table.ts +15 -0
  46. package/dist/package/src/views/ai/chat/components/AiMarkdown.vue +1 -6
  47. package/dist/package/src/views/ai/chat/components/ChatPanel.vue +70 -53
  48. package/dist/package/src/views/ai/chat/components/SessionPanel.vue +20 -9
  49. package/dist/package/src/views/ai/chat/components/XSender.vue +36 -23
  50. package/dist/package/src/views/ai/chat/index.vue +55 -39
  51. package/dist/package/src/views/ai/chat/message.ts +18 -17
  52. package/dist/package/src/views/base/api/index.vue +121 -83
  53. package/dist/package/src/views/base/area/index.vue +81 -31
  54. package/dist/package/src/views/base/config/index.vue +272 -78
  55. package/dist/package/src/views/base/dept/index.vue +110 -61
  56. package/dist/package/src/views/base/dict/index.vue +137 -58
  57. package/dist/package/src/views/base/dict/item.vue +147 -61
  58. package/dist/package/src/views/base/job/index.vue +134 -81
  59. package/dist/package/src/views/base/job/log.vue +21 -22
  60. package/dist/package/src/views/base/log/index.vue +68 -46
  61. package/dist/package/src/views/base/menu/index.vue +257 -156
  62. package/dist/package/src/views/base/migration/index.vue +49 -29
  63. package/dist/package/src/views/base/post/index.vue +128 -59
  64. package/dist/package/src/views/base/role/index.vue +145 -78
  65. package/dist/package/src/views/base/tenant/index.vue +132 -63
  66. package/dist/package/src/views/base/user/components/dept-tree.vue +2 -1
  67. package/dist/package/src/views/base/user/index.vue +192 -112
  68. package/dist/package/src/views/profile/components/base.vue +44 -27
  69. package/dist/package/src/views/profile/components/password.vue +43 -27
  70. package/dist/package/src/views/profile/components/security.vue +89 -53
  71. package/dist/package/src/views/profile/index.vue +10 -9
  72. package/dist/package/src/views/tool/api-doc/index.vue +6 -2
  73. package/dist/package/src/views/tool/code-gen/code-preview/index.vue +30 -14
  74. package/dist/package/src/views/tool/code-gen/columns/index.vue +382 -273
  75. package/dist/package/src/views/tool/code-gen/columns/option-copy.ts +1 -6
  76. package/dist/package/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue +118 -0
  77. package/dist/package/src/views/tool/code-gen/components/CodeGenProgressDialog.vue +65 -36
  78. package/dist/package/src/views/tool/code-gen/components/CodePreviewPane.vue +8 -5
  79. package/dist/package/src/views/tool/code-gen/config.ts +114 -77
  80. package/dist/package/src/views/tool/code-gen/preview/data.ts +19 -17
  81. package/dist/package/src/views/tool/code-gen/preview/index.vue +96 -58
  82. package/dist/package/src/views/tool/code-gen/proto/index.vue +110 -62
  83. package/dist/package/src/views/tool/code-gen/table/index.vue +197 -117
  84. package/dist/package/src/views/tool/language/index.vue +256 -0
  85. package/dist/package/src/views/tool/project-doc/index.vue +17 -15
  86. package/package.json +6 -2
@@ -0,0 +1,256 @@
1
+ <!-- 语言管理 -->
2
+ <template>
3
+ <div class="table-box">
4
+ <ProTable
5
+ ref="proTable"
6
+ row-key="id"
7
+ :columns="columns"
8
+ :header-actions="headerActions"
9
+ :request-api="requestBaseLanguageTable"
10
+ />
11
+
12
+ <FormDialog
13
+ v-model="dialog.visible"
14
+ ref="formDialogRef"
15
+ :title="t(dialog.editing ? 'system.language.action.edit' : 'system.language.action.create')"
16
+ width="620px"
17
+ :model="formData"
18
+ :fields="formFields"
19
+ :rules="rules"
20
+ label-width="110px"
21
+ @confirm="handleSubmit"
22
+ @close="handleCloseDialog"
23
+ />
24
+ </div>
25
+ </template>
26
+
27
+ <script setup lang="ts">
28
+ import { computed, reactive, ref } from "vue";
29
+ import { ElMessage, ElMessageBox } from "element-plus";
30
+ import { CirclePlus, Delete, EditPen } from "@element-plus/icons-vue";
31
+ import type { ColumnProps, HeaderActionProps, ProTableInstance } from "@liujitcn/kratos-admin-core/components/ProTable/interface";
32
+ import ProTable from "@liujitcn/kratos-admin-core/components/ProTable";
33
+ import FormDialog from "@liujitcn/kratos-admin-core/components/Dialog/FormDialog.vue";
34
+ import type { ProFormField, ProFormOption } from "@liujitcn/kratos-admin-core/components/ProForm/interface";
35
+ import { useAuthButtons } from "@liujitcn/kratos-admin-core/auth";
36
+ import { buildPageRequest, normalizeSelectedIds } from "@liujitcn/kratos-admin-core/table";
37
+ import { t } from "@liujitcn/kratos-admin-core";
38
+ import { defBaseLanguageService, invalidateEnabledBaseLanguages } from "@liujitcn/kratos-admin-system/api/system/base_language";
39
+ import type { BaseLanguage, BaseLanguageForm, PageBaseLanguageRequest } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_language";
40
+ import { Status } from "@liujitcn/kratos-admin-system/rpc/common/v1/enum";
41
+
42
+ defineOptions({ name: "BaseLanguage", inheritAttrs: false });
43
+
44
+ const { BUTTONS } = useAuthButtons();
45
+ const proTable = ref<ProTableInstance>();
46
+ const formDialogRef = ref<InstanceType<typeof FormDialog>>();
47
+ const dialog = reactive({ editing: false, visible: false });
48
+ const formData = reactive<BaseLanguageForm>({
49
+ id: 0,
50
+ language_code: "",
51
+ language_name: "",
52
+ native_name: "",
53
+ sort: 100,
54
+ is_primary: false,
55
+ status: Status.ENABLE
56
+ });
57
+
58
+ const rules = computed(() => ({
59
+ 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" }
62
+ ],
63
+ 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" }
66
+ ],
67
+ 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" }
70
+ ],
71
+ sort: [{ required: true, message: t("system.language.placeholder.sort"), trigger: "change" }]
72
+ }));
73
+
74
+ const statusOptions = computed<ProFormOption[]>(() => [
75
+ { label: t("common.status.enabled"), value: Status.ENABLE },
76
+ { label: t("common.status.disabled"), value: Status.DISABLE }
77
+ ]);
78
+
79
+ 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 }
86
+ ]);
87
+
88
+ 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" } },
93
+ {
94
+ prop: "is_primary",
95
+ label: t("system.language.field.primary"),
96
+ minWidth: 100,
97
+ cellType: "status",
98
+ statusProps: {
99
+ activeValue: true,
100
+ inactiveValue: false,
101
+ activeText: t("common.status.enabled"),
102
+ inactiveText: t("common.status.disabled"),
103
+ disabled: () => !BUTTONS.value["tool:language:update"],
104
+ beforeChange: scope => handleBeforeSetPrimary(scope.row as BaseLanguage)
105
+ }
106
+ },
107
+ {
108
+ prop: "status",
109
+ label: t("system.language.field.status"),
110
+ minWidth: 100,
111
+ search: { el: "select" },
112
+ cellType: "status",
113
+ statusProps: {
114
+ activeValue: Status.ENABLE,
115
+ inactiveValue: Status.DISABLE,
116
+ activeText: t("common.status.enabled"),
117
+ inactiveText: t("common.status.disabled"),
118
+ disabled: () => !BUTTONS.value["tool:language:status"],
119
+ beforeChange: scope => handleBeforeSetStatus(scope.row as BaseLanguage)
120
+ }
121
+ },
122
+ { prop: "sort", label: t("system.language.field.sort"), width: 80 },
123
+ { prop: "created_at", label: t("system.common.field.createdAt"), minWidth: 180 },
124
+ {
125
+ prop: "operation",
126
+ label: t("system.common.field.operation"),
127
+ width: 150,
128
+ fixed: "right",
129
+ cellType: "actions",
130
+ 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) }
133
+ ]
134
+ }
135
+ ]);
136
+
137
+ 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[]) }
140
+ ]);
141
+
142
+ /** 请求语言分页列表。 */
143
+ async function requestBaseLanguageTable(params: PageBaseLanguageRequest) {
144
+ const data = await defBaseLanguageService.PageBaseLanguage(buildPageRequest(params));
145
+ return { data: { list: data.base_languages ?? [], total: data.total } };
146
+ }
147
+
148
+ /** 打开语言编辑弹窗。 */
149
+ async function handleOpenDialog(id?: number) {
150
+ resetForm();
151
+ dialog.editing = Boolean(id);
152
+ dialog.visible = true;
153
+ if (!id) return;
154
+ Object.assign(formData, await defBaseLanguageService.GetBaseLanguage({ id }));
155
+ }
156
+
157
+ /** 关闭语言编辑弹窗。 */
158
+ function handleCloseDialog() {
159
+ dialog.visible = false;
160
+ resetForm();
161
+ }
162
+
163
+ /** 重置语言表单。 */
164
+ function resetForm() {
165
+ formDialogRef.value?.resetFields();
166
+ formDialogRef.value?.clearValidate();
167
+ Object.assign(formData, { id: 0, language_code: "", language_name: "", native_name: "", sort: 100, is_primary: false, status: Status.ENABLE });
168
+ }
169
+
170
+ /** 提交语言表单。 */
171
+ function handleSubmit() {
172
+ formDialogRef.value?.validate()?.then(valid => {
173
+ if (!valid) return;
174
+ const payload = JSON.parse(JSON.stringify(formData)) as BaseLanguageForm;
175
+ const request = payload.id
176
+ ? defBaseLanguageService.UpdateBaseLanguage({ base_language: payload })
177
+ : defBaseLanguageService.CreateBaseLanguage({ base_language: payload });
178
+ request.then(() => {
179
+ invalidateEnabledBaseLanguages();
180
+ ElMessage.success(t(payload.id ? "system.common.message.updateSuccess" : "system.common.message.createSuccess", { resource: t("system.language.resource") }));
181
+ handleCloseDialog();
182
+ proTable.value?.getTableList();
183
+ });
184
+ });
185
+ }
186
+
187
+ /** 设置语言状态前保护主语言。 */
188
+ function handleBeforeSetStatus(row: BaseLanguage) {
189
+ if (row.is_primary && row.status === Status.ENABLE) {
190
+ ElMessage.warning(t("system.language.message.primaryCannotDisable"));
191
+ return Promise.resolve(false);
192
+ }
193
+ 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 }),
195
+ t("common.title.warning"),
196
+ { type: "warning", confirmButtonText: t("common.action.confirm"), cancelButtonText: t("common.action.cancel") }
197
+ ).then(
198
+ () =>
199
+ defBaseLanguageService
200
+ .SetBaseLanguageStatus({ id: row.id, status: row.status === Status.ENABLE ? Status.DISABLE : Status.ENABLE })
201
+ .then(() => {
202
+ invalidateEnabledBaseLanguages();
203
+ return true;
204
+ }),
205
+ () => false
206
+ );
207
+ }
208
+
209
+ /** 设置主语言前确认切换。 */
210
+ function handleBeforeSetPrimary(row: BaseLanguage) {
211
+ if (row.is_primary) return Promise.resolve(false);
212
+ return ElMessageBox.confirm(
213
+ t("system.language.message.confirmPrimary", { name: row.native_name }),
214
+ t("common.title.warning"),
215
+ { type: "warning", confirmButtonText: t("common.action.confirm"), cancelButtonText: t("common.action.cancel") }
216
+ ).then(
217
+ () =>
218
+ defBaseLanguageService
219
+ .UpdateBaseLanguage({
220
+ base_language: {
221
+ ...row,
222
+ is_primary: true
223
+ }
224
+ })
225
+ .then(() => {
226
+ invalidateEnabledBaseLanguages();
227
+ proTable.value?.getTableList();
228
+ return true;
229
+ }),
230
+ () => false
231
+ );
232
+ }
233
+
234
+ /** 删除语言,兼容单项和批量操作。 */
235
+ function handleDelete(selected?: BaseLanguage | BaseLanguage[] | number | string | Array<number | string>) {
236
+ const rows = Array.isArray(selected) ? (selected.filter(item => typeof item === "object") as BaseLanguage[]) : selected && typeof selected === "object" ? [selected] : [];
237
+ if (rows.some(item => item.is_primary)) {
238
+ ElMessage.warning(t("system.language.message.primaryCannotDelete"));
239
+ return;
240
+ }
241
+ const ids = (rows.length ? rows.map(item => item.id) : normalizeSelectedIds(selected as number | string | Array<number | string>)).join(",");
242
+ if (!ids) {
243
+ ElMessage.warning(t("system.common.message.selectDeleteItem"));
244
+ return;
245
+ }
246
+ ElMessageBox.confirm(t("system.language.message.confirmDelete", { name: rows.length === 1 ? rows[0].native_name : ids }), t("common.title.warning"), {
247
+ type: "warning",
248
+ confirmButtonText: t("common.action.confirm"),
249
+ cancelButtonText: t("common.action.cancel")
250
+ }).then(() => defBaseLanguageService.DeleteBaseLanguage({ id: ids })).then(() => {
251
+ invalidateEnabledBaseLanguages();
252
+ ElMessage.success(t("system.common.message.deleteSuccess", { resource: t("system.language.resource") }));
253
+ proTable.value?.getTableList();
254
+ });
255
+ }
256
+ </script>
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <div v-loading="loading" class="table-box project-doc-page">
3
3
  <main class="project-doc-shell">
4
- <aside class="document-navigation" aria-label="项目文档目录">
4
+ <aside class="document-navigation" :aria-label="t('system.projectDoc.title.navigation')">
5
5
  <header class="navigation-header">
6
- <el-input v-model="keyword" clearable placeholder="搜索项目或路径" :prefix-icon="Search" />
6
+ <el-input v-model="keyword" clearable :placeholder="t('system.projectDoc.placeholder.search')" :prefix-icon="Search" />
7
7
  <span class="document-count">{{ filteredDocumentCount }} / {{ documents.length }}</span>
8
8
  </header>
9
9
 
@@ -29,9 +29,9 @@
29
29
  </span>
30
30
  </template>
31
31
  </el-tree>
32
- <el-empty v-if="filteredDocumentCount === 0" description="暂无匹配文档" :image-size="72" />
32
+ <el-empty v-if="filteredDocumentCount === 0" :description="t('system.projectDoc.message.noMatch')" :image-size="72" />
33
33
  </div>
34
- <el-empty v-else description="暂无项目文档" :image-size="72" />
34
+ <el-empty v-else :description="t('system.projectDoc.message.empty')" :image-size="72" />
35
35
  </aside>
36
36
 
37
37
  <section class="document-reader">
@@ -48,7 +48,7 @@
48
48
  </div>
49
49
  </div>
50
50
  <time v-if="selectedDocumentUpdatedAt" :datetime="selectedDocumentUpdatedAt" :title="selectedDocumentUpdatedAt">
51
- 更新于 {{ formatDocumentUpdatedAt(selectedDocumentUpdatedAt) }}
51
+ {{ t("system.projectDoc.value.updatedAt", { time: formatDocumentUpdatedAt(selectedDocumentUpdatedAt) }) }}
52
52
  </time>
53
53
  </header>
54
54
  <div ref="readerScrollRef" v-loading="detailLoading" class="reader-scroll">
@@ -62,7 +62,7 @@
62
62
  </div>
63
63
  </div>
64
64
  </template>
65
- <el-empty v-else description="请选择一篇项目文档" />
65
+ <el-empty v-else :description="t('system.projectDoc.message.select')" />
66
66
  </section>
67
67
  </main>
68
68
  </div>
@@ -72,6 +72,7 @@
72
72
  import { computed, nextTick, onMounted, ref, watch } from "vue";
73
73
  import { Search } from "@element-plus/icons-vue";
74
74
  import type { TreeNodeData } from "element-plus";
75
+ import { getCurrentLocale, t } from "@liujitcn/kratos-admin-core";
75
76
  import MarkdownPreview from "@liujitcn/kratos-admin-core/components/MarkdownPreview/index.vue";
76
77
  import { useGlobalStore } from "@liujitcn/kratos-admin-core/stores/runtime";
77
78
  import { defProjectDocumentService } from "@liujitcn/kratos-admin-system/api/system/project_document";
@@ -121,13 +122,6 @@ const detailRequestToken = ref(0);
121
122
  const documentTreeRef = ref<InstanceType<typeof ElTree>>();
122
123
  const markdownRef = ref<HTMLElement>();
123
124
  const readerScrollRef = ref<HTMLElement>();
124
- const documentUpdatedAtFormatter = new Intl.DateTimeFormat("zh-CN", {
125
- month: "2-digit",
126
- day: "2-digit",
127
- hour: "2-digit",
128
- minute: "2-digit",
129
- hourCycle: "h23"
130
- });
131
125
  const documentTree = computed<ProjectDocumentTreeNode[]>(() => projects.value.map(buildProjectTreeNode));
132
126
  const documents = computed<ProjectDocumentTreeNode[]>(() => flattenDocumentTree(documentTree.value));
133
127
  const documentPathIndex = computed(() => {
@@ -237,7 +231,7 @@ function handleMarkdownClick(event: MouseEvent) {
237
231
  const documentPath = resolveDocumentPath(selectedDocument.value.path, linkPath);
238
232
  const linkedDocument = documentPathIndex.value.get(`${selectedDocument.value.project_key}\0${documentPath}`);
239
233
  if (!linkedDocument) {
240
- ElMessage.warning(`未收集引用文档:${documentPath}`);
234
+ ElMessage.warning(t("system.projectDoc.message.uncollected", { path: documentPath }));
241
235
  return;
242
236
  }
243
237
  void selectDocument(linkedDocument.id, decodeURIComponent(rawAnchor));
@@ -272,7 +266,15 @@ function scrollToAnchor(anchor: string) {
272
266
  function formatDocumentUpdatedAt(value: string) {
273
267
  const date = new Date(value);
274
268
  if (Number.isNaN(date.getTime())) return value;
275
- return documentUpdatedAtFormatter.format(date).replaceAll("/", "-");
269
+ return new Intl.DateTimeFormat(getCurrentLocale(), {
270
+ month: "2-digit",
271
+ day: "2-digit",
272
+ hour: "2-digit",
273
+ minute: "2-digit",
274
+ hourCycle: "h23"
275
+ })
276
+ .format(date)
277
+ .replaceAll("/", "-");
276
278
  }
277
279
 
278
280
  /** 将接口项目节点转换为管理端树节点。 */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@liujitcn/kratos-admin-system",
3
3
  "private": false,
4
- "version": "0.0.20",
4
+ "version": "0.0.21",
5
5
  "type": "module",
6
6
  "description": "kratos-admin system management module",
7
7
  "license": "MIT",
@@ -15,7 +15,7 @@
15
15
  "sortablejs": "^1.15.2",
16
16
  "swagger-ui-dist": "^5.32.9",
17
17
  "vue-element-plus-x": "^2.0.3",
18
- "@liujitcn/kratos-admin-core": "0.0.20"
18
+ "@liujitcn/kratos-admin-core": "0.0.21"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "@element-plus/icons-vue": "^2.3.1",
@@ -36,6 +36,10 @@
36
36
  "types": "./dist/package/declarations/src/api/*.d.ts",
37
37
  "default": "./dist/package/src/api/*.ts"
38
38
  },
39
+ "./components/*": {
40
+ "types": "./dist/package/declarations/src/components/*.d.ts",
41
+ "default": "./dist/package/src/components/*"
42
+ },
39
43
  "./rpc/*": {
40
44
  "types": "./dist/package/declarations/src/rpc/*.d.ts",
41
45
  "default": "./dist/package/src/rpc/*.ts"