@liujitcn/kratos-admin-system 0.0.29 → 0.0.32

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 (332) hide show
  1. package/README.md +46 -15
  2. package/dist/package/declarations/src/api/base/v1/notification.d.ts +26 -0
  3. package/dist/package/declarations/src/api/system/admin/v1/base_api_log.d.ts +10 -0
  4. package/dist/package/declarations/src/api/system/{base_area.d.ts → admin/v1/base_area.d.ts} +1 -1
  5. package/dist/package/declarations/src/api/system/{base_config.d.ts → admin/v1/base_config.d.ts} +5 -1
  6. package/dist/package/declarations/src/api/system/admin/v1/base_dashboard.d.ts +14 -0
  7. package/dist/package/declarations/src/api/system/admin/v1/base_data_access_log.d.ts +10 -0
  8. package/dist/package/declarations/src/api/system/admin/v1/base_dict.d.ts +20 -0
  9. package/dist/package/declarations/src/api/system/admin/v1/base_dict_item.d.ts +18 -0
  10. package/dist/package/declarations/src/api/system/admin/v1/base_file.d.ts +13 -0
  11. package/dist/package/declarations/src/api/system/{base_job.d.ts → admin/v1/base_job.d.ts} +4 -5
  12. package/dist/package/declarations/src/api/system/admin/v1/base_job_log.d.ts +9 -0
  13. package/dist/package/declarations/src/api/system/{base_language.d.ts → admin/v1/base_language.d.ts} +3 -3
  14. package/dist/package/declarations/src/api/system/admin/v1/base_log.d.ts +8 -0
  15. package/dist/package/declarations/src/api/system/admin/v1/base_login_log.d.ts +10 -0
  16. package/dist/package/declarations/src/api/system/admin/v1/base_login_policy.d.ts +19 -0
  17. package/dist/package/declarations/src/api/system/admin/v1/base_message.d.ts +24 -0
  18. package/dist/package/declarations/src/api/system/admin/v1/base_message_category.d.ts +21 -0
  19. package/dist/package/declarations/src/api/system/admin/v1/base_operation_log.d.ts +10 -0
  20. package/dist/package/declarations/src/api/system/admin/v1/base_permission_log.d.ts +10 -0
  21. package/dist/package/declarations/src/api/system/admin/v1/base_policy_evaluation_log.d.ts +10 -0
  22. package/dist/package/declarations/src/api/system/admin/v1/base_session.d.ts +11 -0
  23. package/dist/package/declarations/src/api/system/admin/v1/base_table_archive.d.ts +20 -0
  24. package/dist/package/declarations/src/api/system/admin/v1/base_table_archive_record.d.ts +11 -0
  25. package/dist/package/declarations/src/api/system/admin/v1/base_table_archive_restore.d.ts +14 -0
  26. package/dist/package/declarations/src/api/system/admin/v1/base_table_backup.d.ts +20 -0
  27. package/dist/package/declarations/src/api/system/admin/v1/base_table_backup_record.d.ts +11 -0
  28. package/dist/package/declarations/src/api/system/admin/v1/base_table_backup_restore.d.ts +14 -0
  29. package/dist/package/declarations/src/api/system/admin/v1/base_table_source.d.ts +11 -0
  30. package/dist/package/declarations/src/api/system/admin/v1/cache.d.ts +7 -0
  31. package/dist/package/declarations/src/api/system/admin/v1/oauth_client.d.ts +24 -0
  32. package/dist/package/declarations/src/api/system/base_redact_field.d.ts +20 -0
  33. package/dist/package/declarations/src/api/system/base_redact_policy.d.ts +19 -0
  34. package/dist/package/declarations/src/api/system/base_redact_rule.d.ts +22 -0
  35. package/dist/package/declarations/src/components/DynamicI18nCell.vue.d.ts +5 -1
  36. package/dist/package/declarations/src/components/ForcedPasswordDialog.vue.d.ts +3 -0
  37. package/dist/package/declarations/src/components/LogTable.vue.d.ts +52 -0
  38. package/dist/package/declarations/src/components/Notification.vue.d.ts +3 -0
  39. package/dist/package/declarations/src/components/dynamicI18n.d.ts +4 -7
  40. package/dist/package/declarations/src/components/log.d.ts +20 -0
  41. package/dist/package/declarations/src/config/base-log-fallback.d.ts +7 -0
  42. package/dist/package/declarations/src/config/database-backup.d.ts +12 -0
  43. package/dist/package/declarations/src/config/index.d.ts +7 -0
  44. package/dist/package/declarations/src/config/types.d.ts +56 -0
  45. package/dist/package/declarations/src/locales/generated.d.ts +1968 -88
  46. package/dist/package/declarations/src/rpc/base/v1/login.d.ts +151 -0
  47. package/dist/package/declarations/src/rpc/base/v1/notification.d.ts +306 -0
  48. package/dist/package/declarations/src/rpc/base/v1/oauth.d.ts +25 -0
  49. package/dist/package/declarations/src/rpc/base/v1/oauth_client.d.ts +23 -0
  50. package/dist/package/declarations/src/rpc/system/admin/v1/auth.d.ts +13 -0
  51. package/dist/package/declarations/src/rpc/system/admin/v1/base_api.d.ts +2 -0
  52. package/dist/package/declarations/src/rpc/system/admin/v1/base_api_log.d.ts +84 -0
  53. package/dist/package/declarations/src/rpc/system/admin/v1/base_config.d.ts +38 -0
  54. package/dist/package/declarations/src/rpc/system/admin/v1/base_dashboard.d.ts +60 -0
  55. package/dist/package/declarations/src/rpc/system/admin/v1/base_data_access_log.d.ts +112 -0
  56. package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +0 -101
  57. package/dist/package/declarations/src/rpc/system/admin/v1/base_dict_item.d.ts +107 -0
  58. package/dist/package/declarations/src/rpc/system/admin/v1/base_file.d.ts +73 -0
  59. package/dist/package/declarations/src/rpc/system/admin/v1/base_i18n.d.ts +10 -6
  60. package/dist/package/declarations/src/rpc/system/admin/v1/base_job.d.ts +10 -56
  61. package/dist/package/declarations/src/rpc/system/admin/v1/base_job_log.d.ts +60 -0
  62. package/dist/package/declarations/src/rpc/system/admin/v1/base_log.d.ts +66 -76
  63. package/dist/package/declarations/src/rpc/system/admin/v1/base_login_log.d.ts +92 -0
  64. package/dist/package/declarations/src/rpc/system/admin/v1/base_login_policy.d.ts +179 -0
  65. package/dist/package/declarations/src/rpc/system/admin/v1/base_message.d.ts +193 -0
  66. package/dist/package/declarations/src/rpc/system/admin/v1/base_message_category.d.ts +125 -0
  67. package/dist/package/declarations/src/rpc/system/admin/v1/base_operation_log.d.ts +106 -0
  68. package/dist/package/declarations/src/rpc/system/admin/v1/base_permission_log.d.ts +118 -0
  69. package/dist/package/declarations/src/rpc/system/admin/v1/base_policy_evaluation_log.d.ts +119 -0
  70. package/dist/package/declarations/src/rpc/system/admin/v1/base_redact_common.d.ts +9 -0
  71. package/dist/package/declarations/src/rpc/system/admin/v1/base_redact_field.d.ts +161 -0
  72. package/dist/package/declarations/src/rpc/system/admin/v1/base_redact_policy.d.ts +150 -0
  73. package/dist/package/declarations/src/rpc/system/admin/v1/base_redact_rule.d.ts +111 -0
  74. package/dist/package/declarations/src/rpc/system/admin/v1/base_session.d.ts +33 -0
  75. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_archive.d.ts +90 -0
  76. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_archive_record.d.ts +82 -0
  77. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_archive_restore.d.ts +76 -0
  78. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_backup.d.ts +74 -0
  79. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_backup_record.d.ts +69 -0
  80. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_backup_restore.d.ts +76 -0
  81. package/dist/package/declarations/src/rpc/system/admin/v1/base_table_source.d.ts +16 -0
  82. package/dist/package/declarations/src/rpc/system/admin/v1/base_user.d.ts +18 -3
  83. package/dist/package/declarations/src/rpc/system/admin/v1/cache.d.ts +47 -0
  84. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_column.d.ts +2 -0
  85. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen_table.d.ts +8 -0
  86. package/dist/package/declarations/src/rpc/system/admin/v1/oauth_client.d.ts +145 -0
  87. package/dist/package/declarations/src/rpc/system/common/v1/common.d.ts +26 -0
  88. package/dist/package/declarations/src/rpc/system/config/v1/system_config.d.ts +8 -0
  89. package/dist/package/declarations/src/{api/system → utils}/code_gen_i18n.d.ts +1 -2
  90. package/dist/package/declarations/src/{api/system → utils}/code_gen_sse.d.ts +1 -1
  91. package/dist/package/declarations/src/utils/notification-response.d.ts +5 -0
  92. package/dist/package/declarations/src/{api/system → utils}/ops_monitoring_sse.d.ts +1 -1
  93. package/dist/package/declarations/src/{api/system → utils}/runtime_log_sse.d.ts +1 -1
  94. package/dist/package/declarations/src/views/base/api-log/index.vue.d.ts +3 -0
  95. package/dist/package/declarations/src/views/base/backup-management/archive-config/index.vue.d.ts +3 -0
  96. package/dist/package/declarations/src/views/base/backup-management/archive-record/index.vue.d.ts +3 -0
  97. package/dist/package/declarations/src/views/base/backup-management/archive-restore/index.vue.d.ts +3 -0
  98. package/dist/package/declarations/src/views/base/backup-management/backup-config/index.vue.d.ts +3 -0
  99. package/dist/package/declarations/src/views/base/backup-management/backup-record/index.vue.d.ts +3 -0
  100. package/dist/package/declarations/src/views/base/backup-management/backup-restore/index.vue.d.ts +3 -0
  101. package/dist/package/declarations/src/views/base/dashboard/index.vue.d.ts +3 -0
  102. package/dist/package/declarations/src/views/base/data-access-log/index.vue.d.ts +3 -0
  103. package/dist/package/declarations/src/views/base/file/index.vue.d.ts +3 -0
  104. package/dist/package/declarations/src/views/base/login-log/index.vue.d.ts +3 -0
  105. package/dist/package/declarations/src/views/base/login-policy/format.d.ts +2 -0
  106. package/dist/package/declarations/src/views/base/login-policy/index.vue.d.ts +3 -0
  107. package/dist/package/declarations/src/views/base/message/index.vue.d.ts +3 -0
  108. package/dist/package/declarations/src/views/base/message-category/index.vue.d.ts +3 -0
  109. package/dist/package/declarations/src/views/base/oauth-client/index.vue.d.ts +3 -0
  110. package/dist/package/declarations/src/views/base/operation-log/index.vue.d.ts +3 -0
  111. package/dist/package/declarations/src/views/base/permission-log/index.vue.d.ts +3 -0
  112. package/dist/package/declarations/src/views/base/policy-evaluation-log/index.vue.d.ts +3 -0
  113. package/dist/package/declarations/src/views/base/redact-field/index.vue.d.ts +3 -0
  114. package/dist/package/declarations/src/views/base/redact-policy/index.vue.d.ts +3 -0
  115. package/dist/package/declarations/src/views/base/redact-rule/index.vue.d.ts +3 -0
  116. package/dist/package/declarations/src/views/base/runtime-config/index.vue.d.ts +3 -0
  117. package/dist/package/declarations/src/views/message/inbox/index.vue.d.ts +3 -0
  118. package/dist/package/declarations/src/views/profile/components/session.vue.d.ts +3 -0
  119. package/dist/package/declarations/src/views/tool/cache/index.vue.d.ts +3 -0
  120. package/dist/package/src/api/base/v1/notification.ts +99 -0
  121. package/dist/package/src/api/base/{sse.ts → v1/sse.ts} +4 -4
  122. package/dist/package/src/api/system/{auth.ts → admin/v1/auth.ts} +1 -0
  123. package/dist/package/src/api/system/admin/v1/base_api_log.ts +33 -0
  124. package/dist/package/src/api/system/{base_area.ts → admin/v1/base_area.ts} +1 -1
  125. package/dist/package/src/api/system/{base_config.ts → admin/v1/base_config.ts} +20 -0
  126. package/dist/package/src/api/system/admin/v1/base_dashboard.ts +55 -0
  127. package/dist/package/src/api/system/admin/v1/base_data_access_log.ts +33 -0
  128. package/dist/package/src/api/system/{base_dict.ts → admin/v1/base_dict.ts} +0 -60
  129. package/dist/package/src/api/system/admin/v1/base_dict_item.ts +72 -0
  130. package/dist/package/src/api/system/admin/v1/base_file.ts +43 -0
  131. package/dist/package/src/api/system/{base_job.ts → admin/v1/base_job.ts} +11 -22
  132. package/dist/package/src/api/system/admin/v1/base_job_log.ts +32 -0
  133. package/dist/package/src/api/system/{base_language.ts → admin/v1/base_language.ts} +3 -3
  134. package/dist/package/src/api/system/admin/v1/base_log.ts +23 -0
  135. package/dist/package/src/api/system/admin/v1/base_login_log.ts +33 -0
  136. package/dist/package/src/api/system/admin/v1/base_login_policy.ts +67 -0
  137. package/dist/package/src/api/system/admin/v1/base_message.ts +90 -0
  138. package/dist/package/src/api/system/admin/v1/base_message_category.ts +80 -0
  139. package/dist/package/src/api/system/admin/v1/base_operation_log.ts +33 -0
  140. package/dist/package/src/api/system/admin/v1/base_permission_log.ts +33 -0
  141. package/dist/package/src/api/system/admin/v1/base_policy_evaluation_log.ts +33 -0
  142. package/dist/package/src/api/system/admin/v1/base_session.ts +33 -0
  143. package/dist/package/src/api/system/admin/v1/base_table_archive.ts +70 -0
  144. package/dist/package/src/api/system/admin/v1/base_table_archive_record.ts +33 -0
  145. package/dist/package/src/api/system/admin/v1/base_table_archive_restore.ts +44 -0
  146. package/dist/package/src/api/system/admin/v1/base_table_backup.ts +70 -0
  147. package/dist/package/src/api/system/admin/v1/base_table_backup_record.ts +33 -0
  148. package/dist/package/src/api/system/admin/v1/base_table_backup_restore.ts +44 -0
  149. package/dist/package/src/api/system/admin/v1/base_table_source.ts +33 -0
  150. package/dist/package/src/api/system/admin/v1/cache.ts +22 -0
  151. package/dist/package/src/api/system/{code_gen_column.ts → admin/v1/code_gen_column.ts} +19 -3
  152. package/dist/package/src/api/system/{code_gen_table.ts → admin/v1/code_gen_table.ts} +13 -4
  153. package/dist/package/src/api/system/admin/v1/oauth_client.ts +102 -0
  154. package/dist/package/src/api/system/base_redact_field.ts +25 -0
  155. package/dist/package/src/api/system/base_redact_policy.ts +24 -0
  156. package/dist/package/src/api/system/base_redact_rule.ts +27 -0
  157. package/dist/package/src/components/Ai.vue +1 -1
  158. package/dist/package/src/components/ChangePasswordForm.vue +143 -0
  159. package/dist/package/src/components/DynamicI18nCell.vue +28 -8
  160. package/dist/package/src/components/DynamicI18nEditor.vue +1 -1
  161. package/dist/package/src/components/ForcedPasswordDialog.vue +40 -0
  162. package/dist/package/src/components/LogTable.vue +190 -0
  163. package/dist/package/src/components/Notification.vue +301 -0
  164. package/dist/package/src/components/dynamicI18n.ts +5 -9
  165. package/dist/package/src/components/log.ts +87 -0
  166. package/dist/package/src/config/base-log-fallback.ts +26 -0
  167. package/dist/package/src/config/database-backup.ts +57 -0
  168. package/dist/package/src/config/index.ts +26 -0
  169. package/dist/package/src/config/types.ts +59 -0
  170. package/dist/package/src/locales/README.md +6 -3
  171. package/dist/package/src/locales/en-US.json +511 -29
  172. package/dist/package/src/locales/ja-JP.json +515 -33
  173. package/dist/package/src/locales/zh-CN.json +511 -29
  174. package/dist/package/src/locales/zh-TW.json +514 -32
  175. package/dist/package/src/module.ts +7 -2
  176. package/dist/package/src/rpc/base/v1/login.ts +174 -0
  177. package/dist/package/src/rpc/base/v1/notification.ts +343 -0
  178. package/dist/package/src/rpc/base/v1/oauth.ts +25 -0
  179. package/dist/package/src/rpc/base/v1/oauth_client.ts +33 -0
  180. package/dist/package/src/rpc/system/admin/v1/auth.ts +13 -0
  181. package/dist/package/src/rpc/system/admin/v1/base_api.ts +2 -0
  182. package/dist/package/src/rpc/system/admin/v1/base_api_log.ts +102 -0
  183. package/dist/package/src/rpc/system/admin/v1/base_config.ts +42 -0
  184. package/dist/package/src/rpc/system/admin/v1/base_dashboard.ts +81 -0
  185. package/dist/package/src/rpc/system/admin/v1/base_data_access_log.ts +135 -0
  186. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +0 -112
  187. package/dist/package/src/rpc/system/admin/v1/base_dict_item.ts +126 -0
  188. package/dist/package/src/rpc/system/admin/v1/base_file.ts +88 -0
  189. package/dist/package/src/rpc/system/admin/v1/base_i18n.ts +10 -6
  190. package/dist/package/src/rpc/system/admin/v1/base_job.ts +10 -62
  191. package/dist/package/src/rpc/system/admin/v1/base_job_log.ts +75 -0
  192. package/dist/package/src/rpc/system/admin/v1/base_log.ts +67 -78
  193. package/dist/package/src/rpc/system/admin/v1/base_login_log.ts +113 -0
  194. package/dist/package/src/rpc/system/admin/v1/base_login_policy.ts +212 -0
  195. package/dist/package/src/rpc/system/admin/v1/base_message.ts +236 -0
  196. package/dist/package/src/rpc/system/admin/v1/base_message_category.ts +149 -0
  197. package/dist/package/src/rpc/system/admin/v1/base_operation_log.ts +127 -0
  198. package/dist/package/src/rpc/system/admin/v1/base_permission_log.ts +142 -0
  199. package/dist/package/src/rpc/system/admin/v1/base_policy_evaluation_log.ts +143 -0
  200. package/dist/package/src/rpc/system/admin/v1/base_redact_common.ts +17 -0
  201. package/dist/package/src/rpc/system/admin/v1/base_redact_field.ts +182 -0
  202. package/dist/package/src/rpc/system/admin/v1/base_redact_policy.ts +174 -0
  203. package/dist/package/src/rpc/system/admin/v1/base_redact_rule.ts +131 -0
  204. package/dist/package/src/rpc/system/admin/v1/base_session.ts +44 -0
  205. package/dist/package/src/rpc/system/admin/v1/base_table_archive.ts +109 -0
  206. package/dist/package/src/rpc/system/admin/v1/base_table_archive_record.ts +95 -0
  207. package/dist/package/src/rpc/system/admin/v1/base_table_archive_restore.ts +93 -0
  208. package/dist/package/src/rpc/system/admin/v1/base_table_backup.ts +91 -0
  209. package/dist/package/src/rpc/system/admin/v1/base_table_backup_record.ts +82 -0
  210. package/dist/package/src/rpc/system/admin/v1/base_table_backup_restore.ts +91 -0
  211. package/dist/package/src/rpc/system/admin/v1/base_table_source.ts +26 -0
  212. package/dist/package/src/rpc/system/admin/v1/base_user.ts +18 -3
  213. package/dist/package/src/rpc/system/admin/v1/cache.ts +59 -0
  214. package/dist/package/src/rpc/system/admin/v1/code_gen_column.ts +2 -0
  215. package/dist/package/src/rpc/system/admin/v1/code_gen_table.ts +8 -0
  216. package/dist/package/src/rpc/system/admin/v1/oauth_client.ts +174 -0
  217. package/dist/package/src/rpc/system/common/v1/common.ts +35 -0
  218. package/dist/package/src/rpc/system/config/v1/system_config.ts +16 -0
  219. package/dist/package/src/{api/system → utils}/code_gen_i18n.ts +1 -1
  220. package/dist/package/src/{api/system → utils}/code_gen_sse.ts +1 -1
  221. package/dist/package/src/utils/notification-response.ts +22 -0
  222. package/dist/package/src/{api/system → utils}/ops_monitoring_sse.ts +1 -1
  223. package/dist/package/src/{api/system → utils}/runtime_log_sse.ts +1 -1
  224. package/dist/package/src/views/ai/chat/components/AiMarkdown.vue +1 -1
  225. package/dist/package/src/views/ai/chat/components/ChatPanel.vue +4 -6
  226. package/dist/package/src/views/ai/chat/components/XSender.vue +1 -1
  227. package/dist/package/src/views/ai/chat/index.vue +3 -3
  228. package/dist/package/src/views/ai/chat/message.ts +2 -3
  229. package/dist/package/src/views/base/api/index.vue +4 -4
  230. package/dist/package/src/views/base/api-log/index.vue +94 -0
  231. package/dist/package/src/views/base/area/index.vue +1 -1
  232. package/dist/package/src/views/base/backup-management/archive-config/index.vue +151 -0
  233. package/dist/package/src/views/base/backup-management/archive-record/index.vue +44 -0
  234. package/dist/package/src/views/base/backup-management/archive-restore/index.vue +59 -0
  235. package/dist/package/src/views/base/backup-management/backup-config/index.vue +119 -0
  236. package/dist/package/src/views/base/backup-management/backup-record/index.vue +41 -0
  237. package/dist/package/src/views/base/backup-management/backup-restore/index.vue +66 -0
  238. package/dist/package/src/views/base/config/index.vue +19 -28
  239. package/dist/package/src/views/base/dashboard/index.vue +202 -0
  240. package/dist/package/src/views/base/data-access-log/index.vue +96 -0
  241. package/dist/package/src/views/base/dept/index.vue +11 -11
  242. package/dist/package/src/views/base/dict/index.vue +7 -7
  243. package/dist/package/src/views/base/dict/item.vue +14 -14
  244. package/dist/package/src/views/base/file/index.vue +323 -0
  245. package/dist/package/src/views/base/job/index.vue +63 -8
  246. package/dist/package/src/views/base/job/log.vue +38 -11
  247. package/dist/package/src/views/base/language/index.vue +3 -2
  248. package/dist/package/src/views/base/login-log/index.vue +96 -0
  249. package/dist/package/src/views/base/login-policy/format.ts +4 -0
  250. package/dist/package/src/views/base/login-policy/index.vue +530 -0
  251. package/dist/package/src/views/base/menu/index.vue +19 -19
  252. package/dist/package/src/views/base/message/index.vue +712 -0
  253. package/dist/package/src/views/base/message-category/index.vue +387 -0
  254. package/dist/package/src/views/base/migration/index.vue +2 -2
  255. package/dist/package/src/views/base/oauth-client/index.vue +421 -0
  256. package/dist/package/src/views/base/operation-log/index.vue +86 -0
  257. package/dist/package/src/views/base/permission-log/index.vue +90 -0
  258. package/dist/package/src/views/base/policy-evaluation-log/index.vue +93 -0
  259. package/dist/package/src/views/base/post/index.vue +11 -11
  260. package/dist/package/src/views/base/redact-field/index.vue +59 -0
  261. package/dist/package/src/views/base/redact-policy/index.vue +92 -0
  262. package/dist/package/src/views/base/redact-rule/index.vue +51 -0
  263. package/dist/package/src/views/base/role/index.vue +9 -9
  264. package/dist/package/src/views/base/runtime-config/index.vue +479 -0
  265. package/dist/package/src/views/base/tenant/index.vue +9 -9
  266. package/dist/package/src/views/base/user/components/dept-tree.vue +1 -1
  267. package/dist/package/src/views/base/user/index.vue +86 -47
  268. package/dist/package/src/views/message/inbox/index.vue +276 -0
  269. package/dist/package/src/views/profile/components/base.vue +90 -13
  270. package/dist/package/src/views/profile/components/password.vue +3 -229
  271. package/dist/package/src/views/profile/components/security.vue +477 -64
  272. package/dist/package/src/views/profile/components/session.vue +161 -0
  273. package/dist/package/src/views/profile/index.vue +45 -31
  274. package/dist/package/src/views/tool/api-doc/index.vue +3 -3
  275. package/dist/package/src/views/tool/cache/index.vue +352 -0
  276. package/dist/package/src/views/tool/code-gen/code-preview/index.vue +4 -4
  277. package/dist/package/src/views/tool/code-gen/columns/index.vue +16 -16
  278. package/dist/package/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue +2 -2
  279. package/dist/package/src/views/tool/code-gen/components/CodeGenProgressDialog.vue +2 -2
  280. package/dist/package/src/views/tool/code-gen/config.ts +3 -0
  281. package/dist/package/src/views/tool/code-gen/preview/index.vue +9 -9
  282. package/dist/package/src/views/tool/code-gen/proto/index.vue +10 -12
  283. package/dist/package/src/views/tool/code-gen/table/index.vue +71 -15
  284. package/dist/package/src/views/tool/ops-monitoring/index.vue +55 -116
  285. package/dist/package/src/views/tool/project-doc/index.vue +2 -2
  286. package/dist/package/src/views/tool/runtime-log/index.vue +6 -6
  287. package/package.json +7 -2
  288. package/dist/package/declarations/src/api/system/base_dict.d.ts +0 -32
  289. package/dist/package/declarations/src/api/system/base_log.d.ts +0 -9
  290. package/dist/package/src/api/system/base_log.ts +0 -32
  291. package/dist/package/src/views/base/log/index.vue +0 -339
  292. /package/dist/package/declarations/src/api/base/{ai_message.d.ts → v1/ai_message.d.ts} +0 -0
  293. /package/dist/package/declarations/src/api/base/{ai_session.d.ts → v1/ai_session.d.ts} +0 -0
  294. /package/dist/package/declarations/src/api/base/{ai_tool.d.ts → v1/ai_tool.d.ts} +0 -0
  295. /package/dist/package/declarations/src/api/base/{oauth.d.ts → v1/oauth.d.ts} +0 -0
  296. /package/dist/package/declarations/src/api/base/{sse.d.ts → v1/sse.d.ts} +0 -0
  297. /package/dist/package/declarations/src/api/system/{auth.d.ts → admin/v1/auth.d.ts} +0 -0
  298. /package/dist/package/declarations/src/api/system/{base_api.d.ts → admin/v1/base_api.d.ts} +0 -0
  299. /package/dist/package/declarations/src/api/system/{base_dept.d.ts → admin/v1/base_dept.d.ts} +0 -0
  300. /package/dist/package/declarations/src/api/system/{base_i18n.d.ts → admin/v1/base_i18n.d.ts} +0 -0
  301. /package/dist/package/declarations/src/api/system/{base_menu.d.ts → admin/v1/base_menu.d.ts} +0 -0
  302. /package/dist/package/declarations/src/api/system/{base_migration.d.ts → admin/v1/base_migration.d.ts} +0 -0
  303. /package/dist/package/declarations/src/api/system/{base_post.d.ts → admin/v1/base_post.d.ts} +0 -0
  304. /package/dist/package/declarations/src/api/system/{base_role.d.ts → admin/v1/base_role.d.ts} +0 -0
  305. /package/dist/package/declarations/src/api/system/{base_tenant.d.ts → admin/v1/base_tenant.d.ts} +0 -0
  306. /package/dist/package/declarations/src/api/system/{base_user.d.ts → admin/v1/base_user.d.ts} +0 -0
  307. /package/dist/package/declarations/src/api/system/{code_gen.d.ts → admin/v1/code_gen.d.ts} +0 -0
  308. /package/dist/package/declarations/src/api/system/{code_gen_column.d.ts → admin/v1/code_gen_column.d.ts} +0 -0
  309. /package/dist/package/declarations/src/api/system/{code_gen_proto.d.ts → admin/v1/code_gen_proto.d.ts} +0 -0
  310. /package/dist/package/declarations/src/api/system/{code_gen_table.d.ts → admin/v1/code_gen_table.d.ts} +0 -0
  311. /package/dist/package/declarations/src/api/system/{ops_monitoring.d.ts → admin/v1/ops_monitoring.d.ts} +0 -0
  312. /package/dist/package/declarations/src/api/system/{project_document.d.ts → admin/v1/project_document.d.ts} +0 -0
  313. /package/dist/package/declarations/src/api/system/{runtime_log.d.ts → admin/v1/runtime_log.d.ts} +0 -0
  314. /package/dist/package/declarations/src/{views/base/log/index.vue.d.ts → components/ChangePasswordForm.vue.d.ts} +0 -0
  315. /package/dist/package/src/api/base/{ai_message.ts → v1/ai_message.ts} +0 -0
  316. /package/dist/package/src/api/base/{ai_session.ts → v1/ai_session.ts} +0 -0
  317. /package/dist/package/src/api/base/{ai_tool.ts → v1/ai_tool.ts} +0 -0
  318. /package/dist/package/src/api/base/{oauth.ts → v1/oauth.ts} +0 -0
  319. /package/dist/package/src/api/system/{base_api.ts → admin/v1/base_api.ts} +0 -0
  320. /package/dist/package/src/api/system/{base_dept.ts → admin/v1/base_dept.ts} +0 -0
  321. /package/dist/package/src/api/system/{base_i18n.ts → admin/v1/base_i18n.ts} +0 -0
  322. /package/dist/package/src/api/system/{base_menu.ts → admin/v1/base_menu.ts} +0 -0
  323. /package/dist/package/src/api/system/{base_migration.ts → admin/v1/base_migration.ts} +0 -0
  324. /package/dist/package/src/api/system/{base_post.ts → admin/v1/base_post.ts} +0 -0
  325. /package/dist/package/src/api/system/{base_role.ts → admin/v1/base_role.ts} +0 -0
  326. /package/dist/package/src/api/system/{base_tenant.ts → admin/v1/base_tenant.ts} +0 -0
  327. /package/dist/package/src/api/system/{base_user.ts → admin/v1/base_user.ts} +0 -0
  328. /package/dist/package/src/api/system/{code_gen.ts → admin/v1/code_gen.ts} +0 -0
  329. /package/dist/package/src/api/system/{code_gen_proto.ts → admin/v1/code_gen_proto.ts} +0 -0
  330. /package/dist/package/src/api/system/{ops_monitoring.ts → admin/v1/ops_monitoring.ts} +0 -0
  331. /package/dist/package/src/api/system/{project_document.ts → admin/v1/project_document.ts} +0 -0
  332. /package/dist/package/src/api/system/{runtime_log.ts → admin/v1/runtime_log.ts} +0 -0
