@liujitcn/kratos-admin-system 0.0.1

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 (208) hide show
  1. package/README.md +137 -0
  2. package/dist/package/declarations/index.d.ts +1 -0
  3. package/dist/package/declarations/src/ai.d.ts +10 -0
  4. package/dist/package/declarations/src/api/base/ai_message.d.ts +27 -0
  5. package/dist/package/declarations/src/api/base/ai_session.d.ts +17 -0
  6. package/dist/package/declarations/src/api/base/ai_tool.d.ts +7 -0
  7. package/dist/package/declarations/src/api/base/oauth.d.ts +13 -0
  8. package/dist/package/declarations/src/api/base/sse.d.ts +31 -0
  9. package/dist/package/declarations/src/api/system/auth.d.ts +17 -0
  10. package/dist/package/declarations/src/api/system/base_api.d.ts +22 -0
  11. package/dist/package/declarations/src/api/system/base_area.d.ts +19 -0
  12. package/dist/package/declarations/src/api/system/base_config.d.ts +20 -0
  13. package/dist/package/declarations/src/api/system/base_dept.d.ts +21 -0
  14. package/dist/package/declarations/src/api/system/base_dict.d.ts +32 -0
  15. package/dist/package/declarations/src/api/system/base_job.d.ts +28 -0
  16. package/dist/package/declarations/src/api/system/base_log.d.ts +9 -0
  17. package/dist/package/declarations/src/api/system/base_menu.d.ts +21 -0
  18. package/dist/package/declarations/src/api/system/base_migration.d.ts +10 -0
  19. package/dist/package/declarations/src/api/system/base_post.d.ts +21 -0
  20. package/dist/package/declarations/src/api/system/base_role.d.ts +23 -0
  21. package/dist/package/declarations/src/api/system/base_tenant.d.ts +21 -0
  22. package/dist/package/declarations/src/api/system/base_user.d.ts +23 -0
  23. package/dist/package/declarations/src/api/system/code_gen.d.ts +14 -0
  24. package/dist/package/declarations/src/api/system/code_gen_column.d.ts +12 -0
  25. package/dist/package/declarations/src/api/system/code_gen_proto.d.ts +10 -0
  26. package/dist/package/declarations/src/api/system/code_gen_sse.d.ts +8 -0
  27. package/dist/package/declarations/src/api/system/code_gen_table.d.ts +18 -0
  28. package/dist/package/declarations/src/api/system/project_document.d.ts +9 -0
  29. package/dist/package/declarations/src/components/Ai.vue.d.ts +3 -0
  30. package/dist/package/declarations/src/index.d.ts +3 -0
  31. package/dist/package/declarations/src/module.d.ts +2 -0
  32. package/dist/package/declarations/src/rpc/base/v1/ai_message.d.ts +82 -0
  33. package/dist/package/declarations/src/rpc/base/v1/ai_session.d.ts +176 -0
  34. package/dist/package/declarations/src/rpc/base/v1/ai_tool.d.ts +59 -0
  35. package/dist/package/declarations/src/rpc/base/v1/oauth.d.ts +167 -0
  36. package/dist/package/declarations/src/rpc/base/v1/sse.d.ts +13 -0
  37. package/dist/package/declarations/src/rpc/common/v1/common.d.ts +57 -0
  38. package/dist/package/declarations/src/rpc/common/v1/enum.d.ts +58 -0
  39. package/dist/package/declarations/src/rpc/common/v1/types.d.ts +60 -0
  40. package/dist/package/declarations/src/rpc/google/protobuf/empty.d.ts +11 -0
  41. package/dist/package/declarations/src/rpc/google/protobuf/timestamp.d.ts +107 -0
  42. package/dist/package/declarations/src/rpc/system/admin/v1/auth.d.ts +156 -0
  43. package/dist/package/declarations/src/rpc/system/admin/v1/base_api.d.ts +193 -0
  44. package/dist/package/declarations/src/rpc/system/admin/v1/base_area.d.ts +82 -0
  45. package/dist/package/declarations/src/rpc/system/admin/v1/base_config.d.ts +112 -0
  46. package/dist/package/declarations/src/rpc/system/admin/v1/base_dept.d.ts +112 -0
  47. package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +215 -0
  48. package/dist/package/declarations/src/rpc/system/admin/v1/base_job.d.ts +177 -0
  49. package/dist/package/declarations/src/rpc/system/admin/v1/base_log.d.ts +87 -0
  50. package/dist/package/declarations/src/rpc/system/admin/v1/base_menu.d.ts +151 -0
  51. package/dist/package/declarations/src/rpc/system/admin/v1/base_migration.d.ts +64 -0
  52. package/dist/package/declarations/src/rpc/system/admin/v1/base_post.d.ts +112 -0
  53. package/dist/package/declarations/src/rpc/system/admin/v1/base_role.d.ts +128 -0
  54. package/dist/package/declarations/src/rpc/system/admin/v1/base_tenant.d.ts +112 -0
  55. package/dist/package/declarations/src/rpc/system/admin/v1/base_user.d.ts +161 -0
  56. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen.d.ts +155 -0
  57. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_column.d.ts +143 -0
  58. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_proto.d.ts +86 -0
  59. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_table.d.ts +149 -0
  60. package/dist/package/declarations/src/rpc/system/admin/v1/project_document.d.ts +64 -0
  61. package/dist/package/declarations/src/rpc/system/common/v1/enum.d.ts +67 -0
  62. package/dist/package/declarations/src/views/ai/chat/attachment.d.ts +14 -0
  63. package/dist/package/declarations/src/views/ai/chat/components/AiMarkdown.vue.d.ts +13 -0
  64. package/dist/package/declarations/src/views/ai/chat/components/ChatPanel.vue.d.ts +45 -0
  65. package/dist/package/declarations/src/views/ai/chat/components/SessionPanel.vue.d.ts +34 -0
  66. package/dist/package/declarations/src/views/ai/chat/components/XSender.vue.d.ts +12 -0
  67. package/dist/package/declarations/src/views/ai/chat/index.vue.d.ts +4 -0
  68. package/dist/package/declarations/src/views/ai/chat/message.d.ts +59 -0
  69. package/dist/package/declarations/src/views/ai/chat/stream.d.ts +10 -0
  70. package/dist/package/declarations/src/views/ai/chat/types.d.ts +115 -0
  71. package/dist/package/declarations/src/views/base/api/index.vue.d.ts +3 -0
  72. package/dist/package/declarations/src/views/base/area/index.vue.d.ts +3 -0
  73. package/dist/package/declarations/src/views/base/config/index.vue.d.ts +3 -0
  74. package/dist/package/declarations/src/views/base/dept/index.vue.d.ts +3 -0
  75. package/dist/package/declarations/src/views/base/dict/index.vue.d.ts +3 -0
  76. package/dist/package/declarations/src/views/base/dict/item.vue.d.ts +3 -0
  77. package/dist/package/declarations/src/views/base/job/index.vue.d.ts +3 -0
  78. package/dist/package/declarations/src/views/base/job/log.vue.d.ts +3 -0
  79. package/dist/package/declarations/src/views/base/log/index.vue.d.ts +3 -0
  80. package/dist/package/declarations/src/views/base/menu/index.vue.d.ts +3 -0
  81. package/dist/package/declarations/src/views/base/migration/index.vue.d.ts +4 -0
  82. package/dist/package/declarations/src/views/base/post/index.vue.d.ts +3 -0
  83. package/dist/package/declarations/src/views/base/role/index.vue.d.ts +3 -0
  84. package/dist/package/declarations/src/views/base/tenant/index.vue.d.ts +3 -0
  85. package/dist/package/declarations/src/views/base/user/components/dept-tree.vue.d.ts +19 -0
  86. package/dist/package/declarations/src/views/base/user/index.vue.d.ts +3 -0
  87. package/dist/package/declarations/src/views/profile/components/base.vue.d.ts +13 -0
  88. package/dist/package/declarations/src/views/profile/components/password.vue.d.ts +3 -0
  89. package/dist/package/declarations/src/views/profile/components/security.vue.d.ts +15 -0
  90. package/dist/package/declarations/src/views/profile/index.vue.d.ts +3 -0
  91. package/dist/package/declarations/src/views/tool/api-doc/index.vue.d.ts +4 -0
  92. package/dist/package/declarations/src/views/tool/code-gen/code-preview/index.vue.d.ts +3 -0
  93. package/dist/package/declarations/src/views/tool/code-gen/columns/index.vue.d.ts +3 -0
  94. package/dist/package/declarations/src/views/tool/code-gen/columns/option-copy.d.ts +25 -0
  95. package/dist/package/declarations/src/views/tool/code-gen/components/CodeGenProgressDialog.vue.d.ts +16 -0
  96. package/dist/package/declarations/src/views/tool/code-gen/components/CodePreviewPane.vue.d.ts +9 -0
  97. package/dist/package/declarations/src/views/tool/code-gen/config.d.ts +32 -0
  98. package/dist/package/declarations/src/views/tool/code-gen/preview/capabilities.d.ts +20 -0
  99. package/dist/package/declarations/src/views/tool/code-gen/preview/data.d.ts +42 -0
  100. package/dist/package/declarations/src/views/tool/code-gen/preview/index.vue.d.ts +3 -0
  101. package/dist/package/declarations/src/views/tool/code-gen/proto/index.vue.d.ts +3 -0
  102. package/dist/package/declarations/src/views/tool/code-gen/table/index.vue.d.ts +3 -0
  103. package/dist/package/declarations/src/views/tool/project-doc/index.vue.d.ts +4 -0
  104. package/dist/package/src/ai.ts +16 -0
  105. package/dist/package/src/api/base/ai_message.ts +139 -0
  106. package/dist/package/src/api/base/ai_session.ts +77 -0
  107. package/dist/package/src/api/base/ai_tool.ts +22 -0
  108. package/dist/package/src/api/base/oauth.ts +47 -0
  109. package/dist/package/src/api/base/sse.ts +192 -0
  110. package/dist/package/src/api/system/auth.ts +65 -0
  111. package/dist/package/src/api/system/base_api.ts +95 -0
  112. package/dist/package/src/api/system/base_area.ts +73 -0
  113. package/dist/package/src/api/system/base_config.ts +82 -0
  114. package/dist/package/src/api/system/base_dept.ts +83 -0
  115. package/dist/package/src/api/system/base_dict.ts +144 -0
  116. package/dist/package/src/api/system/base_job.ts +125 -0
  117. package/dist/package/src/api/system/base_log.ts +32 -0
  118. package/dist/package/src/api/system/base_menu.ts +83 -0
  119. package/dist/package/src/api/system/base_migration.ts +35 -0
  120. package/dist/package/src/api/system/base_post.ts +83 -0
  121. package/dist/package/src/api/system/base_role.ts +93 -0
  122. package/dist/package/src/api/system/base_tenant.ts +83 -0
  123. package/dist/package/src/api/system/base_user.ts +93 -0
  124. package/dist/package/src/api/system/code_gen.ts +56 -0
  125. package/dist/package/src/api/system/code_gen_column.ts +43 -0
  126. package/dist/package/src/api/system/code_gen_proto.ts +32 -0
  127. package/dist/package/src/api/system/code_gen_sse.ts +33 -0
  128. package/dist/package/src/api/system/code_gen_table.ts +74 -0
  129. package/dist/package/src/api/system/project_document.ts +33 -0
  130. package/dist/package/src/components/Ai.vue +57 -0
  131. package/dist/package/src/index.ts +3 -0
  132. package/dist/package/src/module.ts +17 -0
  133. package/dist/package/src/rpc/base/v1/ai_message.ts +98 -0
  134. package/dist/package/src/rpc/base/v1/ai_session.ts +214 -0
  135. package/dist/package/src/rpc/base/v1/ai_tool.ts +74 -0
  136. package/dist/package/src/rpc/base/v1/oauth.ts +199 -0
  137. package/dist/package/src/rpc/base/v1/sse.ts +22 -0
  138. package/dist/package/src/rpc/common/v1/common.ts +71 -0
  139. package/dist/package/src/rpc/common/v1/enum.ts +71 -0
  140. package/dist/package/src/rpc/common/v1/types.ts +77 -0
  141. package/dist/package/src/rpc/google/protobuf/empty.ts +19 -0
  142. package/dist/package/src/rpc/google/protobuf/timestamp.ts +115 -0
  143. package/dist/package/src/rpc/system/admin/v1/auth.ts +208 -0
  144. package/dist/package/src/rpc/system/admin/v1/base_api.ts +241 -0
  145. package/dist/package/src/rpc/system/admin/v1/base_area.ts +105 -0
  146. package/dist/package/src/rpc/system/admin/v1/base_config.ts +140 -0
  147. package/dist/package/src/rpc/system/admin/v1/base_dept.ts +140 -0
  148. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +249 -0
  149. package/dist/package/src/rpc/system/admin/v1/base_job.ts +206 -0
  150. package/dist/package/src/rpc/system/admin/v1/base_log.ts +101 -0
  151. package/dist/package/src/rpc/system/admin/v1/base_menu.ts +195 -0
  152. package/dist/package/src/rpc/system/admin/v1/base_migration.ts +81 -0
  153. package/dist/package/src/rpc/system/admin/v1/base_post.ts +134 -0
  154. package/dist/package/src/rpc/system/admin/v1/base_role.ts +151 -0
  155. package/dist/package/src/rpc/system/admin/v1/base_tenant.ts +134 -0
  156. package/dist/package/src/rpc/system/admin/v1/base_user.ts +190 -0
  157. package/dist/package/src/rpc/system/admin/v1/code_gen.ts +176 -0
  158. package/dist/package/src/rpc/system/admin/v1/code_gen_column.ts +170 -0
  159. package/dist/package/src/rpc/system/admin/v1/code_gen_proto.ts +104 -0
  160. package/dist/package/src/rpc/system/admin/v1/code_gen_table.ts +179 -0
  161. package/dist/package/src/rpc/system/admin/v1/project_document.ts +79 -0
  162. package/dist/package/src/rpc/system/common/v1/enum.ts +80 -0
  163. package/dist/package/src/typings/swagger-ui-dist.d.ts +28 -0
  164. package/dist/package/src/typings/x-markdown-vue.d.ts +1 -0
  165. package/dist/package/src/views/ai/chat/attachment.ts +65 -0
  166. package/dist/package/src/views/ai/chat/components/AiMarkdown.vue +162 -0
  167. package/dist/package/src/views/ai/chat/components/ChatPanel.vue +1861 -0
  168. package/dist/package/src/views/ai/chat/components/SessionPanel.vue +316 -0
  169. package/dist/package/src/views/ai/chat/components/XSender.vue +554 -0
  170. package/dist/package/src/views/ai/chat/index.vue +848 -0
  171. package/dist/package/src/views/ai/chat/message.ts +416 -0
  172. package/dist/package/src/views/ai/chat/stream.ts +115 -0
  173. package/dist/package/src/views/ai/chat/types.ts +126 -0
  174. package/dist/package/src/views/base/api/index.vue +455 -0
  175. package/dist/package/src/views/base/area/index.vue +269 -0
  176. package/dist/package/src/views/base/config/index.vue +530 -0
  177. package/dist/package/src/views/base/dept/index.vue +461 -0
  178. package/dist/package/src/views/base/dict/index.vue +304 -0
  179. package/dist/package/src/views/base/dict/item.vue +373 -0
  180. package/dist/package/src/views/base/job/index.vue +535 -0
  181. package/dist/package/src/views/base/job/log.vue +202 -0
  182. package/dist/package/src/views/base/log/index.vue +317 -0
  183. package/dist/package/src/views/base/menu/index.vue +944 -0
  184. package/dist/package/src/views/base/migration/index.vue +791 -0
  185. package/dist/package/src/views/base/post/index.vue +324 -0
  186. package/dist/package/src/views/base/role/index.vue +684 -0
  187. package/dist/package/src/views/base/tenant/index.vue +328 -0
  188. package/dist/package/src/views/base/user/components/dept-tree.vue +75 -0
  189. package/dist/package/src/views/base/user/index.vue +783 -0
  190. package/dist/package/src/views/profile/components/base.vue +320 -0
  191. package/dist/package/src/views/profile/components/password.vue +269 -0
  192. package/dist/package/src/views/profile/components/security.vue +443 -0
  193. package/dist/package/src/views/profile/index.vue +199 -0
  194. package/dist/package/src/views/tool/api-doc/index.vue +275 -0
  195. package/dist/package/src/views/tool/code-gen/code-preview/index.vue +233 -0
  196. package/dist/package/src/views/tool/code-gen/columns/index.vue +1456 -0
  197. package/dist/package/src/views/tool/code-gen/columns/option-copy.ts +125 -0
  198. package/dist/package/src/views/tool/code-gen/components/CodeGenProgressDialog.vue +328 -0
  199. package/dist/package/src/views/tool/code-gen/components/CodePreviewPane.vue +42 -0
  200. package/dist/package/src/views/tool/code-gen/config.ts +175 -0
  201. package/dist/package/src/views/tool/code-gen/preview/capabilities.ts +34 -0
  202. package/dist/package/src/views/tool/code-gen/preview/data.ts +331 -0
  203. package/dist/package/src/views/tool/code-gen/preview/index.vue +831 -0
  204. package/dist/package/src/views/tool/code-gen/proto/index.vue +703 -0
  205. package/dist/package/src/views/tool/code-gen/table/index.vue +864 -0
  206. package/dist/package/src/views/tool/project-doc/index.vue +561 -0
  207. package/package.json +60 -0
  208. package/tsconfig.json +13 -0
