@liujitcn/kratos-admin-system 0.0.28 → 0.0.31

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 (135) hide show
  1. package/README.md +19 -2
  2. package/dist/package/declarations/src/api/base/notification.d.ts +24 -0
  3. package/dist/package/declarations/src/api/system/base_audit_log.d.ts +55 -0
  4. package/dist/package/declarations/src/api/system/base_dashboard.d.ts +14 -0
  5. package/dist/package/declarations/src/api/system/base_file.d.ts +13 -0
  6. package/dist/package/declarations/src/api/system/base_i18n.d.ts +5 -5
  7. package/dist/package/declarations/src/api/system/base_login_policy.d.ts +10 -0
  8. package/dist/package/declarations/src/api/system/base_message.d.ts +24 -0
  9. package/dist/package/declarations/src/api/system/base_message_category.d.ts +21 -0
  10. package/dist/package/declarations/src/api/system/base_session.d.ts +11 -0
  11. package/dist/package/declarations/src/api/system/oauth_client.d.ts +24 -0
  12. package/dist/package/declarations/src/components/AuditLogTable.vue.d.ts +45 -0
  13. package/dist/package/declarations/src/components/DynamicI18nCell.vue.d.ts +16 -0
  14. package/dist/package/declarations/src/components/DynamicI18nEditor.vue.d.ts +20 -0
  15. package/dist/package/declarations/src/components/auditLog.d.ts +9 -0
  16. package/dist/package/declarations/src/components/dynamicI18n.d.ts +38 -0
  17. package/dist/package/declarations/src/locales/generated.d.ts +1364 -68
  18. package/dist/package/declarations/src/rpc/base/v1/login.d.ts +149 -0
  19. package/dist/package/declarations/src/rpc/base/v1/notification.d.ts +281 -0
  20. package/dist/package/declarations/src/rpc/base/v1/oauth.d.ts +25 -0
  21. package/dist/package/declarations/src/rpc/base/v1/oauth_client.d.ts +23 -0
  22. package/dist/package/declarations/src/rpc/system/admin/v1/base_audit_log.d.ts +640 -0
  23. package/dist/package/declarations/src/rpc/system/admin/v1/base_config.d.ts +3 -3
  24. package/dist/package/declarations/src/rpc/system/admin/v1/base_dashboard.d.ts +60 -0
  25. package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +4 -4
  26. package/dist/package/declarations/src/rpc/system/admin/v1/base_file.d.ts +73 -0
  27. package/dist/package/declarations/src/rpc/system/admin/v1/base_i18n.d.ts +27 -23
  28. package/dist/package/declarations/src/rpc/system/admin/v1/base_job.d.ts +5 -0
  29. package/dist/package/declarations/src/rpc/system/admin/v1/base_login_policy.d.ts +51 -0
  30. package/dist/package/declarations/src/rpc/system/admin/v1/base_menu.d.ts +2 -2
  31. package/dist/package/declarations/src/rpc/system/admin/v1/base_message.d.ts +193 -0
  32. package/dist/package/declarations/src/rpc/system/admin/v1/base_message_category.d.ts +125 -0
  33. package/dist/package/declarations/src/rpc/system/admin/v1/base_session.d.ts +33 -0
  34. package/dist/package/declarations/src/rpc/system/admin/v1/base_user.d.ts +3 -3
  35. package/dist/package/declarations/src/rpc/system/admin/v1/code_gen.d.ts +1 -1
  36. package/dist/package/declarations/src/rpc/system/admin/v1/oauth_client.d.ts +145 -0
  37. package/dist/package/declarations/src/views/base/api-log/index.vue.d.ts +3 -0
  38. package/dist/package/declarations/src/views/base/dashboard/index.vue.d.ts +3 -0
  39. package/dist/package/declarations/src/views/base/data-access-log/index.vue.d.ts +3 -0
  40. package/dist/package/declarations/src/views/base/file/index.vue.d.ts +3 -0
  41. package/dist/package/declarations/src/views/base/login-log/index.vue.d.ts +3 -0
  42. package/dist/package/declarations/src/views/base/login-policy/index.vue.d.ts +3 -0
  43. package/dist/package/declarations/src/views/base/message/index.vue.d.ts +3 -0
  44. package/dist/package/declarations/src/views/base/message-category/index.vue.d.ts +3 -0
  45. package/dist/package/declarations/src/views/base/oauth-client/index.vue.d.ts +3 -0
  46. package/dist/package/declarations/src/views/base/operation-log/index.vue.d.ts +3 -0
  47. package/dist/package/declarations/src/views/base/permission-log/index.vue.d.ts +3 -0
  48. package/dist/package/declarations/src/views/base/policy-evaluation-log/index.vue.d.ts +3 -0
  49. package/dist/package/declarations/src/views/message/inbox/index.vue.d.ts +3 -0
  50. package/dist/package/declarations/src/views/profile/components/session.vue.d.ts +3 -0
  51. package/dist/package/src/api/base/notification.ts +69 -0
  52. package/dist/package/src/api/base/sse.ts +4 -4
  53. package/dist/package/src/api/system/auth.ts +1 -0
  54. package/dist/package/src/api/system/base_audit_log.ts +168 -0
  55. package/dist/package/src/api/system/base_dashboard.ts +55 -0
  56. package/dist/package/src/api/system/base_file.ts +43 -0
  57. package/dist/package/src/api/system/base_i18n.ts +12 -12
  58. package/dist/package/src/api/system/base_login_policy.ts +32 -0
  59. package/dist/package/src/api/system/base_message.ts +70 -0
  60. package/dist/package/src/api/system/base_message_category.ts +57 -0
  61. package/dist/package/src/api/system/base_session.ts +33 -0
  62. package/dist/package/src/api/system/oauth_client.ts +102 -0
  63. package/dist/package/src/components/AuditLogTable.vue +105 -0
  64. package/dist/package/src/components/{DynamicTranslationCell.vue → DynamicI18nCell.vue} +50 -50
  65. package/dist/package/src/components/{DynamicTranslationEditor.vue → DynamicI18nEditor.vue} +45 -45
  66. package/dist/package/src/components/Notification.vue +196 -0
  67. package/dist/package/src/components/auditLog.ts +46 -0
  68. package/dist/package/src/components/{dynamicTranslation.ts → dynamicI18n.ts} +15 -15
  69. package/dist/package/src/locales/README.md +5 -3
  70. package/dist/package/src/locales/en-US.json +345 -21
  71. package/dist/package/src/locales/ja-JP.json +347 -23
  72. package/dist/package/src/locales/zh-CN.json +343 -19
  73. package/dist/package/src/locales/zh-TW.json +346 -22
  74. package/dist/package/src/module.ts +5 -2
  75. package/dist/package/src/rpc/base/v1/login.ts +172 -0
  76. package/dist/package/src/rpc/base/v1/notification.ts +315 -0
  77. package/dist/package/src/rpc/base/v1/oauth.ts +25 -0
  78. package/dist/package/src/rpc/base/v1/oauth_client.ts +33 -0
  79. package/dist/package/src/rpc/system/admin/v1/base_audit_log.ts +737 -0
  80. package/dist/package/src/rpc/system/admin/v1/base_config.ts +3 -3
  81. package/dist/package/src/rpc/system/admin/v1/base_dashboard.ts +81 -0
  82. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +4 -4
  83. package/dist/package/src/rpc/system/admin/v1/base_file.ts +88 -0
  84. package/dist/package/src/rpc/system/admin/v1/base_i18n.ts +27 -23
  85. package/dist/package/src/rpc/system/admin/v1/base_job.ts +5 -0
  86. package/dist/package/src/rpc/system/admin/v1/base_login_policy.ts +63 -0
  87. package/dist/package/src/rpc/system/admin/v1/base_menu.ts +2 -2
  88. package/dist/package/src/rpc/system/admin/v1/base_message.ts +236 -0
  89. package/dist/package/src/rpc/system/admin/v1/base_message_category.ts +149 -0
  90. package/dist/package/src/rpc/system/admin/v1/base_session.ts +44 -0
  91. package/dist/package/src/rpc/system/admin/v1/base_user.ts +3 -3
  92. package/dist/package/src/rpc/system/admin/v1/code_gen.ts +1 -1
  93. package/dist/package/src/rpc/system/admin/v1/oauth_client.ts +174 -0
  94. package/dist/package/src/views/ai/chat/components/ChatPanel.vue +2 -2
  95. package/dist/package/src/views/ai/chat/message.ts +7 -3
  96. package/dist/package/src/views/base/api-log/index.vue +83 -0
  97. package/dist/package/src/views/base/config/index.vue +41 -41
  98. package/dist/package/src/views/base/dashboard/index.vue +200 -0
  99. package/dist/package/src/views/base/data-access-log/index.vue +84 -0
  100. package/dist/package/src/views/base/dict/index.vue +23 -23
  101. package/dist/package/src/views/base/dict/item.vue +25 -25
  102. package/dist/package/src/views/base/file/index.vue +119 -0
  103. package/dist/package/src/views/base/job/index.vue +62 -7
  104. package/dist/package/src/views/base/language/index.vue +2 -1
  105. package/dist/package/src/views/base/login-log/index.vue +92 -0
  106. package/dist/package/src/views/base/login-policy/index.vue +219 -0
  107. package/dist/package/src/views/base/menu/index.vue +23 -23
  108. package/dist/package/src/views/base/message/index.vue +582 -0
  109. package/dist/package/src/views/base/message-category/index.vue +356 -0
  110. package/dist/package/src/views/base/oauth-client/index.vue +411 -0
  111. package/dist/package/src/views/base/operation-log/index.vue +82 -0
  112. package/dist/package/src/views/base/permission-log/index.vue +85 -0
  113. package/dist/package/src/views/base/policy-evaluation-log/index.vue +82 -0
  114. package/dist/package/src/views/message/inbox/index.vue +249 -0
  115. package/dist/package/src/views/profile/components/base.vue +6 -5
  116. package/dist/package/src/views/profile/components/password.vue +2 -2
  117. package/dist/package/src/views/profile/components/security.vue +475 -62
  118. package/dist/package/src/views/profile/components/session.vue +153 -0
  119. package/dist/package/src/views/profile/index.vue +35 -22
  120. package/dist/package/src/views/tool/code-gen/code-preview/index.vue +9 -9
  121. package/dist/package/src/views/tool/code-gen/columns/index.vue +1 -1
  122. package/dist/package/src/views/tool/code-gen/components/CodeGenLocaleEditor.vue +8 -8
  123. package/dist/package/src/views/tool/code-gen/config.ts +1 -0
  124. package/dist/package/src/views/tool/code-gen/table/index.vue +7 -7
  125. package/dist/package/src/views/tool/ops-monitoring/index.vue +25 -21
  126. package/package.json +2 -2
  127. package/dist/package/declarations/src/api/system/base_log.d.ts +0 -9
  128. package/dist/package/declarations/src/components/DynamicTranslationCell.vue.d.ts +0 -16
  129. package/dist/package/declarations/src/components/DynamicTranslationEditor.vue.d.ts +0 -20
  130. package/dist/package/declarations/src/components/dynamicTranslation.d.ts +0 -38
  131. package/dist/package/declarations/src/rpc/system/admin/v1/base_log.d.ts +0 -87
  132. package/dist/package/src/api/system/base_log.ts +0 -32
  133. package/dist/package/src/rpc/system/admin/v1/base_log.ts +0 -101
  134. package/dist/package/src/views/base/log/index.vue +0 -339
  135. /package/dist/package/declarations/src/{views/base/log/index.vue.d.ts → components/Notification.vue.d.ts} +0 -0