@@ -0,0 +1,530 @@
1
+ <template>
2
+ <div class="login-policy-page">
3
+ <el-card class="admin-page-card">
4
+ <ProTable ref="proTable" row-key="id" :columns="columns" :header-actions="headerActions" :request-api="requestTable" />
5
+ </el-card>
6
+
7
+ <FormDialog
8
+ ref="formDialogRef"
9
+ v-model="dialog.visible"
10
+ :title="t(dialog.titleKey)"
11
+ width="980px"
12
+ :model="formData"
13
+ :fields="formFields"
14
+ :rules="formRules"
15
+ @confirm="handleSubmit"
16
+ @close="handleClose"
17
+ >
18
+ <template #rules>
19
+ <div class="rules-editor">
20
+ <div v-for="(rule, index) in formData.rules" :key="rule.id || index" class="rule-row">
21
+ <el-select v-model="rule.restriction_type" class="rule-type">
22
+ <el-option v-for="option in restrictionTypeOptions" :key="String(option.value)" :label="option.label" :value="option.value" />
23
+ </el-select>
24
+ <el-select v-model="rule.restriction_method" class="rule-method">
25
+ <el-option v-for="option in restrictionMethodOptions" :key="String(option.value)" :label="option.label" :value="option.value" />
26
+ </el-select>
27
+ <el-input v-model="rule.restriction_value" class="rule-value" :placeholder="rulePlaceholder(rule.restriction_method)" />
28
+ <el-input v-model="rule.reason" class="rule-reason" :placeholder="t('system.base.login_policy.placeholder.reason')" />
29
+ <el-select v-model="rule.status" class="rule-status">
30
+ <el-option v-for="option in statusOptions" :key="String(option.value)" :label="option.label" :value="option.value" />
31
+ </el-select>
32
+ <el-button link type="danger" :icon="Delete" @click="removeRule(index)" />
33
+ </div>
34
+ <el-button link type="primary" :icon="CirclePlus" @click="addRule">
35
+ {{ t("system.base.login_policy.rules.add") }}
36
+ </el-button>
37
+ </div>
38
+ </template>
39
+ </FormDialog>
40
+ </div>
41
+ </template>
42
+
43
+ <script setup lang="ts">
44
+ import { computed, h, reactive, ref, watch } from "vue";
45
+ import { CirclePlus, Delete, EditPen } from "@element-plus/icons-vue";
46
+ import { ElButton, ElMessage, ElMessageBox, ElTag } from "element-plus";
47
+ import ProTable from "@liujitcn/kratos-admin-core/components/ProTable";
48
+ import FormDialog from "@liujitcn/kratos-admin-core/components/Dialog/FormDialog.vue";
49
+ import type { ColumnProps, HeaderActionProps, ProTableInstance } from "@liujitcn/kratos-admin-core/components/ProTable/interface";
50
+ import type { ProFormField, ProFormOption } from "@liujitcn/kratos-admin-core/components/ProForm/interface";
51
+ import { useAuthButtons } from "@liujitcn/kratos-admin-core/auth";
52
+ import { buildPageRequest, normalizeSelectedIds } from "@liujitcn/kratos-admin-core/table";
53
+ import { PASSWORD_CRYPTO_SCENE, encryptPassword } from "@liujitcn/kratos-admin-core/security";
54
+ import { t } from "@liujitcn/kratos-admin-core";
55
+ import { defBaseLoginPolicyService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_login_policy";
56
+ import { defBaseTenantService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_tenant";
57
+ import { defBaseUserService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_user";
58
+ import type { SelectOptionResponse_Option } from "@liujitcn/kratos-admin-system/rpc/common/v1/common";
59
+ import { Status } from "@liujitcn/kratos-admin-system/rpc/common/v1/enum";
60
+ import type {
61
+ BaseLoginPolicy,
62
+ BaseLoginPolicyForm,
63
+ BaseLoginPolicyRule,
64
+ PageBaseLoginPolicyRequest
65
+ } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_login_policy";
66
+ import {
67
+ BaseLoginPolicyRestrictionMethod,
68
+ BaseLoginPolicyRestrictionType,
69
+ BaseLoginPolicyScopeType
70
+ } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_login_policy";
71
+
72
+ /** 登录策略表单状态,初始化密码仅在提交时转换为一次性密码密文。 */
73
+ interface BaseLoginPolicyFormState extends Omit<BaseLoginPolicyForm, "initial_password"> {
74
+ /** 初始化密码明文只保留在当前表单,留空表示不修改已有值。 */
75
+ initial_password: string;
76
+ }
77
+
78
+ defineOptions({ name: "BaseLoginPolicy", inheritAttrs: false });
79
+
80
+ const { BUTTONS } = useAuthButtons();
81
+ const proTable = ref<ProTableInstance>();
82
+ const formDialogRef = ref<InstanceType<typeof FormDialog>>();
83
+ const dialog = reactive({ visible: false, titleKey: "common.action.create" });
84
+ const tenantOptions = ref<SelectOptionResponse_Option[]>([]);
85
+ const userOptions = ref<SelectOptionResponse_Option[]>([]);
86
+ const formData = reactive<BaseLoginPolicyFormState>(defaultForm());
87
+
88
+ const scopeTypeOptions = computed<ProFormOption[]>(() => [
89
+ { label: t("system.base.login_policy.scope.global"), value: BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_GLOBAL },
90
+ { label: t("common.field.tenant"), value: BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_TENANT },
91
+ { label: t("common.field.user"), value: BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_USER }
92
+ ]);
93
+ const restrictionTypeOptions = computed<ProFormOption[]>(() => [
94
+ { label: t("system.base.login_policy.restriction.blacklist"), value: BaseLoginPolicyRestrictionType.BASE_LOGIN_POLICY_RESTRICTION_TYPE_BLACKLIST },
95
+ { label: t("system.base.login_policy.restriction.whitelist"), value: BaseLoginPolicyRestrictionType.BASE_LOGIN_POLICY_RESTRICTION_TYPE_WHITELIST }
96
+ ]);
97
+ const restrictionMethodOptions = computed<ProFormOption[]>(() => [
98
+ { label: t("system.base.login_policy.method.ip"), value: BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_IP },
99
+ { label: t("system.base.login_policy.method.mac"), value: BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_MAC },
100
+ { label: t("system.base.login_policy.method.region"), value: BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_REGION },
101
+ { label: t("system.base.login_policy.method.time"), value: BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_TIME },
102
+ { label: t("system.base.login_policy.method.device"), value: BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_DEVICE }
103
+ ]);
104
+ const statusOptions = computed<ProFormOption[]>(() => [
105
+ { label: t("common.status.enabled"), value: Status.STATUS_ENABLE },
106
+ { label: t("common.status.disabled"), value: Status.STATUS_DISABLE }
107
+ ]);
108
+
109
+ const formFields = computed<ProFormField[]>(() => [
110
+ { prop: "scope_type", label: t("system.base.login_policy.field.scope_type"), component: "select", options: scopeTypeOptions.value },
111
+ {
112
+ prop: "tenant_id",
113
+ label: t("common.field.tenant"),
114
+ component: "select",
115
+ options: tenantOptions.value,
116
+ visible: model => model.scope_type !== BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_GLOBAL,
117
+ props: { filterable: true, clearable: true }
118
+ },
119
+ {
120
+ prop: "user_id",
121
+ label: t("common.field.user"),
122
+ component: "select",
123
+ options: userOptions.value,
124
+ visible: model => model.scope_type === BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_USER,
125
+ props: { filterable: true, clearable: true }
126
+ },
127
+ {
128
+ prop: "max_failed_attempts",
129
+ label: t("system.base.login_policy.field.max_failed_attempts"),
130
+ component: "input-number",
131
+ props: { min: 1, max: 1000, precision: 0 }
132
+ },
133
+ {
134
+ prop: "lock_duration_minutes",
135
+ label: t("system.base.login_policy.field.lock_duration_minutes"),
136
+ component: "input-number",
137
+ props: { min: 1, max: 1440, precision: 0 }
138
+ },
139
+ {
140
+ prop: "password_min_length",
141
+ label: t("system.base.login_policy.field.password_min_length"),
142
+ component: "input-number",
143
+ props: { min: 1, max: 128, precision: 0 }
144
+ },
145
+ {
146
+ prop: "password_history_count",
147
+ label: t("system.base.login_policy.field.password_history_count"),
148
+ component: "input-number",
149
+ props: { min: 0, max: 100, precision: 0 }
150
+ },
151
+ {
152
+ prop: "password_min_complexity_classes",
153
+ label: t("system.base.login_policy.field.password_min_complexity_classes"),
154
+ component: "input-number",
155
+ props: { min: 1, max: 4, precision: 0 }
156
+ },
157
+ {
158
+ prop: "password_max_age_days",
159
+ label: t("system.base.login_policy.field.password_max_age_days"),
160
+ component: "input-number",
161
+ props: { min: 0, max: 3650, precision: 0 }
162
+ },
163
+ {
164
+ prop: "initial_password",
165
+ label: t("system.base.login_policy.field.initial_password"),
166
+ component: "password",
167
+ props: { placeholder: t("system.base.login_policy.placeholder.initial_password"), showPassword: true }
168
+ },
169
+ { prop: "status", label: t("common.field.status"), component: "radio-group", options: statusOptions.value },
170
+ { prop: "rules", label: t("system.base.login_policy.field.rules"), component: "slot", slotName: "rules", colSpan: 24 }
171
+ ]);
172
+
173
+ const formRules = computed(() => ({
174
+ scope_type: [{ required: true, message: t("system.base.login_policy.validation.scope_type"), trigger: "change" }],
175
+ tenant_id: [{ validator: validateTenant, trigger: "change" }],
176
+ user_id: [{ validator: validateUser, trigger: "change" }],
177
+ max_failed_attempts: [{ required: true, message: t("system.base.login_policy.validation.max_failed_attempts"), trigger: "change" }],
178
+ lock_duration_minutes: [{ required: true, message: t("system.base.login_policy.validation.lock_duration_minutes"), trigger: "change" }],
179
+ password_min_length: [{ required: true, message: t("system.base.login_policy.validation.password_min_length"), trigger: "change" }],
180
+ password_history_count: [{ required: true, message: t("system.base.login_policy.validation.password_history_count"), trigger: "change" }],
181
+ password_min_complexity_classes: [
182
+ { required: true, message: t("system.base.login_policy.validation.password_min_complexity_classes"), trigger: "change" }
183
+ ],
184
+ password_max_age_days: [{ required: true, message: t("system.base.login_policy.validation.password_max_age_days"), trigger: "change" }]
185
+ }));
186
+
187
+ const columns = computed<ColumnProps[]>(() => [
188
+ { type: "selection", width: 55 },
189
+ {
190
+ prop: "scope_type",
191
+ label: t("system.base.login_policy.field.scope_type"),
192
+ width: 110,
193
+ search: { el: "select", enum: scopeTypeOptions.value },
194
+ render: scope => scopeTypeLabel((scope.row as BaseLoginPolicy).scope_type)
195
+ },
196
+ {
197
+ prop: "target",
198
+ label: t("system.base.login_policy.field.target"),
199
+ minWidth: 160,
200
+ render: scope => targetLabel(scope.row as BaseLoginPolicy)
201
+ },
202
+ {
203
+ prop: "rules",
204
+ label: t("system.base.login_policy.field.rules"),
205
+ minWidth: 320,
206
+ render: scope => renderRules(scope.row as BaseLoginPolicy)
207
+ },
208
+ { prop: "max_failed_attempts", label: t("system.base.login_policy.field.max_failed_attempts"), width: 110, align: "right" },
209
+ { prop: "lock_duration_minutes", label: t("system.base.login_policy.field.lock_duration_minutes"), width: 110, align: "right" },
210
+ { prop: "password_min_length", label: t("system.base.login_policy.field.password_min_length"), width: 110, align: "right" },
211
+ { prop: "password_history_count", label: t("system.base.login_policy.field.password_history_count"), width: 110, align: "right" },
212
+ {
213
+ prop: "password_min_complexity_classes",
214
+ label: t("system.base.login_policy.field.password_min_complexity_classes"),
215
+ width: 130,
216
+ align: "right"
217
+ },
218
+ { prop: "password_max_age_days", label: t("system.base.login_policy.field.password_max_age_days"), width: 110, align: "right" },
219
+ {
220
+ prop: "status",
221
+ label: t("common.field.status"),
222
+ width: 110,
223
+ search: { el: "select", enum: statusOptions.value },
224
+ cellType: "status",
225
+ statusProps: {
226
+ activeValue: Status.STATUS_ENABLE,
227
+ inactiveValue: Status.STATUS_DISABLE,
228
+ activeText: t("common.status.enabled"),
229
+ inactiveText: t("common.status.disabled"),
230
+ disabled: () => !BUTTONS.value["base:login-policy:status"],
231
+ beforeChange: scope => handleSetStatus(scope.row as BaseLoginPolicy)
232
+ }
233
+ },
234
+ {
235
+ prop: "operation",
236
+ label: t("common.field.operation"),
237
+ width: 150,
238
+ fixed: "right",
239
+ cellType: "actions",
240
+ actions: [
241
+ {
242
+ label: t("common.action.edit"),
243
+ link: true,
244
+ icon: EditPen,
245
+ hidden: () => !BUTTONS.value["base:login-policy:update"],
246
+ onClick: scope => openDialog((scope.row as BaseLoginPolicy).id)
247
+ },
248
+ {
249
+ label: t("common.action.delete"),
250
+ type: "danger",
251
+ link: true,
252
+ icon: Delete,
253
+ hidden: () => !BUTTONS.value["base:login-policy:delete"],
254
+ onClick: scope => handleDelete(scope.row as BaseLoginPolicy)
255
+ }
256
+ ]
257
+ }
258
+ ]);
259
+
260
+ const headerActions = computed<HeaderActionProps[]>(() => [
261
+ {
262
+ label: t("common.action.create"),
263
+ type: "primary",
264
+ icon: CirclePlus,
265
+ hidden: !BUTTONS.value["base:login-policy:create"],
266
+ onClick: () => openDialog()
267
+ },
268
+ {
269
+ label: t("common.action.delete"),
270
+ type: "danger",
271
+ icon: Delete,
272
+ hidden: !BUTTONS.value["base:login-policy:delete"],
273
+ disabled: scope => !scope.isSelected,
274
+ onClick: scope => handleDelete(scope.selectedListIds as number[])
275
+ }
276
+ ]);
277
+
278
+ watch(
279
+ () => formData.scope_type,
280
+ value => {
281
+ if (value === BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_GLOBAL) {
282
+ formData.tenant_id = 0;
283
+ formData.user_id = 0;
284
+ userOptions.value = [];
285
+ return;
286
+ }
287
+ if (value === BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_TENANT) {
288
+ formData.user_id = 0;
289
+ userOptions.value = [];
290
+ }
291
+ }
292
+ );
293
+
294
+ watch(
295
+ () => formData.tenant_id,
296
+ async tenantId => {
297
+ if (formData.scope_type !== BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_USER || !tenantId) {
298
+ userOptions.value = [];
299
+ return;
300
+ }
301
+ const response = await defBaseUserService.OptionBaseUser({ keyword: "", tenant_id: tenantId });
302
+ userOptions.value = response.list ?? [];
303
+ }
304
+ );
305
+
306
+ /** 创建默认登录策略表单。 */
307
+ function defaultForm(): BaseLoginPolicyFormState {
308
+ return {
309
+ id: 0,
310
+ scope_type: BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_GLOBAL,
311
+ tenant_id: 0,
312
+ user_id: 0,
313
+ max_failed_attempts: 5,
314
+ lock_duration_minutes: 15,
315
+ password_min_length: 8,
316
+ password_history_count: 3,
317
+ password_min_complexity_classes: 3,
318
+ password_max_age_days: 90,
319
+ initial_password: "",
320
+ status: Status.STATUS_ENABLE,
321
+ rules: []
322
+ };
323
+ }
324
+
325
+ /** 创建默认限制规则。 */
326
+ function defaultRule(): BaseLoginPolicyRule {
327
+ return {
328
+ id: 0,
329
+ policy_id: 0,
330
+ restriction_type: BaseLoginPolicyRestrictionType.BASE_LOGIN_POLICY_RESTRICTION_TYPE_BLACKLIST,
331
+ restriction_method: BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_IP,
332
+ restriction_value: "",
333
+ reason: "",
334
+ status: Status.STATUS_ENABLE
335
+ };
336
+ }
337
+
338
+ /** 请求登录策略表格数据。 */
339
+ async function requestTable(params: Record<string, unknown>) {
340
+ const data = await defBaseLoginPolicyService.PageBaseLoginPolicy(
341
+ buildPageRequest<PageBaseLoginPolicyRequest>(params as unknown as PageBaseLoginPolicyRequest)
342
+ );
343
+ return { data: { list: data.base_login_policies ?? [], total: data.total } };
344
+ }
345
+
346
+ /** 打开登录策略表单。 */
347
+ async function openDialog(id?: number) {
348
+ Object.assign(formData, defaultForm());
349
+ dialog.titleKey = id ? "common.action.edit" : "common.action.create";
350
+ await loadTenantOptions();
351
+ if (id) {
352
+ const detail = await defBaseLoginPolicyService.GetBaseLoginPolicy({ id });
353
+ Object.assign(formData, detail, { initial_password: "", rules: detail.rules ?? [] });
354
+ if (formData.scope_type === BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_USER && formData.tenant_id) {
355
+ await loadUserOptions(formData.tenant_id);
356
+ }
357
+ }
358
+ dialog.visible = true;
359
+ }
360
+
361
+ /** 加载租户选项。 */
362
+ async function loadTenantOptions() {
363
+ const response = await defBaseTenantService.OptionBaseTenant({ keyword: "" });
364
+ tenantOptions.value = response.list ?? [];
365
+ }
366
+
367
+ /** 加载指定租户的用户选项。 */
368
+ async function loadUserOptions(tenantId: number) {
369
+ const response = await defBaseUserService.OptionBaseUser({ keyword: "", tenant_id: tenantId });
370
+ userOptions.value = response.list ?? [];
371
+ }
372
+
373
+ /** 提交登录策略表单。 */
374
+ async function handleSubmit() {
375
+ const valid = await formDialogRef.value?.validate();
376
+ if (!valid) return;
377
+
378
+ const baseLoginPolicy: BaseLoginPolicyForm = {
379
+ ...formData,
380
+ initial_password: formData.initial_password
381
+ ? await encryptPassword(formData.initial_password, PASSWORD_CRYPTO_SCENE.PASSWORD_CRYPTO_SCENE_CONFIGURE_PASSWORD_POLICY)
382
+ : undefined
383
+ };
384
+ if (formData.id) await defBaseLoginPolicyService.UpdateBaseLoginPolicy({ base_login_policy: baseLoginPolicy });
385
+ else await defBaseLoginPolicyService.CreateBaseLoginPolicy({ base_login_policy: baseLoginPolicy });
386
+ ElMessage.success(t("common.message.operation_success"));
387
+ dialog.visible = false;
388
+ proTable.value?.getTableList();
389
+ }
390
+
391
+ /** 删除登录策略。 */
392
+ async function handleDelete(value: BaseLoginPolicy | BaseLoginPolicy[] | number | number[]) {
393
+ const ids = normalizeSelectedIds(value as Parameters<typeof normalizeSelectedIds>[0]);
394
+ await ElMessageBox.confirm(t("common.confirm.delete"), t("common.title.warning"), { type: "warning" });
395
+ await defBaseLoginPolicyService.DeleteBaseLoginPolicy({ id: ids.join(",") });
396
+ ElMessage.success(t("common.message.operation_success"));
397
+ proTable.value?.getTableList();
398
+ }
399
+
400
+ /** 设置登录策略状态。 */
401
+ async function handleSetStatus(row: BaseLoginPolicy) {
402
+ const status = row.status === Status.STATUS_ENABLE ? Status.STATUS_DISABLE : Status.STATUS_ENABLE;
403
+ await defBaseLoginPolicyService.SetBaseLoginPolicyStatus({ id: row.id, status });
404
+ return true;
405
+ }
406
+
407
+ /** 关闭登录策略表单。 */
408
+ function handleClose() {
409
+ Object.assign(formData, defaultForm());
410
+ userOptions.value = [];
411
+ formDialogRef.value?.resetFields();
412
+ }
413
+
414
+ /** 新增限制规则。 */
415
+ function addRule() {
416
+ formData.rules.push(defaultRule());
417
+ }
418
+
419
+ /** 删除限制规则。 */
420
+ function removeRule(index: number) {
421
+ formData.rules.splice(index, 1);
422
+ }
423
+
424
+ /** 校验租户作用域目标。 */
425
+ function validateTenant(_rule: unknown, value: number, callback: (error?: Error) => void) {
426
+ if (formData.scope_type !== BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_GLOBAL && !value) {
427
+ callback(new Error(t("common.validation.required_select", { field: t("common.field.tenant") })));
428
+ return;
429
+ }
430
+ callback();
431
+ }
432
+
433
+ /** 校验用户作用域目标。 */
434
+ function validateUser(_rule: unknown, value: number, callback: (error?: Error) => void) {
435
+ if (formData.scope_type === BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_USER && !value) {
436
+ callback(new Error(t("common.validation.required_select", { field: t("common.field.user") })));
437
+ return;
438
+ }
439
+ callback();
440
+ }
441
+
442
+ /** 输出作用域名称。 */
443
+ function scopeTypeLabel(value: BaseLoginPolicyScopeType) {
444
+ return scopeTypeOptions.value.find(option => option.value === value)?.label ?? String(value);
445
+ }
446
+
447
+ /** 输出策略目标名称。 */
448
+ function targetLabel(row: BaseLoginPolicy) {
449
+ if (row.scope_type === BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_GLOBAL) return t("system.base.login_policy.scope.global");
450
+ if (row.scope_type === BaseLoginPolicyScopeType.BASE_LOGIN_POLICY_SCOPE_TYPE_USER) return row.user_name || String(row.user_id);
451
+ return row.tenant_name || String(row.tenant_id);
452
+ }
453
+
454
+ /** 输出限制规则摘要。 */
455
+ function renderRules(row: BaseLoginPolicy) {
456
+ const rules = row.rules ?? [];
457
+ if (!rules.length) return h("span", { class: "muted" }, t("system.base.login_policy.rules.empty"));
458
+ return h(
459
+ "div",
460
+ { class: "rule-summary" },
461
+ rules.map((rule, index) =>
462
+ h(
463
+ ElTag,
464
+ { key: `${rule.id || index}`, size: "small", class: "rule-tag" },
465
+ () => `${restrictionTypeLabel(rule.restriction_type)}/${restrictionMethodLabel(rule.restriction_method)}: ${rule.restriction_value}`
466
+ )
467
+ )
468
+ );
469
+ }
470
+
471
+ /** 输出限制类型名称。 */
472
+ function restrictionTypeLabel(value: BaseLoginPolicyRestrictionType) {
473
+ return restrictionTypeOptions.value.find(option => option.value === value)?.label ?? String(value);
474
+ }
475
+
476
+ /** 输出限制方式名称。 */
477
+ function restrictionMethodLabel(value: BaseLoginPolicyRestrictionMethod) {
478
+ return restrictionMethodOptions.value.find(option => option.value === value)?.label ?? String(value);
479
+ }
480
+
481
+ /** 根据限制方式输出输入提示。 */
482
+ function rulePlaceholder(method: BaseLoginPolicyRestrictionMethod) {
483
+ switch (method) {
484
+ case BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_IP:
485
+ return t("system.base.login_policy.placeholder.ip");
486
+ case BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_TIME:
487
+ return t("system.base.login_policy.placeholder.time");
488
+ case BaseLoginPolicyRestrictionMethod.BASE_LOGIN_POLICY_RESTRICTION_METHOD_REGION:
489
+ return t("system.base.login_policy.placeholder.region");
490
+ default:
491
+ return t("system.base.login_policy.placeholder.value");
492
+ }
493
+ }
494
+ </script>
495
+
496
+ <style scoped lang="scss">
497
+ .login-policy-page {
498
+ min-width: 0;
499
+ }
500
+ .rules-editor {
501
+ width: 100%;
502
+ }
503
+ .rule-row {
504
+ display: grid;
505
+ grid-template-columns: 120px 140px minmax(180px, 1fr) minmax(160px, 1fr) 110px 32px;
506
+ gap: 8px;
507
+ align-items: center;
508
+ margin-bottom: 10px;
509
+ }
510
+ .rule-summary {
511
+ display: flex;
512
+ flex-wrap: wrap;
513
+ gap: 4px;
514
+ }
515
+ .rule-tag {
516
+ max-width: 100%;
517
+ }
518
+ .muted {
519
+ color: var(--el-text-color-secondary);
520
+ }
521
+ @media (max-width: 960px) {
522
+ .rule-row {
523
+ grid-template-columns: 1fr 1fr;
524
+ }
525
+ .rule-value,
526
+ .rule-reason {
527
+ grid-column: span 2;
528
+ }
529
+ }
530
+ </style>
@@ -66,9 +66,9 @@ import type {
66
66
  } from "@liujitcn/kratos-admin-core/components/ProTable/interface";
67
67
  import type { ProFormField, ProFormOption } from "@liujitcn/kratos-admin-core/components/ProForm/interface";
68
68
  import SelectIcon from "@liujitcn/kratos-admin-core/components/SelectIcon/index.vue";
69
- import { defBaseMenuService } from "@liujitcn/kratos-admin-system/api/system/base_menu";
70
- import { loadEnabledBaseLanguages } from "@liujitcn/kratos-admin-system/api/system/base_language";
71
- import { defBaseApiService } from "@liujitcn/kratos-admin-system/api/system/base_api";
69
+ import { defBaseMenuService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_menu";
70
+ import { loadEnabledBaseLanguages } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_language";
71
+ import { defBaseApiService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_api";
72
72
  import { useAuthButtons } from "@liujitcn/kratos-admin-core/auth";
73
73
  import type { BaseApi } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_api";
74
74
  import type {
@@ -96,7 +96,7 @@ defineOptions({
96
96
  inheritAttrs: false
97
97
  });
98
98
 
99
- const APP_MENU_ROOT_ID = 999;
99
+ const APP_MENU_ROOT_ID = 99000000;
100
100
 
101
101
  /**
102
102
  * 菜单表单状态,统一补齐 meta 字段,便于 ProForm 直接双向绑定。
@@ -113,7 +113,7 @@ const menuOptions = ref<ProFormOption[]>([]);
113
113
  const parentMenuTypeMap = ref(new Map<number, BaseMenuType>());
114
114
  const appMenuIds = ref(new Set<number>([APP_MENU_ROOT_ID]));
115
115
  const apiList = ref<BaseApi[]>([]);
116
- const i18nValues = ref<DynamicI18nValue[]>(normalizeDynamicI18ns(undefined, "title"));
116
+ const i18nValues = ref<DynamicI18nValue[]>(normalizeDynamicI18ns(undefined));
117
117
 
118
118
  const dialog = reactive({
119
119
  editing: false,
@@ -192,21 +192,21 @@ function isAppTab(parentId?: number) {
192
192
  return parentId === APP_MENU_ROOT_ID;
193
193
  }
194
194
 
195
- /** 根据三、五、七、九位编号识别菜单层级。 */
195
+ /** 根据固定八位编号中的非零层级槽位识别菜单层级。 */
196
196
  function getMenuLevel(menuId: number) {
197
- if (menuId >= 100 && menuId <= 999) return 1;
198
- if (menuId >= 10000 && menuId <= 99999) return 2;
199
- if (menuId >= 1000000 && menuId <= 9999999) return 3;
200
- if (menuId >= 100000000 && menuId <= 999999999) return 4;
201
- return 0;
197
+ if (menuId < 10000000 || menuId > 99999999) return 0;
198
+ if (menuId % 1000000 === 0) return 1;
199
+ if (menuId % 10000 === 0) return 2;
200
+ if (menuId % 100 === 0) return 3;
201
+ return 4;
202
202
  }
203
203
 
204
204
  /** 判断当前菜单是否还能继续新增下级节点。 */
205
205
  function canCreateChild(menu: BaseMenu) {
206
206
  const level = getMenuLevel(menu.id);
207
207
  if (menu.id === APP_MENU_ROOT_ID || isAppMenu(menu.parent_id)) return level >= 1 && level < 4;
208
- if (menu.type === BaseMenuType.BASE_MENU_TYPE_FOLDER) return level === 1 || level === 2;
209
- if (menu.type === BaseMenuType.BASE_MENU_TYPE_MENU) return level === 2 || level === 3;
208
+ if (menu.type === BaseMenuType.BASE_MENU_TYPE_FOLDER) return level === 1 || level === 2 || level === 3;
209
+ if (menu.type === BaseMenuType.BASE_MENU_TYPE_MENU) return level === 2 || level === 3 || level === 4;
210
210
  return false;
211
211
  }
212
212
 
@@ -219,18 +219,18 @@ const availableMenuTypeOptions = computed(() => {
219
219
  if (isAppMenu(formData.parent_id)) return menuTypeOptions.value.filter(item => item.value === BaseMenuType.BASE_MENU_TYPE_MENU);
220
220
  if (formData.id > 0 && parentLevel === 0)
221
221
  return menuTypeOptions.value.filter(item => item.value === BaseMenuType.BASE_MENU_TYPE_FOLDER);
222
- if (dialog.parentType === BaseMenuType.BASE_MENU_TYPE_FOLDER && parentLevel === 1)
222
+ if (dialog.parentType === BaseMenuType.BASE_MENU_TYPE_FOLDER && (parentLevel === 1 || parentLevel === 2))
223
223
  return menuTypeOptions.value.filter(
224
224
  item =>
225
225
  item.value === BaseMenuType.BASE_MENU_TYPE_FOLDER ||
226
226
  item.value === BaseMenuType.BASE_MENU_TYPE_MENU ||
227
227
  item.value === BaseMenuType.BASE_MENU_TYPE_EXT_LINK
228
228
  );
229
- if (dialog.parentType === BaseMenuType.BASE_MENU_TYPE_FOLDER && parentLevel === 2)
229
+ if (dialog.parentType === BaseMenuType.BASE_MENU_TYPE_FOLDER && parentLevel === 3)
230
230
  return menuTypeOptions.value.filter(
231
231
  item => item.value === BaseMenuType.BASE_MENU_TYPE_MENU || item.value === BaseMenuType.BASE_MENU_TYPE_EXT_LINK
232
232
  );
233
- if (dialog.parentType === BaseMenuType.BASE_MENU_TYPE_MENU && (parentLevel === 2 || parentLevel === 3))
233
+ if (dialog.parentType === BaseMenuType.BASE_MENU_TYPE_MENU && (parentLevel === 2 || parentLevel === 3 || parentLevel === 4))
234
234
  return menuTypeOptions.value.filter(item => item.value === BaseMenuType.BASE_MENU_TYPE_BUTTON);
235
235
  return [];
236
236
  });
@@ -296,7 +296,7 @@ function renderMenuTitleCell(scope: RenderScope<BaseMenu>) {
296
296
  const row = scope.row;
297
297
  return h(DynamicI18nCell, {
298
298
  source: row.meta?.title ?? "",
299
- targetType: I18nTargetType.I18N_TARGET_TYPE_BASE_MENU,
299
+ targetType: I18nTargetType.I18N_TARGET_TYPE_BASE_MENU_META_TITLE,
300
300
  targetId: row.id,
301
301
  i18ns: row.i18ns
302
302
  });
@@ -1001,7 +1001,7 @@ function buildSubmitPayload(): BaseMenuForm {
1001
1001
  const payload = normalizeMenuForm(formData);
1002
1002
  payload.i18ns = serializeDynamicI18ns(
1003
1003
  i18nValues.value,
1004
- I18nTargetType.I18N_TARGET_TYPE_BASE_MENU,
1004
+ I18nTargetType.I18N_TARGET_TYPE_BASE_MENU_META_TITLE,
1005
1005
  payload.id
1006
1006
  );
1007
1007
  // 一级菜单在表单中保持空白,提交时仍按接口约定传回根节点标识。
@@ -1145,7 +1145,7 @@ function resetForm(data?: Partial<BaseMenuForm>) {
1145
1145
  formDialogRef.value?.resetFields();
1146
1146
  formDialogRef.value?.clearValidate();
1147
1147
  Object.assign(formData, normalizeMenuForm(data));
1148
- i18nValues.value = normalizeDynamicI18ns(data?.i18ns as DynamicI18nRecord[] | undefined, "title");
1148
+ i18nValues.value = normalizeDynamicI18ns(data?.i18ns as DynamicI18nRecord[] | undefined);
1149
1149
  }
1150
1150
 
1151
1151
  /** 提交菜单表单,并在成功后关闭弹窗、刷新表格。 */