@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,712 @@
1
+ <template>
2
+ <div class="table-box">
3
+ <ProTable ref="proTable" row-key="id" :columns="columns" :header-actions="headerActions" :request-api="requestTable" />
4
+ <FormDialog
5
+ v-model="dialog.visible"
6
+ ref="formDialogRef"
7
+ :title="t(dialog.titleKey)"
8
+ width="900px"
9
+ destroy-on-close
10
+ :model="formState"
11
+ :fields="formFields"
12
+ :rules="rules"
13
+ @confirm="handleSubmit"
14
+ @closed="handleClose"
15
+ >
16
+ <template #audiences>
17
+ <div class="audiences-editor">
18
+ <div v-for="(audience, index) in formState.audiences" :key="index" class="audience-row">
19
+ <el-select v-model="audience.type" class="audience-type" @change="onAudienceTypeChange(audience)">
20
+ <el-option
21
+ v-for="option in audienceOptions"
22
+ :key="String(option.value)"
23
+ :label="option.label"
24
+ :value="option.value"
25
+ />
26
+ </el-select>
27
+ <el-input-number
28
+ v-model="audience.id"
29
+ class="audience-id"
30
+ :min="audience.type === MessageAudienceType.MESSAGE_AUDIENCE_TYPE_TENANT ? 0 : 1"
31
+ :precision="0"
32
+ :disabled="audience.type === MessageAudienceType.MESSAGE_AUDIENCE_TYPE_TENANT"
33
+ />
34
+ <el-switch
35
+ v-if="audience.type === MessageAudienceType.MESSAGE_AUDIENCE_TYPE_DEPT"
36
+ v-model="audience.include_children"
37
+ />
38
+ <el-button v-if="formState.audiences.length > 1" link type="danger" @click="removeAudience(index)">
39
+ <el-icon><Delete /></el-icon>
40
+ </el-button>
41
+ </div>
42
+ <el-button link type="primary" @click="addAudience">
43
+ <el-icon><CirclePlus /></el-icon>
44
+ {{ t("common.action.create") }}
45
+ </el-button>
46
+ </div>
47
+ </template>
48
+ </FormDialog>
49
+ <ProDialog
50
+ v-model="content.visible"
51
+ :title="content.data?.base_message?.title || t('system.base.message.content.title')"
52
+ width="760px"
53
+ destroy-on-close
54
+ :show-footer="false"
55
+ >
56
+ <el-skeleton v-if="content.loading" :rows="8" animated />
57
+ <template v-else-if="content.data">
58
+ <div class="message-content-meta">
59
+ <span>{{ content.data.base_message?.category_name || "-" }}</span>
60
+ <span>{{ content.data.base_message?.created_at || "-" }}</span>
61
+ </div>
62
+ <RichTextPreview
63
+ v-if="content.data.form?.content_format === MessageContentFormat.MESSAGE_CONTENT_FORMAT_RICH_TEXT"
64
+ class="message-content-body"
65
+ :model-value="content.data.form?.content ?? ''"
66
+ />
67
+ <pre v-else class="message-content-body">{{ content.data.form?.content ?? "" }}</pre>
68
+ </template>
69
+ </ProDialog>
70
+ <ProDialog
71
+ v-model="detail.visible"
72
+ :title="t('system.base.message.send_detail.title')"
73
+ width="min(1200px, calc(100vw - 32px))"
74
+ :show-footer="false"
75
+ >
76
+ <template v-if="detail.data">
77
+ <el-descriptions :column="2" border>
78
+ <el-descriptions-item :label="t('system.base.message.field.title')">{{
79
+ detail.data.base_message?.title
80
+ }}</el-descriptions-item>
81
+ <el-descriptions-item :label="t('system.base.message.field.category')">{{
82
+ detail.data.base_message?.category_name
83
+ }}</el-descriptions-item>
84
+ <el-descriptions-item :label="t('common.field.status')">{{
85
+ optionLabel(statusOptions, detail.data.base_message?.status)
86
+ }}</el-descriptions-item>
87
+ <el-descriptions-item :label="t('system.base.message.field.sender')">{{
88
+ detail.data.base_message?.sender_name
89
+ }}</el-descriptions-item>
90
+ <el-descriptions-item :label="t('system.base.message.field.delivered_total')">{{
91
+ detail.data.base_message?.delivered_total
92
+ }}</el-descriptions-item>
93
+ <el-descriptions-item :label="t('system.base.message.field.recipient_total')">{{
94
+ detail.data.base_message?.recipient_total
95
+ }}</el-descriptions-item>
96
+ <el-descriptions-item :label="t('system.base.message.field.failed_total')">{{
97
+ detail.data.base_message?.failed_total
98
+ }}</el-descriptions-item>
99
+ <el-descriptions-item :label="t('system.base.message.field.published_at')">{{
100
+ detail.data.base_message?.published_at || "-"
101
+ }}</el-descriptions-item>
102
+ <el-descriptions-item :label="t('system.base.message.field.scheduled_at')">{{
103
+ detail.data.base_message?.scheduled_at || "-"
104
+ }}</el-descriptions-item>
105
+ </el-descriptions>
106
+ <el-table :data="detail.data.dispatches" style="margin-top: 16px" size="small">
107
+ <el-table-column prop="id" label="ID" width="90" />
108
+ <el-table-column prop="audience_type" :label="t('system.base.message.field.audience_type')" width="120">
109
+ <template #default="scope">{{ optionLabel(audienceOptions, scope.row.audience_type) }}</template>
110
+ </el-table-column>
111
+ <el-table-column prop="audience_id" :label="t('system.base.message.field.audience_id')" width="110" />
112
+ <el-table-column prop="include_children" :label="t('system.base.message.field.include_children')" width="120">
113
+ <template #default="scope">{{ scope.row.include_children ? t("common.value.yes") : t("common.value.no") }}</template>
114
+ </el-table-column>
115
+ <el-table-column prop="status" :label="t('common.field.status')" width="120" />
116
+ <el-table-column prop="matched_total" :label="t('system.base.message.field.matched_total')" width="110" />
117
+ <el-table-column prop="inserted_total" :label="t('system.base.message.field.inserted_total')" width="110" />
118
+ <el-table-column prop="attempt_count" :label="t('system.base.message.field.attempt_count')" width="90" />
119
+ <el-table-column
120
+ prop="last_error"
121
+ :label="t('system.base.message.field.last_error')"
122
+ min-width="220"
123
+ show-overflow-tooltip
124
+ />
125
+ <el-table-column :label="t('common.field.operation')" width="90">
126
+ <template #default="scope">
127
+ <el-button
128
+ v-if="scope.row.status === MessageDispatchStatus.MESSAGE_DISPATCH_STATUS_FAILED && BUTTONS['base:message:retry']"
129
+ link
130
+ type="primary"
131
+ @click="retryDispatch(scope.row.id)"
132
+ >
133
+ {{ t("system.base.message.action.retry") }}
134
+ </el-button>
135
+ </template>
136
+ </el-table-column>
137
+ </el-table>
138
+ </template>
139
+ </ProDialog>
140
+ </div>
141
+ </template>
142
+
143
+ <script setup lang="ts">
144
+ import { computed, h, onMounted, reactive, ref, watch } from "vue";
145
+ import ProTable from "@liujitcn/kratos-admin-core/components/ProTable";
146
+ import ProDialog from "@liujitcn/kratos-admin-core/components/Dialog/ProDialog.vue";
147
+ import FormDialog from "@liujitcn/kratos-admin-core/components/Dialog/FormDialog.vue";
148
+ import RichTextPreview from "@liujitcn/kratos-admin-core/components/RichTextPreview/index.vue";
149
+ import type { ColumnProps, HeaderActionProps, ProTableInstance } from "@liujitcn/kratos-admin-core/components/ProTable/interface";
150
+ import type { ProFormField, ProFormOption } from "@liujitcn/kratos-admin-core/components/ProForm/interface";
151
+ import { useAuthButtons } from "@liujitcn/kratos-admin-core/auth";
152
+ import { buildPageRequest, normalizeSelectedIds } from "@liujitcn/kratos-admin-core/table";
153
+ import { DEFAULT_TENANT_CODE, requestTenantOptions } from "@liujitcn/kratos-admin-core/tenant";
154
+ import { useUserStore } from "@liujitcn/kratos-admin-core/stores/runtime";
155
+ import { t } from "@liujitcn/kratos-admin-core";
156
+ import { defBaseMessageService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_message";
157
+ import { defBaseMessageCategoryService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_message_category";
158
+ import { defBaseTenantService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_tenant";
159
+ import type {
160
+ BaseMessage,
161
+ BaseMessageDetail,
162
+ BaseMessageForm,
163
+ BaseMessageAudienceForm,
164
+ PageBaseMessageRequest
165
+ } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_message";
166
+ import {
167
+ MessageActionType,
168
+ MessageAudienceType,
169
+ MessageContentFormat,
170
+ MessageDispatchStatus,
171
+ MessagePriority,
172
+ MessageStatus
173
+ } from "@liujitcn/kratos-admin-system/rpc/base/v1/notification";
174
+
175
+ defineOptions({ name: "BaseMessage", inheritAttrs: false });
176
+
177
+ /** 消息管理页面表单状态。 */
178
+ type MessageFormState = Omit<BaseMessageForm, "tenant_id" | "category_id"> & {
179
+ /** 租户ID。 */
180
+ tenant_id?: number;
181
+ /** 消息分类ID。 */
182
+ category_id?: number;
183
+ /** 单项受众类型。 */
184
+ audience_type: MessageAudienceType;
185
+ /** 单项受众ID。 */
186
+ audience_id: number;
187
+ /** 是否包含子部门。 */
188
+ include_children: boolean;
189
+ };
190
+
191
+ const { BUTTONS } = useAuthButtons();
192
+ const userStore = useUserStore();
193
+ const isDefaultTenant = computed(() => userStore.userInfo.tenant_code === DEFAULT_TENANT_CODE);
194
+ const proTable = ref<ProTableInstance>();
195
+ const formDialogRef = ref<InstanceType<typeof FormDialog>>();
196
+ const categoryOptions = ref<ProFormOption[]>([]);
197
+ const tenantOptions = ref<ProFormOption[]>([]);
198
+ const dialog = reactive({ visible: false, titleKey: "common.action.create" });
199
+ const content = reactive<{ visible: boolean; loading: boolean; data?: BaseMessageDetail }>({ visible: false, loading: false });
200
+ const detail = reactive<{ visible: boolean; data?: BaseMessageDetail }>({ visible: false });
201
+ const formState = reactive<MessageFormState>(defaultForm());
202
+
203
+ const priorityOptions = computed<ProFormOption[]>(() => [
204
+ { label: t("system.base.message.priority.normal"), value: MessagePriority.MESSAGE_PRIORITY_NORMAL },
205
+ { label: t("system.base.message.priority.important"), value: MessagePriority.MESSAGE_PRIORITY_IMPORTANT },
206
+ { label: t("system.base.message.priority.urgent"), value: MessagePriority.MESSAGE_PRIORITY_URGENT }
207
+ ]);
208
+ const actionTypeOptions = computed<ProFormOption[]>(() => [
209
+ { label: t("system.base.message.action_type.none"), value: MessageActionType.MESSAGE_ACTION_TYPE_UNSPECIFIED },
210
+ { label: t("system.base.message.action_type.view_key"), value: MessageActionType.MESSAGE_ACTION_TYPE_VIEW_KEY }
211
+ ]);
212
+ const audienceOptions = computed<ProFormOption[]>(() => [
213
+ { label: t("system.base.message.audience.tenant"), value: MessageAudienceType.MESSAGE_AUDIENCE_TYPE_TENANT },
214
+ { label: t("system.base.message.audience.user"), value: MessageAudienceType.MESSAGE_AUDIENCE_TYPE_USER },
215
+ { label: t("system.base.message.audience.role"), value: MessageAudienceType.MESSAGE_AUDIENCE_TYPE_ROLE },
216
+ { label: t("system.base.message.audience.dept"), value: MessageAudienceType.MESSAGE_AUDIENCE_TYPE_DEPT },
217
+ { label: t("system.base.message.audience.post"), value: MessageAudienceType.MESSAGE_AUDIENCE_TYPE_POST }
218
+ ]);
219
+ const statusOptions = computed<ProFormOption[]>(() => [
220
+ { label: t("system.base.message.status.draft"), value: MessageStatus.MESSAGE_STATUS_DRAFT },
221
+ { label: t("system.base.message.status.scheduled"), value: MessageStatus.MESSAGE_STATUS_SCHEDULED },
222
+ { label: t("system.base.message.status.publishing"), value: MessageStatus.MESSAGE_STATUS_PUBLISHING },
223
+ { label: t("system.base.message.status.published"), value: MessageStatus.MESSAGE_STATUS_PUBLISHED },
224
+ { label: t("system.base.message.status.revoked"), value: MessageStatus.MESSAGE_STATUS_REVOKED }
225
+ ]);
226
+ onMounted(() => {
227
+ void loadCategoryOptions();
228
+ void loadTenantOptions();
229
+ });
230
+ watch(
231
+ () => formState.action_type,
232
+ value => {
233
+ if (value === MessageActionType.MESSAGE_ACTION_TYPE_UNSPECIFIED) formState.action_target = "";
234
+ }
235
+ );
236
+
237
+ const rules = computed(() => ({
238
+ tenant_id: isDefaultTenant.value
239
+ ? [
240
+ {
241
+ required: true,
242
+ message: t("common.validation.required_select", { field: t("common.field.tenant") }),
243
+ trigger: "change"
244
+ }
245
+ ]
246
+ : [],
247
+ category_id: [
248
+ {
249
+ required: true,
250
+ message: t("common.validation.required_select", { field: t("system.base.message.field.category") }),
251
+ trigger: "change"
252
+ }
253
+ ],
254
+ title: [
255
+ {
256
+ required: true,
257
+ message: t("common.validation.required_input", { field: t("system.base.message.field.title") }),
258
+ trigger: "blur"
259
+ }
260
+ ],
261
+ content: [
262
+ {
263
+ required: true,
264
+ message: t("common.validation.required_input", { field: t("system.base.message.field.content") }),
265
+ trigger: "blur"
266
+ }
267
+ ],
268
+ audiences: [{ required: true, message: t("system.base.message.validation.audience_id"), trigger: "change" }]
269
+ }));
270
+
271
+ const formFields = computed<ProFormField[]>(() => [
272
+ {
273
+ prop: "tenant_id",
274
+ label: t("common.field.tenant"),
275
+ labelTooltip: t("system.base.message.tooltip.tenant"),
276
+ component: "select",
277
+ visible: () => isDefaultTenant.value,
278
+ options: tenantOptions.value,
279
+ props: { filterable: true, disabled: Boolean(formState.id), placeholder: t("system.base.message.placeholder.tenant") }
280
+ },
281
+ {
282
+ prop: "category_id",
283
+ label: t("system.base.message.field.category"),
284
+ labelTooltip: t("system.base.message.tooltip.category"),
285
+ component: "select",
286
+ options: categoryOptions.value,
287
+ props: { filterable: true, placeholder: t("system.base.message.placeholder.category") }
288
+ },
289
+ {
290
+ prop: "title",
291
+ label: t("system.base.message.field.title"),
292
+ labelTooltip: t("system.base.message.tooltip.title"),
293
+ component: "input",
294
+ props: { maxlength: 200, showWordLimit: true, placeholder: t("system.base.message.placeholder.title") },
295
+ colSpan: 24
296
+ },
297
+ {
298
+ prop: "content",
299
+ label: t("system.base.message.field.content"),
300
+ labelTooltip: t("system.base.message.tooltip.content"),
301
+ component: "rich-text",
302
+ props: {
303
+ height: "320px",
304
+ uploadType: "message",
305
+ editorConfig: { placeholder: t("system.base.message.placeholder.content") }
306
+ },
307
+ colSpan: 24
308
+ },
309
+ {
310
+ prop: "priority",
311
+ label: t("system.base.message.field.priority"),
312
+ labelTooltip: t("system.base.message.tooltip.priority"),
313
+ component: "select",
314
+ options: priorityOptions.value
315
+ },
316
+ {
317
+ prop: "audiences",
318
+ label: t("system.base.message.field.audience_type"),
319
+ labelTooltip: t("system.base.message.tooltip.audience_type"),
320
+ component: "slot",
321
+ slotName: "audiences",
322
+ colSpan: 24,
323
+ rules: [{ required: true, message: t("system.base.message.validation.audience_id"), trigger: "change" }]
324
+ },
325
+ {
326
+ prop: "action_type",
327
+ label: t("system.base.message.field.action_type"),
328
+ labelTooltip: t("system.base.message.tooltip.action_type"),
329
+ component: "select",
330
+ options: actionTypeOptions.value
331
+ },
332
+ {
333
+ prop: "action_target",
334
+ label: t("system.base.message.field.action_target"),
335
+ labelTooltip: t("system.base.message.tooltip.action_target"),
336
+ component: "input",
337
+ visible: () => formState.action_type === MessageActionType.MESSAGE_ACTION_TYPE_VIEW_KEY,
338
+ props: { placeholder: t("system.base.message.placeholder.action_target") },
339
+ colSpan: 24
340
+ },
341
+ {
342
+ prop: "scheduled_at",
343
+ label: t("system.base.message.field.scheduled_at"),
344
+ component: "date-picker",
345
+ props: {
346
+ type: "datetime",
347
+ valueFormat: "YYYY-MM-DD HH:mm:ss",
348
+ placeholder: t("system.base.message.placeholder.scheduled_at")
349
+ }
350
+ },
351
+ {
352
+ prop: "expires_at",
353
+ label: t("system.base.message.field.expires_at"),
354
+ component: "date-picker",
355
+ props: { type: "datetime", valueFormat: "YYYY-MM-DD HH:mm:ss", placeholder: t("system.base.message.placeholder.expires_at") }
356
+ }
357
+ ]);
358
+
359
+ const columns = computed<ColumnProps[]>(() => [
360
+ { type: "selection", width: 55 },
361
+ ...(isDefaultTenant.value
362
+ ? ([
363
+ {
364
+ prop: "tenant_id",
365
+ label: t("common.field.tenant"),
366
+ minWidth: 120,
367
+ search: { el: "select" },
368
+ enum: requestTenantOptions
369
+ }
370
+ ] satisfies ColumnProps[])
371
+ : []),
372
+ {
373
+ prop: "title",
374
+ label: t("system.base.message.field.title"),
375
+ minWidth: 220,
376
+ search: { el: "input" },
377
+ render: scope => {
378
+ const row = scope.row as BaseMessage;
379
+ return h(
380
+ "a",
381
+ {
382
+ href: "#",
383
+ title: row.title,
384
+ style: {
385
+ display: "block",
386
+ maxWidth: "100%",
387
+ overflow: "hidden",
388
+ color: "var(--el-color-primary)",
389
+ textDecoration: "none",
390
+ textOverflow: "ellipsis",
391
+ whiteSpace: "nowrap"
392
+ },
393
+ onClick: (event: MouseEvent) => {
394
+ event.preventDefault();
395
+ void openContent(row.id);
396
+ }
397
+ },
398
+ row.title
399
+ );
400
+ }
401
+ },
402
+ {
403
+ prop: "category_name",
404
+ label: t("system.base.message.field.category"),
405
+ minWidth: 130,
406
+ search: { el: "select", key: "category_id", enum: categoryOptions.value }
407
+ },
408
+ {
409
+ prop: "priority",
410
+ label: t("system.base.message.field.priority"),
411
+ width: 100,
412
+ render: scope => optionLabel(priorityOptions.value, (scope.row as BaseMessage).priority)
413
+ },
414
+ {
415
+ prop: "status",
416
+ label: t("common.field.status"),
417
+ width: 110,
418
+ search: { el: "select", enum: statusOptions.value },
419
+ render: scope => optionLabel(statusOptions.value, (scope.row as BaseMessage).status)
420
+ },
421
+ { prop: "delivered_total", label: t("system.base.message.field.delivered_total"), width: 100, align: "right" },
422
+ { prop: "created_at", label: t("common.field.created_at"), minWidth: 180 },
423
+ {
424
+ prop: "operation",
425
+ label: t("common.field.operation"),
426
+ width: 380,
427
+ className: "message-operation-column",
428
+ fixed: "right",
429
+ cellType: "actions",
430
+ actions: [
431
+ {
432
+ label: t("common.action.edit"),
433
+ link: true,
434
+ icon: EditPen,
435
+ hidden: scope =>
436
+ !BUTTONS.value["base:message:update"] || (scope.row as BaseMessage).status !== MessageStatus.MESSAGE_STATUS_DRAFT,
437
+ onClick: scope => openDialog((scope.row as BaseMessage).id)
438
+ },
439
+ {
440
+ label: t("system.base.message.send_detail.action"),
441
+ link: true,
442
+ icon: View,
443
+ onClick: scope => openDetail((scope.row as BaseMessage).id)
444
+ },
445
+ {
446
+ label: t("system.base.message.action.publish"),
447
+ type: "primary",
448
+ link: true,
449
+ icon: Promotion,
450
+ hidden: scope =>
451
+ !BUTTONS.value["base:message:publish"] || (scope.row as BaseMessage).status !== MessageStatus.MESSAGE_STATUS_DRAFT,
452
+ onClick: scope => publishMessage(scope.row as BaseMessage)
453
+ },
454
+ {
455
+ label: t("system.base.message.action.cancel_schedule"),
456
+ link: true,
457
+ icon: RefreshRight,
458
+ hidden: scope =>
459
+ !BUTTONS.value["base:message:schedule"] || (scope.row as BaseMessage).status !== MessageStatus.MESSAGE_STATUS_SCHEDULED,
460
+ onClick: scope => cancelSchedule(scope.row as BaseMessage)
461
+ },
462
+ {
463
+ label: t("system.base.message.action.revoke"),
464
+ type: "danger",
465
+ link: true,
466
+ icon: SwitchButton,
467
+ hidden: scope =>
468
+ !BUTTONS.value["base:message:revoke"] ||
469
+ ![MessageStatus.MESSAGE_STATUS_PUBLISHING, MessageStatus.MESSAGE_STATUS_PUBLISHED].includes(
470
+ (scope.row as BaseMessage).status
471
+ ),
472
+ onClick: scope => revokeMessage(scope.row as BaseMessage)
473
+ },
474
+ {
475
+ label: t("common.action.delete"),
476
+ type: "danger",
477
+ link: true,
478
+ icon: Delete,
479
+ hidden: scope =>
480
+ !BUTTONS.value["base:message:delete"] || (scope.row as BaseMessage).status !== MessageStatus.MESSAGE_STATUS_DRAFT,
481
+ onClick: scope => handleDelete(scope.row as BaseMessage)
482
+ }
483
+ ]
484
+ }
485
+ ]);
486
+
487
+ const headerActions = computed<HeaderActionProps[]>(() => [
488
+ {
489
+ label: t("common.action.create"),
490
+ type: "primary",
491
+ icon: CirclePlus,
492
+ hidden: !BUTTONS.value["base:message:create"],
493
+ onClick: () => openDialog()
494
+ },
495
+ {
496
+ label: t("common.action.delete"),
497
+ type: "danger",
498
+ icon: Delete,
499
+ hidden: !BUTTONS.value["base:message:delete"],
500
+ disabled: scope => !scope.isSelected,
501
+ onClick: scope => handleDelete(scope.selectedListIds as number[])
502
+ }
503
+ ]);
504
+
505
+ /** 创建默认消息表单。 */
506
+ function defaultForm(): MessageFormState {
507
+ return {
508
+ id: 0,
509
+ tenant_id: undefined,
510
+ category_id: undefined,
511
+ title: "",
512
+ content: "",
513
+ content_format: MessageContentFormat.MESSAGE_CONTENT_FORMAT_RICH_TEXT,
514
+ priority: MessagePriority.MESSAGE_PRIORITY_NORMAL,
515
+ action_type: MessageActionType.MESSAGE_ACTION_TYPE_UNSPECIFIED,
516
+ action_target: "",
517
+ action_params: "",
518
+ scheduled_at: "",
519
+ expires_at: "",
520
+ audiences: [defaultAudience()],
521
+ version: 1,
522
+ audience_type: MessageAudienceType.MESSAGE_AUDIENCE_TYPE_TENANT,
523
+ audience_id: 0,
524
+ include_children: false
525
+ };
526
+ }
527
+
528
+ /** 创建默认受众行。 */
529
+ function defaultAudience(): BaseMessageAudienceForm {
530
+ return { type: MessageAudienceType.MESSAGE_AUDIENCE_TYPE_TENANT, id: 0, include_children: false };
531
+ }
532
+
533
+ /** 添加一条消息受众。 */
534
+ function addAudience() {
535
+ formState.audiences.push(defaultAudience());
536
+ }
537
+
538
+ /** 删除一条消息受众。 */
539
+ function removeAudience(index: number) {
540
+ if (formState.audiences.length > 1) formState.audiences.splice(index, 1);
541
+ }
542
+
543
+ /** 切换受众类型时清理不适用的字段。 */
544
+ function onAudienceTypeChange(audience: BaseMessageAudienceForm) {
545
+ if (audience.type === MessageAudienceType.MESSAGE_AUDIENCE_TYPE_TENANT) audience.id = 0;
546
+ if (audience.type !== MessageAudienceType.MESSAGE_AUDIENCE_TYPE_DEPT) audience.include_children = false;
547
+ }
548
+
549
+ /** 请求消息表格数据。 */
550
+ async function requestTable(params: Record<string, unknown>) {
551
+ const data = await defBaseMessageService.PageBaseMessage(
552
+ buildPageRequest<PageBaseMessageRequest>(params as unknown as PageBaseMessageRequest)
553
+ );
554
+ return { data: { list: data.base_messages ?? [], total: data.total } };
555
+ }
556
+
557
+ /** 加载租户选项。 */
558
+ async function loadTenantOptions() {
559
+ if (!isDefaultTenant.value) return;
560
+ const result = await defBaseTenantService.OptionBaseTenant({ keyword: "" });
561
+ tenantOptions.value = result.list.map(item => ({ label: item.label, value: item.value }));
562
+ }
563
+
564
+ /** 加载消息分类选项。 */
565
+ async function loadCategoryOptions() {
566
+ const result = await defBaseMessageCategoryService.OptionBaseMessageCategory({});
567
+ categoryOptions.value = result.list.map(item => ({ label: item.label, value: item.value, disabled: item.disabled }));
568
+ }
569
+
570
+ /** 打开消息草稿表单。 */
571
+ async function openDialog(id?: number) {
572
+ await loadTenantOptions();
573
+ Object.assign(formState, defaultForm());
574
+ dialog.titleKey = id ? "common.action.edit" : "common.action.create";
575
+ if (id) {
576
+ const detail = await defBaseMessageService.GetBaseMessage({ id });
577
+ Object.assign(formState, detail.form);
578
+ formState.audiences = detail.form?.audiences?.map(item => ({ ...item })) ?? [defaultAudience()];
579
+ }
580
+ await loadCategoryOptions();
581
+ dialog.visible = true;
582
+ }
583
+
584
+ /** 提交消息草稿。 */
585
+ async function handleSubmit() {
586
+ const audiences = formState.audiences.length > 0 ? formState.audiences.map(item => ({ ...item })) : [defaultAudience()];
587
+ const payload: BaseMessageForm = {
588
+ ...formState,
589
+ tenant_id: formState.tenant_id ?? 0,
590
+ category_id: formState.category_id ?? 0,
591
+ content_format: MessageContentFormat.MESSAGE_CONTENT_FORMAT_RICH_TEXT,
592
+ audiences
593
+ };
594
+ if (payload.id) await defBaseMessageService.UpdateBaseMessage({ base_message: payload });
595
+ else await defBaseMessageService.CreateBaseMessage({ base_message: payload });
596
+ ElMessage.success(t("common.message.operation_success"));
597
+ dialog.visible = false;
598
+ proTable.value?.getTableList();
599
+ }
600
+
601
+ /** 打开发送详情并加载投递进度。 */
602
+ async function openDetail(id: number) {
603
+ detail.data = await defBaseMessageService.GetBaseMessage({ id });
604
+ detail.visible = true;
605
+ }
606
+
607
+ /** 打开消息正文并单独展示内容。 */
608
+ async function openContent(id: number) {
609
+ content.visible = true;
610
+ content.loading = true;
611
+ content.data = undefined;
612
+ try {
613
+ content.data = await defBaseMessageService.GetBaseMessage({ id });
614
+ } catch {
615
+ content.visible = false;
616
+ } finally {
617
+ content.loading = false;
618
+ }
619
+ }
620
+
621
+ /** 重试失败的消息投递任务并刷新详情。 */
622
+ async function retryDispatch(id: number) {
623
+ await defBaseMessageService.RetryBaseMessageDispatch({ id });
624
+ if (detail.data?.base_message?.id)
625
+ detail.data = await defBaseMessageService.GetBaseMessage({ id: detail.data.base_message.id });
626
+ ElMessage.success(t("common.message.operation_success"));
627
+ }
628
+
629
+ /** 删除草稿消息。 */
630
+ async function handleDelete(value: BaseMessage | BaseMessage[] | number | number[]) {
631
+ const ids = normalizeSelectedIds(value as Parameters<typeof normalizeSelectedIds>[0]);
632
+ await ElMessageBox.confirm(t("common.confirm.delete"), t("common.title.warning"), { type: "warning" });
633
+ await defBaseMessageService.DeleteBaseMessage({ id: ids.join(",") });
634
+ ElMessage.success(t("common.message.operation_success"));
635
+ proTable.value?.getTableList();
636
+ }
637
+
638
+ /** 发布消息。 */
639
+ async function publishMessage(row: BaseMessage) {
640
+ await ElMessageBox.confirm(t("system.base.message.confirm.publish"), t("common.title.warning"), { type: "warning" });
641
+ await defBaseMessageService.PublishBaseMessage({ id: row.id });
642
+ proTable.value?.getTableList();
643
+ }
644
+
645
+ /** 取消定时发布。 */
646
+ async function cancelSchedule(row: BaseMessage) {
647
+ await defBaseMessageService.CancelBaseMessageSchedule({ id: row.id });
648
+ proTable.value?.getTableList();
649
+ }
650
+
651
+ /** 撤回消息。 */
652
+ async function revokeMessage(row: BaseMessage) {
653
+ await ElMessageBox.confirm(t("system.base.message.confirm.revoke"), t("common.title.warning"), { type: "warning" });
654
+ await defBaseMessageService.RevokeBaseMessage({ id: row.id });
655
+ proTable.value?.getTableList();
656
+ }
657
+
658
+ /** 关闭消息表单。 */
659
+ function handleClose() {
660
+ Object.assign(formState, defaultForm());
661
+ formDialogRef.value?.resetFields();
662
+ }
663
+
664
+ /** 查询选项显示名称。 */
665
+ function optionLabel(options: ProFormOption[], value: unknown) {
666
+ return options.find(item => item.value === value)?.label ?? "";
667
+ }
668
+ </script>
669
+
670
+ <style scoped>
671
+ .audiences-editor {
672
+ width: 100%;
673
+ }
674
+
675
+ .audience-row {
676
+ display: flex;
677
+ align-items: center;
678
+ gap: 8px;
679
+ margin-bottom: 8px;
680
+ }
681
+
682
+ .audience-type {
683
+ width: 180px;
684
+ }
685
+
686
+ .audience-id {
687
+ width: 160px;
688
+ }
689
+
690
+ .message-content-meta {
691
+ display: flex;
692
+ align-items: center;
693
+ gap: 12px;
694
+ margin-bottom: 16px;
695
+ color: var(--el-text-color-secondary);
696
+ font-size: 13px;
697
+ }
698
+
699
+ .message-content-body {
700
+ max-height: 60vh;
701
+ margin: 0;
702
+ overflow: auto;
703
+ padding: 12px;
704
+ border: 1px solid var(--el-border-color-lighter);
705
+ color: var(--el-text-color-primary);
706
+ overflow-wrap: anywhere;
707
+ }
708
+
709
+ pre.message-content-body {
710
+ white-space: pre-wrap;
711
+ }
712
+ </style>