@liujitcn/kratos-admin-system 0.0.38 → 0.0.40

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 (147) hide show
  1. package/README.md +22 -0
  2. package/dist/package/declarations/src/api/system/admin/v1/base_config.d.ts +1 -5
  3. package/dist/package/declarations/src/api/system/admin/v1/base_login_log.d.ts +3 -1
  4. package/dist/package/declarations/src/api/system/admin/v1/base_session.d.ts +7 -1
  5. package/dist/package/declarations/src/components/DynamicI18nCell.vue.d.ts +2 -8
  6. package/dist/package/declarations/src/components/DynamicI18nEditor.vue.d.ts +20 -3
  7. package/dist/package/declarations/src/components/dynamicI18n.d.ts +2 -2
  8. package/dist/package/declarations/src/locales/generated.d.ts +5770 -5686
  9. package/dist/package/declarations/src/rpc/base/v1/login.d.ts +2 -0
  10. package/dist/package/declarations/src/rpc/base/v1/notification.d.ts +1 -1
  11. package/dist/package/declarations/src/rpc/base/v1/oauth.d.ts +4 -0
  12. package/dist/package/declarations/src/rpc/base/v1/oauth_client.d.ts +1 -1
  13. package/dist/package/declarations/src/rpc/system/admin/v1/base_api_log.d.ts +1 -1
  14. package/dist/package/declarations/src/rpc/system/admin/v1/base_config.d.ts +4 -40
  15. package/dist/package/declarations/src/rpc/system/admin/v1/base_data_access_log.d.ts +1 -1
  16. package/dist/package/declarations/src/rpc/system/admin/v1/base_i18n.d.ts +1 -1
  17. package/dist/package/declarations/src/rpc/system/admin/v1/base_log.d.ts +1 -1
  18. package/dist/package/declarations/src/rpc/system/admin/v1/base_login_log.d.ts +10 -1
  19. package/dist/package/declarations/src/rpc/system/admin/v1/base_login_policy.d.ts +8 -0
  20. package/dist/package/declarations/src/rpc/system/admin/v1/base_message.d.ts +1 -1
  21. package/dist/package/declarations/src/rpc/system/admin/v1/base_message_category.d.ts +1 -1
  22. package/dist/package/declarations/src/rpc/system/admin/v1/base_migration.d.ts +1 -1
  23. package/dist/package/declarations/src/rpc/system/admin/v1/base_operation_log.d.ts +1 -1
  24. package/dist/package/declarations/src/rpc/system/admin/v1/base_permission_log.d.ts +1 -1
  25. package/dist/package/declarations/src/rpc/system/admin/v1/base_policy_evaluation_log.d.ts +1 -1
  26. package/dist/package/declarations/src/rpc/system/admin/v1/base_redact_output_policy.d.ts +1 -1
  27. package/dist/package/declarations/src/rpc/system/admin/v1/base_redact_storage_policy.d.ts +1 -1
  28. package/dist/package/declarations/src/rpc/system/admin/v1/base_session.d.ts +41 -0
  29. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_archive.d.ts +1 -1
  30. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_archive_record.d.ts +1 -1
  31. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_archive_restore.d.ts +1 -1
  32. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_backup.d.ts +1 -1
  33. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_backup_record.d.ts +1 -1
  34. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_backup_restore.d.ts +1 -1
  35. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_source.d.ts +1 -1
  36. package/dist/package/declarations/src/rpc/system/admin/v1/cache.d.ts +1 -1
  37. package/dist/package/declarations/src/rpc/system/admin/v1/oauth_client.d.ts +1 -1
  38. package/dist/package/declarations/src/rpc/system/admin/v1/ops_monitoring.d.ts +1 -1
  39. package/dist/package/declarations/src/utils/code-gen-progress.d.ts +3 -0
  40. package/dist/package/declarations/src/views/profile/components/login-log.vue.d.ts +3 -0
  41. package/dist/package/declarations/src/views/tool/code-gen/components/CodeGenGenerateConfirm.vue.d.ts +11 -0
  42. package/dist/package/declarations/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue.d.ts +5 -9
  43. package/dist/package/declarations/src/views/tool/code-gen/config.d.ts +3 -0
  44. package/dist/package/src/api/base/v1/sse.ts +11 -2
  45. package/dist/package/src/api/system/admin/v1/base_config.ts +0 -20
  46. package/dist/package/src/api/system/admin/v1/base_login_log.ts +10 -0
  47. package/dist/package/src/api/system/admin/v1/base_session.ts +32 -1
  48. package/dist/package/src/components/DynamicI18nCell.vue +55 -220
  49. package/dist/package/src/components/DynamicI18nEditor.vue +150 -146
  50. package/dist/package/src/components/dynamicI18n.ts +10 -6
  51. package/dist/package/src/config/index.ts +1 -3
  52. package/dist/package/src/locales/en-US.json +1444 -1435
  53. package/dist/package/src/locales/ja-JP.json +1448 -1439
  54. package/dist/package/src/locales/zh-CN.json +1444 -1435
  55. package/dist/package/src/locales/zh-TW.json +1445 -1436
  56. package/dist/package/src/rpc/base/v1/ai_message.ts +1 -1
  57. package/dist/package/src/rpc/base/v1/ai_session.ts +1 -1
  58. package/dist/package/src/rpc/base/v1/ai_tool.ts +1 -1
  59. package/dist/package/src/rpc/base/v1/config.ts +1 -1
  60. package/dist/package/src/rpc/base/v1/login.ts +3 -1
  61. package/dist/package/src/rpc/base/v1/notification.ts +2 -2
  62. package/dist/package/src/rpc/base/v1/oauth.ts +5 -1
  63. package/dist/package/src/rpc/base/v1/oauth_client.ts +2 -2
  64. package/dist/package/src/rpc/base/v1/sse.ts +1 -1
  65. package/dist/package/src/rpc/common/v1/analytics.ts +1 -1
  66. package/dist/package/src/rpc/common/v1/common.ts +1 -1
  67. package/dist/package/src/rpc/common/v1/enum.ts +1 -1
  68. package/dist/package/src/rpc/common/v1/types.ts +1 -1
  69. package/dist/package/src/rpc/google/protobuf/empty.ts +1 -1
  70. package/dist/package/src/rpc/google/protobuf/timestamp.ts +1 -1
  71. package/dist/package/src/rpc/system/admin/v1/auth.ts +1 -1
  72. package/dist/package/src/rpc/system/admin/v1/base_api.ts +1 -1
  73. package/dist/package/src/rpc/system/admin/v1/base_api_log.ts +2 -2
  74. package/dist/package/src/rpc/system/admin/v1/base_area.ts +1 -1
  75. package/dist/package/src/rpc/system/admin/v1/base_config.ts +4 -44
  76. package/dist/package/src/rpc/system/admin/v1/base_dashboard.ts +1 -1
  77. package/dist/package/src/rpc/system/admin/v1/base_data_access_log.ts +2 -2
  78. package/dist/package/src/rpc/system/admin/v1/base_dept.ts +1 -1
  79. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +1 -1
  80. package/dist/package/src/rpc/system/admin/v1/base_dict_item.ts +1 -1
  81. package/dist/package/src/rpc/system/admin/v1/base_file.ts +1 -1
  82. package/dist/package/src/rpc/system/admin/v1/base_i18n.ts +2 -2
  83. package/dist/package/src/rpc/system/admin/v1/base_job.ts +1 -1
  84. package/dist/package/src/rpc/system/admin/v1/base_job_log.ts +1 -1
  85. package/dist/package/src/rpc/system/admin/v1/base_language.ts +1 -1
  86. package/dist/package/src/rpc/system/admin/v1/base_log.ts +2 -2
  87. package/dist/package/src/rpc/system/admin/v1/base_login_log.ts +12 -2
  88. package/dist/package/src/rpc/system/admin/v1/base_login_policy.ts +11 -1
  89. package/dist/package/src/rpc/system/admin/v1/base_menu.ts +1 -1
  90. package/dist/package/src/rpc/system/admin/v1/base_message.ts +2 -2
  91. package/dist/package/src/rpc/system/admin/v1/base_message_category.ts +2 -2
  92. package/dist/package/src/rpc/system/admin/v1/base_migration.ts +2 -2
  93. package/dist/package/src/rpc/system/admin/v1/base_operation_log.ts +2 -2
  94. package/dist/package/src/rpc/system/admin/v1/base_permission_log.ts +2 -2
  95. package/dist/package/src/rpc/system/admin/v1/base_policy_evaluation_log.ts +2 -2
  96. package/dist/package/src/rpc/system/admin/v1/base_post.ts +1 -1
  97. package/dist/package/src/rpc/system/admin/v1/base_redact_common.ts +1 -1
  98. package/dist/package/src/rpc/system/admin/v1/base_redact_output_policy.ts +2 -2
  99. package/dist/package/src/rpc/system/admin/v1/base_redact_rule.ts +1 -1
  100. package/dist/package/src/rpc/system/admin/v1/base_redact_storage_policy.ts +2 -2
  101. package/dist/package/src/rpc/system/admin/v1/base_role.ts +1 -1
  102. package/dist/package/src/rpc/system/admin/v1/base_session.ts +47 -1
  103. package/dist/package/src/rpc/system/admin/v1/base_table_archive.ts +2 -2
  104. package/dist/package/src/rpc/system/admin/v1/base_table_archive_record.ts +2 -2
  105. package/dist/package/src/rpc/system/admin/v1/base_table_archive_restore.ts +2 -2
  106. package/dist/package/src/rpc/system/admin/v1/base_table_backup.ts +2 -2
  107. package/dist/package/src/rpc/system/admin/v1/base_table_backup_record.ts +2 -2
  108. package/dist/package/src/rpc/system/admin/v1/base_table_backup_restore.ts +2 -2
  109. package/dist/package/src/rpc/system/admin/v1/base_table_source.ts +2 -2
  110. package/dist/package/src/rpc/system/admin/v1/base_tenant.ts +1 -1
  111. package/dist/package/src/rpc/system/admin/v1/base_third_account.ts +1 -1
  112. package/dist/package/src/rpc/system/admin/v1/base_user.ts +1 -1
  113. package/dist/package/src/rpc/system/admin/v1/cache.ts +2 -2
  114. package/dist/package/src/rpc/system/admin/v1/code_gen.ts +1 -1
  115. package/dist/package/src/rpc/system/admin/v1/code_gen_column.ts +1 -1
  116. package/dist/package/src/rpc/system/admin/v1/code_gen_proto.ts +1 -1
  117. package/dist/package/src/rpc/system/admin/v1/code_gen_table.ts +1 -1
  118. package/dist/package/src/rpc/system/admin/v1/common.ts +1 -1
  119. package/dist/package/src/rpc/system/admin/v1/oauth_client.ts +2 -2
  120. package/dist/package/src/rpc/system/admin/v1/ops_monitoring.ts +2 -2
  121. package/dist/package/src/rpc/system/admin/v1/runtime_log.ts +1 -1
  122. package/dist/package/src/rpc/system/common/v1/common.ts +1 -1
  123. package/dist/package/src/rpc/system/config/v1/system_config.ts +1 -1
  124. package/dist/package/src/utils/code-gen-progress.ts +15 -0
  125. package/dist/package/src/views/base/config/index.vue +183 -48
  126. package/dist/package/src/views/base/dict/index.vue +6 -9
  127. package/dist/package/src/views/base/dict/item.vue +6 -15
  128. package/dist/package/src/views/base/job/index.vue +16 -17
  129. package/dist/package/src/views/base/login-policy/index.vue +28 -0
  130. package/dist/package/src/views/base/menu/index.vue +78 -15
  131. package/dist/package/src/views/base/online-session/index.vue +116 -0
  132. package/dist/package/src/views/base/user/index.vue +20 -8
  133. package/dist/package/src/views/profile/components/login-log.vue +123 -0
  134. package/dist/package/src/views/profile/components/session.vue +46 -61
  135. package/dist/package/src/views/profile/index.vue +13 -9
  136. package/dist/package/src/views/tool/code-gen/code-preview/index.vue +5 -15
  137. package/dist/package/src/views/tool/code-gen/columns/index.vue +17 -25
  138. package/dist/package/src/views/tool/code-gen/components/CodeGenGenerateConfirm.vue +115 -0
  139. package/dist/package/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue +27 -186
  140. package/dist/package/src/views/tool/code-gen/components/CodeGenProgressDialog.vue +2 -0
  141. package/dist/package/src/views/tool/code-gen/config.ts +15 -1
  142. package/dist/package/src/views/tool/code-gen/table/index.vue +100 -45
  143. package/package.json +3 -2
  144. package/dist/package/declarations/src/config/database-backup.d.ts +0 -12
  145. package/dist/package/src/config/database-backup.ts +0 -57
  146. package/dist/package/src/views/base/runtime-config/index.vue +0 -479
  147. /package/dist/package/declarations/src/views/base/{runtime-config → online-session}/index.vue.d.ts +0 -0