@@ -0,0 +1,269 @@
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="requestBaseAreaTable"
10
+ :pagination="false"
11
+ :indent="20"
12
+ :lazy="true"
13
+ :load="loadAreaChildren"
14
+ :tree-props="{ children: 'children', hasChildren: 'has_children' }"
15
+ />
16
+
17
+ <FormDialog
18
+ v-model="dialog.visible"
19
+ ref="formDialogRef"
20
+ :title="dialog.title"
21
+ width="640px"
22
+ :model="formData"
23
+ :fields="formFields"
24
+ :rules="rules"
25
+ label-width="100px"
26
+ @confirm="handleSubmit"
27
+ @close="handleCloseDialog"
28
+ />
29
+ </div>
30
+ </template>
31
+
32
+ <script setup lang="ts">
33
+ import { computed, reactive, ref } from "vue";
34
+
35
+ import type { FormRules } from "element-plus";
36
+ import { CirclePlus, Delete, EditPen } from "@element-plus/icons-vue";
37
+ import type { ColumnProps, HeaderActionProps, ProTableInstance } from "@liujitcn/kratos-admin-core/components/ProTable/interface";
38
+ import ProTable from "@liujitcn/kratos-admin-core/components/ProTable";
39
+ import FormDialog from "@liujitcn/kratos-admin-core/components/Dialog/FormDialog.vue";
40
+ import type { ProFormField, ProFormOption } from "@liujitcn/kratos-admin-core/components/ProForm/interface";
41
+ import { useAuthButtons } from "@liujitcn/kratos-admin-core/auth";
42
+ import { defBaseAreaService } from "@liujitcn/kratos-admin-system/api/system/base_area";
43
+
44
+ import type { TreeBaseAreaRequest, BaseArea, BaseAreaForm } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_area";
45
+
46
+ import { normalizeSelectedIds } from "@liujitcn/kratos-admin-core/table";
47
+
48
+ defineOptions({
49
+ name: "BaseArea",
50
+ inheritAttrs: false
51
+ });
52
+
53
+ const { BUTTONS } = useAuthButtons();
54
+ const proTable = ref<ProTableInstance>();
55
+ const formDialogRef = ref<InstanceType<typeof FormDialog>>();
56
+
57
+ const dialog = reactive({
58
+ title: "",
59
+ visible: false
60
+ });
61
+
62
+ const formData = reactive<BaseAreaForm>({
63
+ id: 0,
64
+ parent_id: 0,
65
+ name: ""
66
+ });
67
+
68
+ const rules = reactive<FormRules>({
69
+ parent_id: [{ required: true, message: "父级区域不能为空", trigger: "change" }],
70
+ name: [{ required: true, message: "区域名称不能为空", trigger: "blur" }, { max: 50, message: "区域名称不能超过 50 个字符", trigger: "blur" }]
71
+ });
72
+ const parentIdFormOptions = ref<ProFormOption[]>([]);
73
+
74
+ type GeneratedTreeOption = ProFormOption & {
75
+ has_children?: boolean;
76
+ isLeaf?: boolean;
77
+ };
78
+
79
+ /** 将树形接口返回的子节点转换为 Element Plus 懒加载节点。 */
80
+ function normalizeLazyTreeOptions(options: GeneratedTreeOption[] = []): ProFormOption[] {
81
+ return options.map(option => ({
82
+ ...option,
83
+ isLeaf: !option.has_children
84
+ }));
85
+ }
86
+
87
+ /** 懒加载parentIdForm树形选项的子节点。 */
88
+ async function loadParentIdFormTreeOptions(node: { level: number; value?: string | number; data?: { value?: string | number } }, resolve: (data: ProFormOption[]) => void) {
89
+ const parentId = node.level === 0 ? 0 : Number(node.data?.value ?? node.value ?? 0);
90
+ const response = await defBaseAreaService.OptionBaseArea({ "parent_id": parentId, lazy: true } as Parameters<typeof defBaseAreaService.OptionBaseArea>[0]);
91
+ resolve(normalizeLazyTreeOptions((response.list ?? []) as GeneratedTreeOption[]));
92
+ }
93
+
94
+
95
+ void loadFormOptions();
96
+
97
+ /** 行政区域表单字段配置。 */
98
+ const formFields = computed<ProFormField[]>(() => [
99
+ { prop: "parent_id", label: "父级区域", component: "tree-select", options: parentIdFormOptions.value, props: { lazy: true, load: loadParentIdFormTreeOptions, placeholder: "请选择", filterable: true, style: { width: "100%" } } },
100
+ { prop: "name", label: "区域名称", component: "input", props: { placeholder: "请输入区域名称" } }
101
+ ]);
102
+
103
+ /** 行政区域表格列配置。 */
104
+ const columns = computed<ColumnProps[]>(() => [
105
+ { type: "selection", width: 55 },
106
+ { prop: "name", label: "区域名称", align: "left", search: { el: "input" } },
107
+ {
108
+ prop: "operation",
109
+ label: "操作",
110
+ width: 150,
111
+ fixed: "right",
112
+ cellType: "actions",
113
+ actions: [
114
+ {
115
+ label: "编辑",
116
+ type: "primary",
117
+ link: true,
118
+ icon: EditPen,
119
+ hidden: () => !BUTTONS.value["base:area:update"],
120
+ onClick: scope => handleOpenDialog((scope.row as BaseArea).id)
121
+ },
122
+ {
123
+ label: "删除",
124
+ type: "danger",
125
+ link: true,
126
+ icon: Delete,
127
+ hidden: () => !BUTTONS.value["base:area:delete"],
128
+ onClick: scope => handleDelete(scope.row as BaseArea)
129
+ }
130
+ ]
131
+ }
132
+ ]);
133
+
134
+ /** 行政区域顶部按钮配置。 */
135
+ const headerActions: HeaderActionProps[] = [
136
+ {
137
+ label: "新增",
138
+ type: "success",
139
+ icon: CirclePlus,
140
+ hidden: () => !BUTTONS.value["base:area:create"],
141
+ onClick: () => handleOpenDialog()
142
+ },
143
+ {
144
+ label: "删除",
145
+ type: "danger",
146
+ icon: Delete,
147
+ hidden: () => !BUTTONS.value["base:area:delete"],
148
+ disabled: scope => !scope.selectedList.length,
149
+ onClick: scope => handleDelete(scope.selectedList as BaseArea[])
150
+ }
151
+ ];
152
+
153
+ /**
154
+ * 请求行政区域列表,并适配 ProTable 固定列表字段。
155
+ */
156
+ async function requestBaseAreaTable(params: TreeBaseAreaRequest) {
157
+ const data = await defBaseAreaService.TreeBaseArea({ ...params, parent_id: params.parent_id ?? 0 });
158
+ return { data: data.base_areas ?? [] };
159
+ }
160
+
161
+ /**
162
+ * 懒加载行政区域表格的子节点。
163
+ */
164
+ async function loadAreaChildren(row: BaseArea, _treeNode: unknown, resolve: (data: BaseArea[]) => void) {
165
+ try {
166
+ const data = await defBaseAreaService.TreeBaseArea({ parent_id: row.id, lazy: true });
167
+ resolve(data.base_areas ?? []);
168
+ } catch {
169
+ ElMessage.error("加载行政区域子节点失败");
170
+ resolve([]);
171
+ }
172
+ }
173
+
174
+ /**
175
+ * 刷新行政区域表格。
176
+ */
177
+ function refreshTable() {
178
+ proTable.value?.getTableList();
179
+ }
180
+ /** 加载表单选择项。 */
181
+ async function loadFormOptions() {
182
+ const parentIdFormResponse = await defBaseAreaService.OptionBaseArea({ "parent_id": 0, lazy: true } as Parameters<typeof defBaseAreaService.OptionBaseArea>[0]);
183
+ parentIdFormOptions.value = [{ label: "顶级节点", value: 0 }, ...normalizeLazyTreeOptions((parentIdFormResponse.list ?? []) as GeneratedTreeOption[]).filter(option => Number(option.value) !== 0)];
184
+ }
185
+
186
+ /**
187
+ * 打开行政区域弹窗。
188
+ */
189
+ async function handleOpenDialog(id?: number) {
190
+ resetForm();
191
+ await loadFormOptions();
192
+ dialog.title = id ? "修改行政区域" : "新增行政区域";
193
+ dialog.visible = true;
194
+ if (!id) return;
195
+
196
+ const data = await defBaseAreaService.GetBaseArea({ id });
197
+ Object.assign(formData, data);
198
+ }
199
+ /**
200
+ * 关闭行政区域弹窗。
201
+ */
202
+ function handleCloseDialog() {
203
+ dialog.visible = false;
204
+ resetForm();
205
+ }
206
+ /**
207
+ * 重置行政区域表单。
208
+ */
209
+ function resetForm() {
210
+ formDialogRef.value?.resetFields();
211
+ formDialogRef.value?.clearValidate();
212
+ formData.id = 0;
213
+ formData.parent_id = 0;
214
+ formData.name = "";
215
+ }
216
+ /**
217
+ * 提交行政区域表单。
218
+ */
219
+ function handleSubmit() {
220
+ formDialogRef.value?.validate()?.then(valid => {
221
+ if (!valid) return;
222
+
223
+ const payload = JSON.parse(JSON.stringify(formData)) as BaseAreaForm;
224
+ const request = payload.id
225
+ ? defBaseAreaService.UpdateBaseArea({ id: payload.id, base_area: payload })
226
+ : defBaseAreaService.CreateBaseArea({ base_area: payload });
227
+ request.then(() => {
228
+ ElMessage.success(payload.id ? "修改行政区域成功" : "新增行政区域成功");
229
+ handleCloseDialog();
230
+ refreshTable();
231
+ });
232
+ });
233
+ }
234
+
235
+ /**
236
+ * 删除行政区域,兼容单项删除与批量删除。
237
+ */
238
+ function handleDelete(selected?: number | string | Array<number | string> | BaseArea | BaseArea[]) {
239
+ const rowList = Array.isArray(selected)
240
+ ? (selected.filter(item => typeof item === "object") as BaseArea[])
241
+ : selected && typeof selected === "object"
242
+ ? [selected as BaseArea]
243
+ : [];
244
+ const ids = (
245
+ rowList.length ? rowList.map(item => item.id) : normalizeSelectedIds(selected as number | string | Array<number | string>)
246
+ ).join(",");
247
+ if (!ids) {
248
+ ElMessage.warning("请勾选删除项");
249
+ return;
250
+ }
251
+
252
+ const confirmMessage = rowList.length === 1 ? "是否确定删除行政区域?" : "确认删除已选中的行政区域吗?";
253
+ ElMessageBox.confirm(confirmMessage, "警告", {
254
+ confirmButtonText: "确定",
255
+ cancelButtonText: "取消",
256
+ type: "warning"
257
+ }).then(
258
+ () => {
259
+ defBaseAreaService.DeleteBaseArea({ ids }).then(() => {
260
+ ElMessage.success("删除行政区域成功");
261
+ refreshTable();
262
+ });
263
+ },
264
+ () => {
265
+ ElMessage.info("已取消删除行政区域");
266
+ }
267
+ );
268
+ }
269
+ </script>