@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,161 @@
1
+ <template>
2
+ <el-card class="session-card" shadow="never">
3
+ <template #header>
4
+ <div class="session-header">
5
+ <div>
6
+ <h3>{{ t("system.profile.session.title") }}</h3>
7
+ <p>{{ t("system.profile.session.description") }}</p>
8
+ </div>
9
+ <el-button :loading="loading" @click="loadSession">
10
+ <el-icon><Refresh /></el-icon>
11
+ {{ t("system.profile.session.action.refresh") }}
12
+ </el-button>
13
+ </div>
14
+ </template>
15
+
16
+ <el-skeleton v-if="loading && !session" :rows="5" animated />
17
+ <el-empty v-else-if="!session" :description="t('system.profile.session.empty')" />
18
+ <div v-else class="session-details">
19
+ <div class="session-status">
20
+ <el-tag type="success" effect="plain">{{ t("system.profile.session.status.active") }}</el-tag>
21
+ <span>{{ session.user_name }} · {{ session.tenant_code }}</span>
22
+ </div>
23
+ <dl class="session-grid">
24
+ <div>
25
+ <dt>{{ t("system.profile.session.field.client_ip") }}</dt>
26
+ <dd>{{ session.client_ip || "-" }}</dd>
27
+ </div>
28
+ <div>
29
+ <dt>{{ t("system.profile.session.field.device") }}</dt>
30
+ <dd>{{ session.device || "-" }}</dd>
31
+ </div>
32
+ <div>
33
+ <dt>{{ t("system.profile.session.field.issued_at") }}</dt>
34
+ <dd>{{ session.issued_at || "-" }}</dd>
35
+ </div>
36
+ <div>
37
+ <dt>{{ t("system.profile.session.field.expires_in") }}</dt>
38
+ <dd>{{ formatExpires(session.expires_in) }}</dd>
39
+ </div>
40
+ </dl>
41
+ <div class="session-actions">
42
+ <el-button type="danger" plain @click="revokeAll">
43
+ <el-icon><SwitchButton /></el-icon>
44
+ {{ t("system.profile.session.action.revoke_all") }}
45
+ </el-button>
46
+ </div>
47
+ </div>
48
+ </el-card>
49
+ </template>
50
+
51
+ <script setup lang="ts">
52
+ import { onMounted, ref } from "vue";
53
+ import { useRouter } from "vue-router";
54
+ import { t } from "@liujitcn/kratos-admin-core";
55
+ import { LOGIN_URL } from "@liujitcn/kratos-admin-core/config";
56
+ import { useUserStore } from "@liujitcn/kratos-admin-core/stores/runtime";
57
+ import { defBaseSessionService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_session";
58
+ import type { BaseSession } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_session";
59
+
60
+ const loading = ref(false);
61
+ const session = ref<BaseSession>();
62
+ const router = useRouter();
63
+ const userStore = useUserStore();
64
+
65
+ /** 拉取当前会话信息。 */
66
+ async function loadSession() {
67
+ loading.value = true;
68
+ try {
69
+ session.value = await defBaseSessionService.GetCurrentBaseSession({});
70
+ } finally {
71
+ loading.value = false;
72
+ }
73
+ }
74
+
75
+ /** 撤销当前用户全部会话并返回登录页。 */
76
+ async function revokeAll() {
77
+ await ElMessageBox.confirm(t("system.profile.session.confirm.revoke_all"), t("system.profile.session.confirm.title"), {
78
+ type: "warning"
79
+ });
80
+ await defBaseSessionService.RevokeAllBaseSessions({});
81
+ userStore.clearAuthData();
82
+ ElMessage.success(t("system.profile.session.message.revoked"));
83
+ session.value = undefined;
84
+ await router.replace(LOGIN_URL);
85
+ }
86
+
87
+ /** 将秒数格式化为可读的剩余有效期。 */
88
+ function formatExpires(seconds: number) {
89
+ if (!seconds || seconds < 60) return t("system.profile.session.value.less_than_minute");
90
+ const hours = Math.floor(seconds / 3600);
91
+ const minutes = Math.floor((seconds % 3600) / 60);
92
+ if (hours > 0) return t("system.profile.session.value.hours_minutes", { hours, minutes });
93
+ return t("system.profile.session.value.minutes", { minutes });
94
+ }
95
+
96
+ onMounted(loadSession);
97
+ </script>
98
+
99
+ <style scoped lang="scss">
100
+ .session-card {
101
+ border: 1px solid var(--el-border-color-light);
102
+ border-radius: var(--admin-page-radius);
103
+ }
104
+ :deep(.session-card .el-card__header) {
105
+ padding: 18px 20px;
106
+ border-bottom: 1px solid var(--el-border-color-light);
107
+ }
108
+ :deep(.session-card .el-card__body) {
109
+ padding: 20px;
110
+ }
111
+ .session-header,
112
+ .session-status,
113
+ .session-actions {
114
+ display: flex;
115
+ align-items: center;
116
+ justify-content: space-between;
117
+ gap: 12px;
118
+ }
119
+ .session-header h3 {
120
+ margin: 0;
121
+ color: var(--el-text-color-primary);
122
+ font-size: 18px;
123
+ }
124
+ .session-header p {
125
+ margin: 6px 0 0;
126
+ color: var(--el-text-color-secondary);
127
+ font-size: 13px;
128
+ }
129
+ .session-grid {
130
+ display: grid;
131
+ grid-template-columns: repeat(2, minmax(0, 1fr));
132
+ gap: 16px;
133
+ margin: 24px 0;
134
+ }
135
+ .session-grid div {
136
+ padding: 14px;
137
+ background: var(--el-fill-color-light);
138
+ border-radius: var(--admin-page-radius);
139
+ }
140
+ .session-grid dt {
141
+ color: var(--el-text-color-secondary);
142
+ font-size: 12px;
143
+ }
144
+ .session-grid dd {
145
+ margin: 6px 0 0;
146
+ color: var(--el-text-color-primary);
147
+ overflow-wrap: anywhere;
148
+ }
149
+ .session-actions {
150
+ justify-content: flex-end;
151
+ }
152
+ @media screen and (width <= 640px) {
153
+ .session-header {
154
+ align-items: flex-start;
155
+ flex-direction: column;
156
+ }
157
+ .session-grid {
158
+ grid-template-columns: 1fr;
159
+ }
160
+ }
161
+ </style>
@@ -26,6 +26,7 @@
26
26
  @refreshed="loadUserProfile"
27
27
  @switch-tab="handleTabChange"
28
28
  />
29
+ <ProfileSession v-else-if="activeTab === 'session'" />
29
30
  <ProfilePassword v-else />
30
31
  </main>
31
32
  </section>
@@ -41,16 +42,16 @@ defineOptions({
41
42
  import { computed, onMounted, reactive, ref } from "vue";
42
43
  import { useRoute } from "vue-router";
43
44
  import { t } from "@liujitcn/kratos-admin-core";
44
- import { defProfileAuthService } from "@liujitcn/kratos-admin-system/api/system/auth";
45
+ import { defProfileAuthService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/auth";
45
46
  import type { UserProfileForm } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/auth";
46
47
  import { useUserStore } from "@liujitcn/kratos-admin-core/stores/runtime";
47
48
  import ProfileBase from "./components/base.vue";
48
49
  import ProfileSecurity from "./components/security.vue";
49
50
  import ProfilePassword from "./components/password.vue";
50
- import { ArrowRight } from "@element-plus/icons-vue";
51
+ import ProfileSession from "./components/session.vue";
51
52
 
52
53
  /** 个人中心标签页。 */
53
- type ProfileTab = "account" | "security" | "password";
54
+ type ProfileTab = "account" | "security" | "password" | "session";
54
55
 
55
56
  /** 左侧导航项结构。 */
56
57
  interface ProfileTabOption {
@@ -65,29 +66,42 @@ interface ProfileTabOption {
65
66
  const userStore = useUserStore();
66
67
  const route = useRoute();
67
68
  const activeTab = ref<ProfileTab>("account");
68
- const profileTabs = computed<ProfileTabOption[]>(() => [
69
- {
70
- value: "account",
71
- label: t("system.profile.account.title"),
72
- description: t("system.profile.account.nav_description")
73
- },
74
- {
75
- value: "security",
76
- label: t("system.profile.security.title"),
77
- description: t("system.profile.security.nav_description")
78
- },
79
- {
80
- value: "password",
81
- label: t("system.profile.password.title"),
82
- description: t("system.profile.password.nav_description")
69
+ const profileTabs = computed<ProfileTabOption[]>(() => {
70
+ const tabs: ProfileTabOption[] = [
71
+ {
72
+ value: "account",
73
+ label: t("system.profile.account.title"),
74
+ description: t("system.profile.account.nav_description")
75
+ },
76
+ {
77
+ value: "security",
78
+ label: t("system.profile.security.title"),
79
+ description: t("system.profile.security.nav_description")
80
+ },
81
+ {
82
+ value: "password",
83
+ label: t("system.profile.password.title"),
84
+ description: t("system.profile.password.nav_description")
85
+ }
86
+ ];
87
+ if (userStore.userInfo.role_code === "super") {
88
+ tabs.push({
89
+ value: "session",
90
+ label: t("system.profile.session.title"),
91
+ description: t("system.profile.session.nav_description")
92
+ });
83
93
  }
84
- ]);
94
+ return tabs;
95
+ });
85
96
  const userProfileForm = reactive<UserProfileForm>({
86
97
  user_name: "",
87
98
  nick_name: "",
88
99
  avatar: "",
89
100
  gender: 3,
90
101
  phone: "",
102
+ email: "",
103
+ id_type: 0,
104
+ id_code: "",
91
105
  role_name: "",
92
106
  dept_name: "",
93
107
  created_at: ""
@@ -108,6 +122,9 @@ async function loadUserProfile() {
108
122
  user_name: profile.user_name,
109
123
  nick_name: profile.nick_name,
110
124
  phone: profile.phone,
125
+ email: profile.email,
126
+ id_type: profile.id_type,
127
+ id_code: profile.id_code,
111
128
  avatar: profile.avatar,
112
129
  role_name: profile.role_name,
113
130
  dept_name: profile.dept_name
@@ -115,8 +132,10 @@ async function loadUserProfile() {
115
132
  }
116
133
 
117
134
  onMounted(async () => {
118
- // OAuth 绑定回跳时优先打开安全设置,让子组件消费绑定结果并刷新状态。
119
- if (route.query.oauth_bind_success || route.query.oauth_bind_error) {
135
+ if (route.query.tab === "password") {
136
+ activeTab.value = "password";
137
+ } else if (route.query.oauth_bind_success || route.query.oauth_bind_error) {
138
+ // OAuth 绑定回跳时优先打开安全设置,让子组件消费绑定结果并刷新状态。
120
139
  activeTab.value = "security";
121
140
  }
122
141
  await loadUserProfile();
@@ -125,21 +144,21 @@ onMounted(async () => {
125
144
 
126
145
  <style scoped lang="scss">
127
146
  .profile-page {
128
- padding: 20px;
147
+ min-width: 0;
129
148
  }
130
149
  .profile-shell {
131
150
  display: grid;
132
151
  grid-template-columns: 260px minmax(0, 1fr);
133
- gap: 16px;
152
+ gap: 10px;
134
153
  align-items: start;
135
154
  }
136
155
  .profile-nav {
137
156
  position: sticky;
138
- top: 20px;
157
+ top: 10px;
139
158
  padding: 16px;
140
159
  background: #ffffff;
141
160
  border: 1px solid #ebeef5;
142
- border-radius: 12px;
161
+ border-radius: var(--admin-page-radius);
143
162
  box-shadow: 0 2px 12px rgb(0 0 0 / 4%);
144
163
  }
145
164
  .nav-item {
@@ -153,7 +172,7 @@ onMounted(async () => {
153
172
  cursor: pointer;
154
173
  background: #ffffff;
155
174
  border: 1px solid transparent;
156
- border-radius: 10px;
175
+ border-radius: var(--admin-page-radius);
157
176
  transition: all 0.2s ease;
158
177
  }
159
178
  .nav-item + .nav-item {
@@ -192,9 +211,4 @@ onMounted(async () => {
192
211
  }
193
212
  }
194
213
 
195
- @media screen and (width <= 640px) {
196
- .profile-page {
197
- padding: 16px;
198
- }
199
- }
200
214
  </style>
@@ -29,7 +29,7 @@ import SwaggerUIBundle from "swagger-ui-dist/swagger-ui-bundle.js";
29
29
  import "swagger-ui-dist/swagger-ui.css";
30
30
  import { DEFAULT_LOCALE, t, useLocaleStore } from "@liujitcn/kratos-admin-core";
31
31
  import { getLocaleRequestHeaders, getRequestAccessToken } from "@liujitcn/kratos-admin-core/request";
32
- import { defBaseApiService } from "@liujitcn/kratos-admin-system/api/system/base_api";
32
+ import { defBaseApiService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/base_api";
33
33
  import type { OpenApiServiceOption } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_api";
34
34
 
35
35
  const swaggerRootRef = ref<HTMLElement>();
@@ -134,7 +134,7 @@ onBeforeUnmount(() => {
134
134
  display: grid;
135
135
  flex: 1;
136
136
  grid-template-columns: 240px minmax(0, 1fr);
137
- gap: 12px;
137
+ gap: 10px;
138
138
  min-height: 0;
139
139
  overflow: hidden;
140
140
  }
@@ -163,7 +163,7 @@ onBeforeUnmount(() => {
163
163
  cursor: pointer;
164
164
  background: transparent;
165
165
  border: 0;
166
- border-radius: 4px;
166
+ border-radius: var(--admin-page-radius);
167
167
  transition: background-color 0.2s ease;
168
168
  }
169
169
  .api-doc-page__document:hover {
@@ -0,0 +1,352 @@
1
+ <template>
2
+ <div class="table-box cache-page">
3
+ <ProTable ref="proTable" row-key="key" :columns="columns" :request-api="requestCacheTable" />
4
+
5
+ <ProDialog
6
+ v-model="detail.visible"
7
+ :title="t('system.cache.detail.title')"
8
+ width="min(960px, calc(100vw - 32px))"
9
+ destroy-on-close
10
+ :show-footer="false"
11
+ >
12
+ <template v-if="detail.entry">
13
+ <div class="cache-detail-meta">
14
+ <code class="cache-detail-key" :title="detail.entry.key">{{ detail.entry.key }}</code>
15
+ <el-tag size="small" effect="plain">{{ cacheTypeLabel(detail.entry.type) }}</el-tag>
16
+ <span class="cache-detail-ttl">{{ formatTtl(detail.entry.ttl_seconds) }}</span>
17
+ </div>
18
+
19
+ <div v-if="detail.entry.type === 'hash'" class="cache-fields">
20
+ <el-empty v-if="!detail.entry.fields?.length" :description="t('common.message.no_data')" />
21
+ <article v-for="field in detail.entry.fields" :key="field.key" class="cache-field">
22
+ <div class="cache-field-header">
23
+ <code class="cache-field-key">{{ field.key }}</code>
24
+ <el-tag size="small" effect="plain" type="info">{{ cacheValueKindLabel(field.value) }}</el-tag>
25
+ </div>
26
+ <CacheValueContent :value="field.value" />
27
+ </article>
28
+ </div>
29
+
30
+ <section v-else class="cache-string-value">
31
+ <div class="cache-value-header">
32
+ <span>{{ t("system.cache.field.value") }}</span>
33
+ <el-tag size="small" effect="plain" type="info">{{ cacheValueKindLabel(detail.entry.value) }}</el-tag>
34
+ </div>
35
+ <CacheValueContent :value="detail.entry.value" />
36
+ </section>
37
+ </template>
38
+ </ProDialog>
39
+ </div>
40
+ </template>
41
+
42
+ <script setup lang="ts">
43
+ import { computed, defineComponent, h, reactive, ref } from "vue";
44
+ import { View } from "@element-plus/icons-vue";
45
+ import ProTable from "@liujitcn/kratos-admin-core/components/ProTable";
46
+ import ProDialog from "@liujitcn/kratos-admin-core/components/Dialog/ProDialog.vue";
47
+ import type { ColumnProps, ProTableInstance } from "@liujitcn/kratos-admin-core/components/ProTable/interface";
48
+ import { buildPageRequest } from "@liujitcn/kratos-admin-core/table";
49
+ import { t } from "@liujitcn/kratos-admin-core";
50
+ import RichTextPreview from "@liujitcn/kratos-admin-core/components/RichTextPreview/index.vue";
51
+ import { defCacheService } from "@liujitcn/kratos-admin-system/api/system/admin/v1/cache";
52
+ import type { CacheEntry, PageCacheRequest } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/cache";
53
+
54
+ defineOptions({ name: "Cache", inheritAttrs: false });
55
+
56
+ const proTable = ref<ProTableInstance>();
57
+ const detail = reactive<{ visible: boolean; entry?: CacheEntry }>({ visible: false });
58
+
59
+ /** 缓存值展示格式。 */
60
+ type CacheValueKind = "text" | "json" | "rich-text";
61
+
62
+ /** 缓存值解析结果。 */
63
+ interface CacheValuePresentation {
64
+ /** 值的展示格式。 */
65
+ kind: CacheValueKind;
66
+ /** 值的展示文本。 */
67
+ value: string;
68
+ }
69
+
70
+ /** 缓存值内容组件,按值的格式选择安全富文本或代码块展示。 */
71
+ const CacheValueContent = defineComponent({
72
+ name: "CacheValueContent",
73
+ props: {
74
+ value: { type: String, default: "" }
75
+ },
76
+ setup(props) {
77
+ return () => {
78
+ const presentation = getCacheValuePresentation(props.value);
79
+ if (presentation.kind === "rich-text") {
80
+ return h(RichTextPreview, { class: "cache-rich-text", modelValue: props.value });
81
+ }
82
+
83
+ return h(
84
+ "pre",
85
+ { class: ["cache-value", { "cache-value--plain": presentation.kind === "text" }] },
86
+ presentation.value || "-"
87
+ );
88
+ };
89
+ }
90
+ });
91
+
92
+ const columns = computed<ColumnProps[]>(() => [
93
+ {
94
+ prop: "key",
95
+ label: t("system.cache.field.key"),
96
+ minWidth: 280,
97
+ search: { el: "input", props: { clearable: true } },
98
+ render: scope => h("code", { class: "cache-key-cell", title: scope.row.key }, scope.row.key)
99
+ },
100
+ {
101
+ prop: "type",
102
+ label: t("system.cache.field.type"),
103
+ width: 100,
104
+ render: scope => h(ElTag, { size: "small", effect: "plain" }, () => cacheTypeLabel(scope.row.type))
105
+ },
106
+ {
107
+ prop: "value",
108
+ label: t("system.cache.field.value"),
109
+ minWidth: 260,
110
+ showOverflowTooltip: false,
111
+ render: scope => renderCachePreview(scope.row as CacheEntry)
112
+ },
113
+ {
114
+ prop: "ttl_seconds",
115
+ label: t("system.cache.field.ttl"),
116
+ width: 130,
117
+ render: scope => formatTtl((scope.row as CacheEntry).ttl_seconds)
118
+ },
119
+ {
120
+ prop: "expires_at",
121
+ label: t("system.cache.field.expires_at"),
122
+ minWidth: 185,
123
+ render: scope => formatDate(scope.row.expires_at)
124
+ },
125
+ {
126
+ prop: "created_at",
127
+ label: t("system.cache.field.created_at"),
128
+ minWidth: 185,
129
+ render: scope => formatDate(scope.row.created_at)
130
+ },
131
+ {
132
+ prop: "updated_at",
133
+ label: t("system.cache.field.updated_at"),
134
+ minWidth: 185,
135
+ render: scope => formatDate(scope.row.updated_at)
136
+ },
137
+ {
138
+ prop: "operation",
139
+ label: t("common.field.operation"),
140
+ width: 90,
141
+ fixed: "right",
142
+ cellType: "actions",
143
+ actions: [
144
+ {
145
+ label: t("common.action.view"),
146
+ type: "primary",
147
+ link: true,
148
+ icon: View,
149
+ onClick: scope => openDetail(scope.row as CacheEntry)
150
+ }
151
+ ]
152
+ }
153
+ ]);
154
+
155
+ /** 请求缓存分页列表。 */
156
+ async function requestCacheTable(params: PageCacheRequest) {
157
+ const response = await defCacheService.PageCache(buildPageRequest(params));
158
+ return { data: { list: response.cache_entries ?? [], total: response.total } };
159
+ }
160
+
161
+ /** 打开缓存条目详情。 */
162
+ function openDetail(entry: CacheEntry) {
163
+ detail.entry = entry;
164
+ detail.visible = true;
165
+ }
166
+
167
+ /** 渲染列表中的缓存值摘要,避免长文本撑开表格或触发整段浮层。 */
168
+ function renderCachePreview(entry: CacheEntry) {
169
+ if (entry.type === "hash") {
170
+ return h(
171
+ "div",
172
+ { class: "cache-preview" },
173
+ h("span", { class: "cache-preview-text" }, t("system.cache.value.hash_fields", { count: entry.fields?.length ?? 0 }))
174
+ );
175
+ }
176
+
177
+ const presentation = getCacheValuePresentation(entry.value);
178
+ return h("div", { class: "cache-preview" }, [
179
+ h(ElTag, { size: "small", effect: "plain", type: "info" }, () => cacheValueKindLabel(entry.value)),
180
+ h("span", { class: "cache-preview-text" }, summarizeCacheValue(presentation.value, presentation.kind))
181
+ ]);
182
+ }
183
+
184
+ /** 获取缓存类型的本地化名称。 */
185
+ function cacheTypeLabel(type: string) {
186
+ return type === "hash" ? t("system.cache.type.hash") : t("system.cache.type.string");
187
+ }
188
+
189
+ /** 获取缓存值格式的本地化名称。 */
190
+ function cacheValueKindLabel(value: string) {
191
+ const { kind } = getCacheValuePresentation(value);
192
+ return t(`system.cache.value.kind.${kind}`);
193
+ }
194
+
195
+ /** 解析缓存值,优先识别对象/数组 JSON,再识别 HTML 富文本。 */
196
+ function getCacheValuePresentation(value: string): CacheValuePresentation {
197
+ const normalizedValue = value ?? "";
198
+ try {
199
+ const parsedValue: unknown = JSON.parse(normalizedValue);
200
+ if (parsedValue !== null && typeof parsedValue === "object") {
201
+ return { kind: "json", value: JSON.stringify(parsedValue, null, 2) };
202
+ }
203
+ } catch {
204
+ // 普通文本和富文本不是 JSON,继续按内容特征识别。
205
+ }
206
+
207
+ if (isRichTextValue(normalizedValue)) return { kind: "rich-text", value: normalizedValue };
208
+ return { kind: "text", value: normalizedValue };
209
+ }
210
+
211
+ /** 判断字符串是否包含可渲染的 HTML 元素。 */
212
+ function isRichTextValue(value: string) {
213
+ if (!/<[a-z][^>]*>/i.test(value)) return false;
214
+ if (typeof DOMParser === "undefined") return /<\/[a-z][^>]*>/i.test(value);
215
+ const document = new DOMParser().parseFromString(value, "text/html");
216
+ return document.body.children.length > 0;
217
+ }
218
+
219
+ /** 将值压缩为适合列表单元格的单行摘要。 */
220
+ function summarizeCacheValue(value: string, kind: CacheValueKind, maxLength = 120) {
221
+ let summarySource = value;
222
+ if (kind === "rich-text") {
223
+ const document = typeof DOMParser === "undefined" ? undefined : new DOMParser().parseFromString(value, "text/html");
224
+ summarySource = document?.body.textContent ?? value.replace(/<[^>]+>/g, " ");
225
+ }
226
+ const summary = summarySource.replace(/\s+/g, " ").trim();
227
+ if (!summary) return "-";
228
+ return summary.length > maxLength ? `${summary.slice(0, maxLength)}...` : summary;
229
+ }
230
+
231
+ /** 格式化缓存剩余有效期。 */
232
+ function formatTtl(ttl: number) {
233
+ if (ttl < 0) return t("system.cache.value.persistent");
234
+ if (ttl === 0) return t("system.cache.value.expiring");
235
+ if (ttl < 60) return `${ttl}s`;
236
+ if (ttl < 3600) return `${Math.floor(ttl / 60)}m ${ttl % 60}s`;
237
+ return `${Math.floor(ttl / 3600)}h ${Math.floor((ttl % 3600) / 60)}m`;
238
+ }
239
+
240
+ /** 格式化时间字段。 */
241
+ function formatDate(value: string) {
242
+ if (!value) return "-";
243
+ const date = new Date(value);
244
+ return Number.isNaN(date.getTime()) ? value : date.toLocaleString();
245
+ }
246
+ </script>
247
+
248
+ <style lang="scss" scoped>
249
+ .cache-page {
250
+ padding: 16px;
251
+ }
252
+ :deep(.cache-preview) {
253
+ display: flex;
254
+ gap: 8px;
255
+ align-items: center;
256
+ min-width: 0;
257
+ overflow: hidden;
258
+ white-space: nowrap;
259
+ }
260
+ :deep(.cache-preview-text) {
261
+ display: block;
262
+ flex: 1 1 auto;
263
+ min-width: 0;
264
+ overflow: hidden;
265
+ text-overflow: ellipsis;
266
+ color: var(--admin-page-text-secondary);
267
+ white-space: nowrap;
268
+ }
269
+ .cache-key-cell {
270
+ display: block;
271
+ overflow: hidden;
272
+ text-overflow: ellipsis;
273
+ white-space: nowrap;
274
+ }
275
+ .cache-detail-meta {
276
+ display: flex;
277
+ gap: 10px;
278
+ align-items: center;
279
+ margin-bottom: 16px;
280
+ }
281
+ .cache-detail-key {
282
+ flex: 1;
283
+ overflow: hidden;
284
+ text-overflow: ellipsis;
285
+ font-family: var(--el-font-family-monospace);
286
+ color: var(--admin-page-text-primary);
287
+ white-space: nowrap;
288
+ }
289
+ .cache-detail-ttl {
290
+ font-size: 13px;
291
+ color: var(--el-text-color-secondary);
292
+ }
293
+ .cache-fields {
294
+ max-height: 62vh;
295
+ padding-right: 4px;
296
+ overflow: auto;
297
+ }
298
+ .cache-field,
299
+ .cache-string-value {
300
+ padding: 14px;
301
+ background: var(--admin-page-card-bg-soft);
302
+ border: 1px solid var(--admin-page-card-border-soft);
303
+ border-radius: var(--admin-page-radius);
304
+ }
305
+ .cache-field + .cache-field {
306
+ margin-top: 12px;
307
+ }
308
+ .cache-field-header,
309
+ .cache-value-header {
310
+ display: flex;
311
+ gap: 12px;
312
+ align-items: center;
313
+ justify-content: space-between;
314
+ margin-bottom: 10px;
315
+ }
316
+ .cache-field-key {
317
+ min-width: 0;
318
+ overflow: hidden;
319
+ text-overflow: ellipsis;
320
+ font-family: var(--el-font-family-monospace);
321
+ color: var(--admin-page-text-primary);
322
+ white-space: nowrap;
323
+ }
324
+ .cache-value-header {
325
+ font-size: 13px;
326
+ color: var(--admin-page-text-secondary);
327
+ }
328
+ .cache-value {
329
+ max-height: 460px;
330
+ padding: 14px;
331
+ margin: 0;
332
+ overflow: auto;
333
+ font-family: var(--el-font-family-monospace);
334
+ font-size: 13px;
335
+ line-height: 1.55;
336
+ color: var(--el-text-color-primary);
337
+ overflow-wrap: anywhere;
338
+ white-space: pre-wrap;
339
+ background: var(--el-fill-color-lighter);
340
+ border: 1px solid var(--el-border-color-light);
341
+ border-radius: var(--admin-page-radius);
342
+ }
343
+ .cache-value--plain {
344
+ font-family: inherit;
345
+ font-size: 14px;
346
+ }
347
+ .cache-rich-text {
348
+ max-height: 460px;
349
+ padding: 2px 4px;
350
+ overflow: auto;
351
+ }
352
+ </style>