@@ -15,8 +15,8 @@
15
15
  v-model="dialog.visible"
16
16
  ref="formDialogRef"
17
17
  :title="dialogTitle"
18
- width="920px"
19
- label-width="240px"
18
+ width="min(1440px, calc(100vw - 32px))"
19
+ label-width="180px"
20
20
  top="4vh"
21
21
  :model="formData"
22
22
  :fields="formFields"
@@ -24,6 +24,7 @@
24
24
  :confirm-loading="saving"
25
25
  :gutter="16"
26
26
  :col-span="12"
27
+ :form-props="{ class: 'code-gen-table-form' }"
27
28
  @confirm="handleSubmit"
28
29
  @close="handleCloseDialog"
29
30
  >
@@ -31,8 +32,14 @@
31
32
  <CodeGenLocaleEditor
32
33
  :model-value="formData.i18n_config"
33
34
  :source-comment="formData.comment"
34
- :show-left-tree-comment="formData.page_type === 'left_tree'"
35
- :source-left-tree-comment="formData.left_tree_config?.comment"
35
+ @update:model-value="value => (formData.i18n_config = value)"
36
+ />
37
+ </template>
38
+ <template #leftTreeI18nConfig>
39
+ <CodeGenLocaleEditor
40
+ :model-value="formData.i18n_config"
41
+ :source-comment="formData.left_tree_config?.comment"
42
+ field="left_tree_comment"
36
43
  @update:model-value="value => (formData.i18n_config = value)"