@@ -1,87 +0,0 @@
1
- /** 日志分页查询条件 */
2
- export interface PageBaseLogRequest {
3
- /** 请求时间 */
4
- request_time: string[];
5
- /** 操作方法 */
6
- operation: string;
7
- /** 状态码 */
8
- status_code?: number | undefined;
9
- /** 当前页码 */
10
- page_num: number;
11
- /** 每一页的行数 */
12
- page_size: number;
13
- }
14
- /** 日志分页响应 */
15
- export interface PageBaseLogResponse {
16
- /** 分页数据 */
17
- base_logs: BaseLog[];
18
- /** 总数 */
19
- total: number;
20
- }
21
- /** 查询日志请求参数 */
22
- export interface GetBaseLogRequest {
23
- /** 日志ID */
24
- id: number;
25
- }
26
- /** 日志 */
27
- export interface BaseLog {
28
- /** 日志ID */
29
- id: number;
30
- /** 请求ID */
31
- request_id: string;
32
- /** 请求时间 */
33
- request_time: string;
34
- /** 请求方法 */
35
- method: string;
36
- /** 操作方法 */
37
- operation: string;
38
- /** 请求路径 */
39
- path: string;
40
- /** 请求源 */
41
- referer: string;
42
- /** 请求URI */
43
- request_uri: string;
44
- /** 请求体 */
45
- request_body: string;
46
- /** 请求头 */
47
- request_header: string;
48
- /** 响应信息 */
49
- response: string;
50
- /** 操作耗时 */
51
- cost_time: string;
52
- /** 操作是否成功 */
53
- is_success: boolean;
54
- /** 状态码 */
55
- status_code: number;
56
- /** 操作失败原因 */
57
- reason: string;
58
- /** 操作地理位置 */
59
- location: string;
60
- /** 操作者用户ID */
61
- user_id: number;
62
- /** 操作者账号名 */
63
- user_name: string;
64
- /** 操作者IP */
65
- client_ip: string;
66
- /** 浏览器的用户代理信息 */
67
- user_agent: string;
68
- /** 浏览器名称 */
69
- browser_name: string;
70
- /** 浏览器版本 */
71
- browser_version: string;
72
- /** 客户端ID */
73
- client_id: string;
74
- /** 客户端名称 */
75
- client_name: string;
76
- /** 操作系统名称 */
77
- os_name: string;
78
- /** 操作系统版本 */
79
- os_version: string;
80
- }
81
- /** Admin日志服务 */
82
- export interface BaseLogService {
83
- /** 查询日志分页列表 */
84
- PageBaseLog(request: PageBaseLogRequest): Promise<PageBaseLogResponse>;
85
- /** 查询日志 */
86
- GetBaseLog(request: GetBaseLogRequest): Promise<BaseLog>;
87
- }
@@ -1,32 +0,0 @@
1
- import service from "@liujitcn/kratos-admin-core/request";
2
- import {
3
- type BaseLog,
4
- type BaseLogService,
5
- type GetBaseLogRequest,
6
- type PageBaseLogRequest,
7
- type PageBaseLogResponse
8
- } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_log";
9
-
10
- const BASE_LOG_URL = "/v1/admin/base/log";
11
-
12
- /** Admin系统日志服务 */
13
- export class BaseLogServiceImpl implements BaseLogService {
14
- /** 查询系统日志分页列表 */
15
- PageBaseLog(request: PageBaseLogRequest): Promise<PageBaseLogResponse> {
16
- return service<PageBaseLogRequest, PageBaseLogResponse>({
17
- url: `${BASE_LOG_URL}`,
18
- method: "get",
19
- params: request
20
- });
21
- }
22
-
23
- /** 查询系统日志 */
24
- GetBaseLog(request: GetBaseLogRequest): Promise<BaseLog> {
25
- return service<GetBaseLogRequest, BaseLog>({
26
- url: `${BASE_LOG_URL}/${request.id}`,
27
- method: "get"
28
- });
29
- }
30
- }
31
-
32
- export const defBaseLogService = new BaseLogServiceImpl();
@@ -1,101 +0,0 @@
1
- // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
2
- // versions:
3
- // protoc-gen-ts_proto v2.11.8
4
- // protoc unknown
5
- // source: system/admin/v1/base_log.proto
6
-
7
- /* eslint-disable */
8
-
9
- /** 日志分页查询条件 */
10
- export interface PageBaseLogRequest {
11
- /** 请求时间 */
12
- request_time: string[];
13
- /** 操作方法 */
14
- operation: string;
15
- /** 状态码 */
16
- status_code?:
17
- | number
18
- | undefined;
19
- /** 当前页码 */
20
- page_num: number;
21
- /** 每一页的行数 */
22
- page_size: number;
23
- }
24
-
25
- /** 日志分页响应 */
26
- export interface PageBaseLogResponse {
27
- /** 分页数据 */
28
- base_logs: BaseLog[];
29
- /** 总数 */
30
- total: number;
31
- }
32
-
33
- /** 查询日志请求参数 */
34
- export interface GetBaseLogRequest {
35
- /** 日志ID */
36
- id: number;
37
- }
38
-
39
- /** 日志 */
40
- export interface BaseLog {
41
- /** 日志ID */
42
- id: number;
43
- /** 请求ID */
44
- request_id: string;
45
- /** 请求时间 */
46
- request_time: string;
47
- /** 请求方法 */
48
- method: string;
49
- /** 操作方法 */
50
- operation: string;
51
- /** 请求路径 */
52
- path: string;
53
- /** 请求源 */
54
- referer: string;
55
- /** 请求URI */
56
- request_uri: string;
57
- /** 请求体 */
58
- request_body: string;
59
- /** 请求头 */
60
- request_header: string;
61
- /** 响应信息 */
62
- response: string;
63
- /** 操作耗时 */
64
- cost_time: string;
65
- /** 操作是否成功 */
66
- is_success: boolean;
67
- /** 状态码 */
68
- status_code: number;
69
- /** 操作失败原因 */
70
- reason: string;
71
- /** 操作地理位置 */
72
- location: string;
73
- /** 操作者用户ID */
74
- user_id: number;
75
- /** 操作者账号名 */
76
- user_name: string;
77
- /** 操作者IP */
78
- client_ip: string;
79
- /** 浏览器的用户代理信息 */
80
- user_agent: string;
81
- /** 浏览器名称 */
82
- browser_name: string;
83
- /** 浏览器版本 */
84
- browser_version: string;
85
- /** 客户端ID */
86
- client_id: string;
87
- /** 客户端名称 */
88
- client_name: string;
89
- /** 操作系统名称 */
90
- os_name: string;
91
- /** 操作系统版本 */
92
- os_version: string;
93
- }
94
-
95
- /** Admin日志服务 */
96
- export interface BaseLogService {
97
- /** 查询日志分页列表 */
98
- PageBaseLog(request: PageBaseLogRequest): Promise<PageBaseLogResponse>;
99
- /** 查询日志 */
100
- GetBaseLog(request: GetBaseLogRequest): Promise<BaseLog>;
101
- }
@@ -1,339 +0,0 @@
1
- <template>
2
- <div class="table-box">
3
- <ProTable ref="proTable" row-key="id" :columns="columns" :request-api="requestBaseLogTable" />
4
-
5
- <ProDialog v-model="dialog.visible" :title="t('system.base.log.title.detail')" width="1500px" @close="handleCloseDialog">
6
- <div class="detail-container">
7
- <el-descriptions :title="t('system.base.log.section.basic')" border :column="2">
8
- <el-descriptions-item :label="t('system.base.log.field.result')">
9
- <el-tag :type="detail.is_success ? 'success' : 'danger'" effect="light">
10
- {{ t(detail.is_success ? "system.base.log.status.success" : "system.base.log.status.failed") }}
11
- </el-tag>
12
- </el-descriptions-item>
13
- <el-descriptions-item :label="t('system.base.log.field.status_code')">
14
- <el-tag :type="statusCodeColor" effect="light">{{ detail.status_code || "--" }}</el-tag>
15
- </el-descriptions-item>
16
- <el-descriptions-item :label="t('system.base.log.field.cost_time')">{{ detail.cost_time || "--" }}</el-descriptions-item>
17
- <el-descriptions-item :label="t('system.base.log.field.request_time')">{{
18
- detail.request_time || "--"
19
- }}</el-descriptions-item>
20
- </el-descriptions>
21
-
22
- <el-descriptions
23
- :title="t('system.base.log.section.request')"
24
- border
25
- :column="2"
26
- direction="vertical"
27
- class="mt-4 compact-descriptions"
28
- >
29
- <el-descriptions-item :label="t('system.base.log.field.request_id')">{{ detail.request_id || "--" }}</el-descriptions-item>
30
- <el-descriptions-item :label="t('system.base.log.field.operation')">
31
- <el-tag effect="plain">{{ detail.operation || "--" }}</el-tag>
32
- </el-descriptions-item>
33
- <el-descriptions-item :label="t('system.base.log.field.method')">
34
- <el-tag effect="plain">{{ detail.method || "--" }}</el-tag>
35
- </el-descriptions-item>
36
- <el-descriptions-item :label="t('system.base.log.field.path')">{{ detail.path || "--" }}</el-descriptions-item>
37
- <el-descriptions-item v-if="detail.request_uri" :label="t('system.base.log.field.request_uri')" :span="2">{{
38
- detail.request_uri
39
- }}</el-descriptions-item>
40
- <el-descriptions-item v-if="detail.referer" :label="t('system.base.log.field.referer')" :span="2">{{
41
- detail.referer
42
- }}</el-descriptions-item>
43
- <el-descriptions-item :label="t('system.base.log.field.request_header')" :span="2">
44
- <pre class="code-block">{{ formatPayload(detail.request_header) }}</pre>
45
- </el-descriptions-item>
46
- <el-descriptions-item :label="t('system.base.log.field.request_body')" :span="2">
47
- <pre class="code-block">{{ formatPayload(detail.request_body) }}</pre>
48
- </el-descriptions-item>
49
- <el-descriptions-item :label="t('system.base.log.field.request_result')" :span="2">
50
- <pre class="code-block">{{ formatPayload(detail.response) }}</pre>
51
- </el-descriptions-item>
52
- </el-descriptions>
53
-
54
- <el-descriptions :title="t('system.base.log.section.user')" border :column="2" class="mt-4">
55
- <el-descriptions-item :label="t('system.base.log.field.user_id')">{{ detail.user_id || "--" }}</el-descriptions-item>
56
- <el-descriptions-item :label="t('system.base.log.field.user_name')">{{ detail.user_name || "--" }}</el-descriptions-item>
57
- <el-descriptions-item :label="t('system.base.log.field.client_ip')">{{ detail.client_ip || "--" }}</el-descriptions-item>
58
- <el-descriptions-item :label="t('system.base.log.field.location')">{{ detail.location || "--" }}</el-descriptions-item>
59
- </el-descriptions>
60
-
61
- <el-descriptions
62
- :title="t('system.base.log.section.client')"
63
- border
64
- :column="2"
65
- direction="vertical"
66
- class="mt-4 compact-descriptions"
67
- >
68
- <el-descriptions-item :label="t('system.base.log.field.browser')">
69
- {{ [detail.browser_name, detail.browser_version].filter(Boolean).join(" ") || "--" }}
70
- </el-descriptions-item>
71
- <el-descriptions-item :label="t('system.base.log.field.os')">
72
- {{ [detail.os_name, detail.os_version].filter(Boolean).join(" ") || "--" }}
73
- </el-descriptions-item>
74
- <el-descriptions-item :label="t('system.base.log.field.client_name')">{{ detail.client_name || "--" }}</el-descriptions-item>
75
- <el-descriptions-item :label="t('system.base.log.field.client_id')">{{ detail.client_id || "--" }}</el-descriptions-item>
76
- <el-descriptions-item label="User Agent" :span="2">{{ detail.user_agent || "--" }}</el-descriptions-item>
77
- </el-descriptions>
78
-
79
- <el-alert
80
- v-if="!detail.is_success"
81
- :title="t('system.base.log.field.reason')"
82
- type="error"
83
- :description="detail.reason"
84
- class="mt-4"
85
- show-icon
86
- />
87
- </div>
88
-
89
- <template #footer>
90
- <el-button @click="handleCloseDialog">{{ t("common.action.close") }}</el-button>
91
- </template>
92
- </ProDialog>
93
- </div>
94
- </template>
95
-
96
- <script setup lang="ts">
97
- import { computed, reactive, ref } from "vue";
98
- import { InfoFilled } from "@element-plus/icons-vue";
99
- import type { ColumnProps, ProTableInstance } from "@liujitcn/kratos-admin-core/components/ProTable/interface";
100
- import ProTable from "@liujitcn/kratos-admin-core/components/ProTable";
101
- import ProDialog from "@liujitcn/kratos-admin-core/components/Dialog/ProDialog.vue";
102
- import { defBaseLogService } from "@liujitcn/kratos-admin-system/api/system/base_log";
103
- import { buildPageRequest } from "@liujitcn/kratos-admin-core/table";
104
- import { formatJson } from "@liujitcn/kratos-admin-core/format";
105
- import type { BaseLog, PageBaseLogRequest } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/base_log";
106
- import { t } from "@liujitcn/kratos-admin-core";
107
-
108
- defineOptions({
109
- name: "BaseLog",
110
- inheritAttrs: false
111
- });
112
-
113
- const proTable = ref<ProTableInstance>();
114
-
115
- const dialog = reactive({
116
- visible: false
117
- });
118
-
119
- /** 状态码颜色计算。 */
120
- const statusCodeColor = computed(() => {
121
- const code = detail.status_code;
122
- if (code >= 200 && code < 300) return "success";
123
- if (code >= 400 && code < 500) return "warning";
124
- if (code >= 500) return "danger";
125
- return "info";
126
- });
127
-
128
- /** 创建默认日志详情,避免多次查看时残留上一条数据。 */
129
- function createDefaultDetail(): BaseLog {
130
- return {
131
- /** 日志ID */
132
- id: 0,
133
- /** 请求ID */
134
- request_id: "",
135
- /** 请求时间 */
136
- request_time: "",
137
- /** 请求方法 */
138
- method: "",
139
- /** 操作方法 */
140
- operation: "",
141
- /** 请求路径 */
142
- path: "",
143
- /** 请求源 */
144
- referer: "",
145
- /** 请求URI */
146
- request_uri: "",
147
- /** 请求头 */
148
- request_header: "",
149
- /** 请求体 */
150
- request_body: "",
151
- /** 响应信息 */
152
- response: "",
153
- /** 操作耗时 */
154
- cost_time: "",
155
- /** 操作是否成功 */
156
- is_success: false,
157
- /** 状态码 */
158
- status_code: 0,
159
- /** 操作失败原因 */
160
- reason: "",
161
- /** 操作地理位置 */
162
- location: "",
163
- /** 操作者用户ID */
164
- user_id: 0,
165
- /** 操作者账号名 */
166
- user_name: "",
167
- /** 操作者IP */
168
- client_ip: "",
169
- /** 浏览器的用户代理信息 */
170
- user_agent: "",
171
- /** 浏览器名称 */
172
- browser_name: "",
173
- /** 浏览器版本 */
174
- browser_version: "",
175
- /** 客户端ID */
176
- client_id: "",
177
- /** 客户端名称 */
178
- client_name: "",
179
- /** 操作系统名称 */
180
- os_name: "",
181
- /** 操作系统版本 */
182
- os_version: ""
183
- };
184
- }
185
-
186
- const detail = reactive<BaseLog>(createDefaultDetail());
187
-
188
- function normalizeBoolean(value: unknown): boolean {
189
- if (typeof value === "boolean") return value;
190
- if (typeof value === "number") return value !== 0;
191
- if (typeof value === "string") {
192
- const normalized = value.trim().toLowerCase();
193
- return normalized === "true" || normalized === "1" || normalized === "success";
194
- }
195
- return false;
196
- }
197
-
198
- function normalizeNumber(value: unknown): number {
199
- if (typeof value === "number") return Number.isFinite(value) ? value : 0;
200
- if (typeof value === "string") {
201
- const parsed = Number(value);
202
- return Number.isFinite(parsed) ? parsed : 0;
203
- }
204
- return 0;
205
- }
206
-
207
- function normalizeDetail(data: BaseLog): BaseLog {
208
- return {
209
- ...data,
210
- is_success: normalizeBoolean((data as BaseLog & { is_success?: unknown }).is_success),
211
- status_code: normalizeNumber(data.status_code)
212
- };
213
- }
214
-
215
- function formatPayload(value: string): string {
216
- return value ? formatJson(value) : "--";
217
- }
218
-
219
- /** 日志表格列配置。 */
220
- const columns = computed<ColumnProps[]>(() => [
221
- {
222
- prop: "operation",
223
- label: t("system.base.log.field.operation"),
224
- minWidth: 240,
225
- search: { el: "input" }
226
- },
227
- {
228
- prop: "status_code",
229
- label: t("system.base.log.field.status_code"),
230
- minWidth: 100,
231
- search: { el: "input-number", props: { min: 0, controlsPosition: "right" } }
232
- },
233
- {
234
- prop: "request_time",
235
- label: t("system.base.log.field.request_time"),
236
- minWidth: 140,
237
- search: {
238
- el: "date-picker",
239
- props: {
240
- type: "daterange",
241
- editable: false,
242
- class: "!w-[240px]",
243
- rangeSeparator: "~",
244
- startPlaceholder: t("common.placeholder.start_date"),
245
- endPlaceholder: t("common.placeholder.end_date"),
246
- valueFormat: "YYYY-MM-DD"
247
- }
248
- }
249
- },
250
- { prop: "user_name", label: t("system.base.log.field.user_name"), minWidth: 80 },
251
- { prop: "client_ip", label: t("system.base.log.field.client_ip"), minWidth: 80 },
252
- { prop: "location", label: t("system.base.log.field.location"), minWidth: 80 },
253
- { prop: "browser_name", label: t("system.base.log.field.browser"), minWidth: 80 },
254
- { prop: "os_name", label: t("system.base.log.field.os"), minWidth: 80 },
255
- { prop: "cost_time", label: t("system.base.log.field.cost_time"), minWidth: 100, align: "right" },
256
- {
257
- prop: "detailAction",
258
- label: t("common.field.action"),
259
- width: 100,
260
- fixed: "right",
261
- cellType: "actions",
262
- actions: [
263
- {
264
- label: t("common.action.view"),
265
- type: "primary",
266
- link: true,
267
- icon: InfoFilled,
268
- onClick: scope => handleOpenDialog((scope.row as BaseLog).id)
269
- }
270
- ]
271
- }
272
- ]);
273
-
274
- /**
275
- * 请求系统日志列表,并通过 buildPageRequest 统一处理分页参数。
276
- */
277
- async function requestBaseLogTable(params: PageBaseLogRequest) {
278
- const data = await defBaseLogService.PageBaseLog(buildPageRequest(params));
279
- return { data: { list: data.base_logs ?? [], total: data.total } };
280
- }
281
-
282
- /**
283
- * 打开系统日志详情弹窗。
284
- */
285
- function handleOpenDialog(logId?: number) {
286
- resetDetail();
287
- dialog.visible = true;
288
- if (!logId) return;
289
-
290
- defBaseLogService.GetBaseLog({ id: logId }).then(data => {
291
- Object.assign(detail, normalizeDetail(data));
292
- });
293
- }
294
-
295
- /**
296
- * 关闭系统日志弹窗。
297
- */
298
- function handleCloseDialog() {
299
- dialog.visible = false;
300
- resetDetail();
301
- }
302
-
303
- /**
304
- * 重置日志详情,避免关闭后保留旧数据。
305
- */
306
- function resetDetail() {
307
- Object.assign(detail, createDefaultDetail());
308
- }
309
- </script>
310
-
311
- <style scoped>
312
- .detail-container {
313
- max-height: 70vh;
314
- padding: 20px;
315
- overflow-y: auto;
316
- background: #ffffff;
317
- border-radius: 4px;
318
- }
319
- .mt-4 {
320
- margin-top: 16px;
321
- }
322
- .code-block {
323
- max-height: 240px;
324
- padding: 12px;
325
- margin: 0;
326
- overflow: auto;
327
- line-height: 1.6;
328
- word-break: break-all;
329
- white-space: pre-wrap;
330
- background: #f5f7fa;
331
- border-radius: 4px;
332
- }
333
- :deep(.compact-descriptions .el-descriptions__label) {
334
- font-weight: 600;
335
- }
336
- :deep(.compact-descriptions .el-descriptions__content) {
337
- vertical-align: top;
338
- }
339
- </style>