37
44
  />
38
45
  </template>
@@ -49,7 +56,7 @@
49
56
  </template>
50
57
 
51
58
  <script setup lang="ts">
52
- import { computed, nextTick, reactive, ref } from "vue";
59
+ import { computed, h, onBeforeUnmount, nextTick, reactive, ref } from "vue";
53
60
  import { useRouter } from "vue-router";
54
61
  import {
55
62
  CirclePlus,
@@ -88,8 +95,11 @@ import { CodeGenTableStatus } from "@liujitcn/kratos-admin-system/rpc/system/adm
88
95
  import { buildPageRequest, normalizeSelectedIds } from "@liujitcn/kratos-admin-core/table";
89
96
  import { t } from "@liujitcn/kratos-admin-core";
90
97
  import CodeGenProgressDialog from "../components/CodeGenProgressDialog.vue";
98
+ import { loadEnabledBaseLanguages } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_language";
91
99
  import CodeGenLocaleEditor from "../components/CodeGenLocaleEditor.vue";
100
+ import CodeGenGenerateConfirm from "../components/CodeGenGenerateConfirm.vue";
92
101
  import {
102
+ withCodeGenLocaleDefaults,
93
103
  codeGenPageTypeOptions,
94
104
  codeGenTableRules,
95
105
  createDefaultCodeGenLeftTreeConfig,
@@ -222,20 +232,13 @@ const formFields = computed<ProFormField[]>(() => [
222
232
  },
223
233
  {
224
234
  prop: "comment",
235
+ suffixSlotName: "tableI18nConfig",
225
236
  label: t("system.code.gen.table.field.comment"),
226
237
  component: "input",
227
238
  colSpan: 24,
228
239
  labelTooltip: t("system.code.gen.table.tooltip.comment"),
229
240
  props: { placeholder: t("system.code.gen.table.placeholder.comment") }
230
241
  },
231
- {
232
- prop: "i18n_config",
233
- label: t("system.code.gen.i18n.field.i18ns"),
234
- component: "slot",
235
- slotName: "tableI18nConfig",
236
- colSpan: 24,
237
- labelTooltip: t("system.code.gen.i18n.tooltip.table")
238
- },
239
242
  {
240
243
  prop: "business_module",
241
244
  label: t("system.code.gen.table.field.business_module"),
@@ -263,6 +266,7 @@ const formFields = computed<ProFormField[]>(() => [
263
266
  prop: "page_type",
264
267
  label: t("system.code.gen.table.field.page_type"),
265
268
  component: "segmented",
269
+ colSpan: 16,
266
270
  options: pageTypeOptions.value,
267
271
  labelTooltip: t("system.code.gen.table.tooltip.page_type"),
268
272
  props: { onChange: handlePageTypeChange }
@@ -312,6 +316,7 @@ const formFields = computed<ProFormField[]>(() => [
312
316
  },
313
317
  {
314
318
  prop: "left_tree_config.comment",
319
+ suffixSlotName: "leftTreeI18nConfig",
315
320
  label: t("system.code.gen.table.field.left_tree_comment"),
316
321
  component: "input",
317
322
  labelTooltip: t("system.code.gen.table.tooltip.left_tree_comment"),
@@ -387,9 +392,9 @@ const formFields = computed<ProFormField[]>(() => [
387
392
  label: t("system.code.gen.table.field.gen_backend"),
388
393
  component: "switch",
389
394
  labelTooltip: t("system.code.gen.table.tooltip.gen_backend"),
390
- // 三个生成开关始终从新行开始并排展示。
395
+ // 生成开关按两列排列,减少表单横向空置并保持开关内容紧凑。
391
396
  rowBreakBefore: true,
392
- colSpan: 8,
397
+ colSpan: 12,
393
398
  props: { activeText: t("system.code.gen.value.generate"), inactiveText: t("system.code.gen.value.skip") }
394
399
  },
395
400
  {
@@ -397,14 +402,15 @@ const formFields = computed<ProFormField[]>(() => [
397
402
  label: t("system.code.gen.table.field.gen_frontend"),
398
403
  component: "switch",
399
404
  labelTooltip: t("system.code.gen.table.tooltip.gen_frontend"),
400
- colSpan: 8,
405
+ colSpan: 12,
401
406
  props: { activeText: t("system.code.gen.value.generate"), inactiveText: t("system.code.gen.value.skip") }
402
407
  },
403
408
  {
404
409
  prop: "gen_sql",
405
410
  label: t("system.code.gen.table.field.gen_sql"),
406
411
  component: "switch",
407
- colSpan: 8,
412
+ colSpan: 12,
413
+ rowBreakBefore: false,
408
414
  labelTooltip: t("system.code.gen.table.tooltip.gen_sql"),
409
415
  props: { activeText: t("system.code.gen.value.generate"), inactiveText: t("system.code.gen.value.skip") }
410
416
  },
@@ -412,7 +418,7 @@ const formFields = computed<ProFormField[]>(() => [
412
418
  prop: "status",
413
419
  label: t("system.code.gen.table.field.status"),
414
420
  component: "dict",
415
- colSpan: 24,
421
+ colSpan: 12,
416
422
  props: { code: "code_gen_table_status", codeType: "number", type: "radio" },
417
423
  labelTooltip: t("system.code.gen.table.tooltip.status")
418
424
  },
@@ -595,6 +601,37 @@ async function handleOpenCodePreview(tableId: number) {
595
601
  await router.push(`/code/gen/code/preview/${tableId}`);
596
602
  }
597
603
 
604
+ let releaseGenerationHotUpdates: (() => void) | undefined;
605
+
606
+ /** 等待开发服务器暂停热更新,避免生成文件的中间状态反复刷新页面。 */
607
+ async function holdGenerationHotUpdates() {
608
+ const hot = import.meta.hot;
609
+ if (!hot || releaseGenerationHotUpdates) return;
610
+ await new Promise<void>(resolve => {
611
+ const held = () => {
612
+ clearTimeout(timeout);
613
+ hot.off("admin:codegen-held", held);
614
+ releaseGenerationHotUpdates = () => hot.send("admin:codegen-release", {});
615
+ resolve();
616
+ };
617
+ const timeout = setTimeout(() => {
618
+ hot.off("admin:codegen-held", held);
619
+ hot.send("admin:codegen-release", {});
620
+ resolve();
621
+ }, 2000);
622
+ hot.on("admin:codegen-held", held);
623
+ hot.send("admin:codegen-hold", {});
624
+ });
625
+ }
626
+
627
+ /** 任务结束且结果弹窗关闭后恢复开发热更新。 */
628
+ function releaseGenerationUpdates() {
629
+ releaseGenerationHotUpdates?.();
630
+ releaseGenerationHotUpdates = undefined;
631
+ }
632
+
633
+ onBeforeUnmount(releaseGenerationUpdates);
634
+
598
635
  /** 创建单项或批量代码生成任务。 */
599
636
  async function handleGenerate(selected: CodeGenGenerateTarget) {
600
637
  const tables = Array.isArray(selected) ? selected : [selected];
@@ -608,7 +645,7 @@ async function handleGenerate(selected: CodeGenGenerateTarget) {
608
645
  return;
609
646
  }
610
647
  generating.value = true;
611
- let missingI18ns: string[] = [];
648
+ let missingI18ns: Array<{ name: string; items: string[] }> = [];
612
649
  try {
613
650
  const previewEntries = await Promise.all(
614
651
  tables.map(async table => ({
@@ -616,44 +653,31 @@ async function handleGenerate(selected: CodeGenGenerateTarget) {
616
653
  preview: await defCodeGenService.PreviewCodeGen({ table_id: table.id, output_paths: undefined })
617
654
  }))
618
655
  );
619
- missingI18ns = previewEntries.flatMap(({ table, preview }) =>
620
- (preview.missing_i18ns ?? []).map(item => (tables.length === 1 ? item : `${table.name}: ${item}`))
621
- );
656
+ missingI18ns = previewEntries
657
+ .map(({ table, preview }) => ({ name: table.name, items: preview.missing_i18ns ?? [] }))
658
+ .filter(group => group.items.length);
622
659
  } finally {
623
660
  generating.value = false;
624
661
  }
625
- if (missingI18ns.length) {
626
- try {
627
- await ElMessageBox.alert(
628
- t("system.code.gen.preview.message.missing_i18ns", {
629
- items: missingI18ns.join(t("system.code.gen.preview.value.list_separator"))
630
- }),
631
- t("common.title.warning"),
632
- {
633
- confirmButtonText: t("common.action.close"),
634
- type: "warning"
635
- }
636
- );
637
- } catch {
638
- // 关闭提示框与点击关闭按钮语义一致。
639
- }
640
- return;
641
- }
642
662
  const message =
643
663
  tables.length === 1
644
664
  ? t("system.code.gen.table.dialog.generate_one", { name: tables[0].name })
645
665
  : t("system.code.gen.table.dialog.generate_batch", { count: tables.length });
646
666
  try {
647
- await ElMessageBox.confirm(message, t("common.title.notice"), {
648
- confirmButtonText: t("common.action.confirm"),
667
+ const content = h(CodeGenGenerateConfirm, { message, groups: missingI18ns });
668
+ await ElMessageBox.confirm(content, t("system.code.gen.table.dialog.generate_title"), {
669
+ confirmButtonText: t("system.code.gen.action.generate"),
649
670
  cancelButtonText: t("common.action.cancel"),
650
- type: "warning"
671
+ customClass: "code-gen-generate-confirm",
672
+ showClose: true,
673
+ closeOnClickModal: false
651
674
  });
652
675
  } catch {
653
676
  return;
654
677
  }
655
678
  generating.value = true;
656
679
  try {
680
+ await holdGenerationHotUpdates();
657
681
  const data = await defCodeGenService.StartCodeGenTask({
658
682
  table_ids: tables.map(table => table.id)
659
683
  });
@@ -665,6 +689,7 @@ async function handleGenerate(selected: CodeGenGenerateTarget) {
665
689
  handleProgressDialogVisibleChange(true);
666
690
  } catch (error) {
667
691
  generating.value = false;
692
+ releaseGenerationUpdates();
668
693
  throw error;
669
694
  }
670
695
  }
@@ -710,11 +735,13 @@ function handleProgressDialogVisibleChange(visible: boolean) {
710
735
  return;
711
736
  }
712
737
  window.sessionStorage.removeItem(codeGenProgressDialogVisibleStorageKey);
738
+ if (!generating.value) releaseGenerationUpdates();
713
739
  }
714
740
 
715
741
  /** 生成任务结束后刷新列表。 */
716
742
  function handleProgressCompleted() {
717
743
  generating.value = false;
744
+ if (!progressDialogVisible.value) releaseGenerationUpdates();
718
745
  window.sessionStorage.removeItem(codeGenProgressDialogVisibleStorageKey);
719
746
  progressSelectedTableIds.value = [];
720
747
  proTable.value?.clearSelection();
@@ -752,6 +779,7 @@ function removeProgressSelectedTableIds() {
752
779
 
753
780
  /** 请求代码生成表配置列表。 */
754
781
  async function requestCodeGenTable(params: PageCodeGenTableRequest) {
782
+ await loadEnabledBaseLanguages();
755
783
  const data = await defCodeGenTableService.PageCodeGenTable(buildPageRequest(params));
756
784
  return { data: { ...data, list: data.code_gen_tables ?? [] } };
757
785
  }
@@ -862,7 +890,15 @@ async function handleSubmit() {
862
890
  if (!valid) return;
863
891
  if (!formData.parent_menu_id) return;
864
892
 
865
- const payload: CodeGenTableForm = { ...formData, parent_menu_id: formData.parent_menu_id };
893
+ const payload: CodeGenTableForm = {
894
+ ...formData,
895
+ parent_menu_id: formData.parent_menu_id,
896
+ i18n_config: withCodeGenLocaleDefaults(
897
+ formData.i18n_config,
898
+ formData.comment,
899
+ formData.page_type === "left_tree" ? formData.left_tree_config?.comment : ""
900
+ )
901
+ };
866
902
  saving.value = true;
867
903
  try {
868
904
  if (formData.id) {
@@ -970,14 +1006,14 @@ function resolveDefaultColumn(columns: CodeGenDatabaseColumn[], columnName: stri
970
1006
  return columns.some(item => item.name === columnName) ? columnName : "";
971
1007
  }
972
1008
 
973
- /** 转换菜单树为 ProForm 树形选择项。 */
1009
+ /** 转换菜单树为 ProForm 树形选择项,仅允许八位编号的一至三级目录承载生成页面。 */
974
1010
  function convertMenuOptions(options: BaseMenu[]): ProFormOption[] {
975
1011
  return options
976
1012
  .filter(item => item.type === BaseMenuType.BASE_MENU_TYPE_FOLDER)
977
1013
  .map(item => ({
978
1014
  label: item.meta?.title || item.name || item.path,
979
1015
  value: item.id,
980
- disabled: item.id < 100 || item.id > 99999,
1016
+ disabled: item.id < 10000000 || item.id > 99999999 || item.id % 100 !== 0,
981
1017
  children: convertMenuOptions(item.children ?? [])
982
1018
  }));
983
1019
  }
@@ -1022,6 +1058,25 @@ function ensureLeftTreeConfig() {
1022
1058
  </script>
1023
1059
 
1024
1060
  <style scoped lang="scss">
1061
+ @media (max-width: 767px) {
1062
+ :deep(.code-gen-table-form) {
1063
+ .el-col {
1064
+ flex: 0 0 100%;
1065
+ max-width: 100%;
1066
+ }
1067
+ .el-form-item {
1068
+ flex-direction: column;
1069
+ }
1070
+ .el-form-item__label {
1071
+ justify-content: flex-start;
1072
+ width: auto !important;
1073
+ }
1074
+ .el-form-item__content {
1075
+ margin-left: 0 !important;
1076
+ }
1077
+ }
1078
+ }
1079
+
1025
1080
  /* 固定操作列表头与普通表头使用同一主题背景,并保持行内操作单行展示。 */
1026
1081
  :deep(.code-gen-table) {
1027
1082
  --el-table-header-bg-color: var(--el-fill-color-light);
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.38",
4
+ "version": "0.0.40",
5
5
  "type": "module",
6
6
  "description": "kratos-admin system management module",
7
7
  "license": "MIT",
@@ -11,11 +11,12 @@
11
11
  "url": "git@github.com:liujitcn/kratos-admin.git"
12
12
  },
13
13
  "dependencies": {
14
+ "@lucide/vue": "^1.39.0",
14
15
  "@microsoft/fetch-event-source": "^2.0.1",
15
16
  "sortablejs": "^1.15.2",
16
17
  "swagger-ui-dist": "^5.32.9",
17
18
  "vue-element-plus-x": "^2.0.3",
18
- "@liujitcn/kratos-admin-core": "0.0.38"
19
+ "@liujitcn/kratos-admin-core": "0.0.40"
19
20
  },
20
21
  "peerDependencies": {
21
22
  "@element-plus/icons-vue": "^2.3.1",
@@ -1,12 +0,0 @@
1
- import type { RuntimeConfigDefinition } from "./types";
2
- /** 数据库备份配置模型。 */
3
- export interface DatabaseBackupConfig {
4
- enabled: boolean;
5
- integrity_key: string;
6
- encryption_key: string;
7
- directory: string;
8
- gzip: boolean;
9
- retention_count: number;
10
- }
11
- /** 数据库备份配置定义。 */
12
- export declare const databaseBackupConfig: RuntimeConfigDefinition<DatabaseBackupConfig>;
@@ -1,57 +0,0 @@
1
- import { Coin } from "@element-plus/icons-vue";
2
- import type { RuntimeConfigDefinition } from "./types";
3
-
4
- /** 数据库备份配置模型。 */
5
- export interface DatabaseBackupConfig {
6
- enabled: boolean;
7
- integrity_key: string;
8
- encryption_key: string;
9
- directory: string;
10
- gzip: boolean;
11
- retention_count: number;
12
- }
13
-
14
- /** 数据库备份配置定义。 */
15
- export const databaseBackupConfig: RuntimeConfigDefinition<DatabaseBackupConfig> = {
16
- key: "databaseBackup",
17
- titleKey: "system.base.runtime_config.backup.title",
18
- descriptionKey: "system.base.runtime_config.backup.description",
19
- icon: Coin,
20
- createModel: () => ({
21
- enabled: false,
22
- integrity_key: "",
23
- encryption_key: "",
24
- directory: "./backups",
25
- gzip: true,
26
- retention_count: 7
27
- }),
28
- fields: [
29
- { prop: "enabled", labelKey: "system.base.runtime_config.field.enabled", component: "switch" },
30
- {
31
- prop: "integrity_key",
32
- labelKey: "system.base.runtime_config.field.integrity_key",
33
- component: "password",
34
- props: { showPassword: true, autocomplete: "new-password" }
35
- },
36
- {
37
- prop: "encryption_key",
38
- labelKey: "system.base.runtime_config.field.encryption_key",
39
- component: "password",
40
- props: { showPassword: true, autocomplete: "new-password" }
41
- },
42
- {
43
- prop: "directory",
44
- labelKey: "system.base.runtime_config.field.directory",
45
- component: "input",
46
- rules: [{ required: true, messageKey: "system.base.runtime_config.validation.directory", trigger: "blur" }]
47
- },
48
- { prop: "gzip", labelKey: "system.base.runtime_config.field.gzip", component: "switch" },
49
- {
50
- prop: "retention_count",
51
- labelKey: "system.base.runtime_config.field.retention_count",
52
- component: "input-number",
53
- props: { min: 1, max: 1000, controls: true },
54
- rules: [{ type: "number", min: 1, messageKey: "system.base.runtime_config.validation.retention_count", trigger: "blur" }]
55
- }
56
- ]
57
- };