zant-admin 1.0.4 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.en.md +414 -25
  2. package/README.md +460 -285
  3. package/bin/cli.js +3 -3
  4. package/bin/generator.js +502 -502
  5. package/bin/prompts.js +158 -158
  6. package/bin/utils.js +133 -133
  7. package/package.json +2 -2
  8. package/public/logo.png +0 -0
  9. package/src/App.vue +16 -16
  10. package/src/api/methods/department.js +36 -0
  11. package/src/api/methods/employee.js +22 -0
  12. package/src/api/methods/logError.js +8 -8
  13. package/src/api/methods/logOperation.js +8 -8
  14. package/src/api/methods/login.js +6 -6
  15. package/src/api/methods/position.js +26 -0
  16. package/src/api/methods/quartz.js +36 -36
  17. package/src/api/methods/region.js +16 -16
  18. package/src/api/methods/sysAccount.js +29 -29
  19. package/src/api/methods/sysDict.js +29 -29
  20. package/src/api/methods/sysDictItem.js +26 -26
  21. package/src/api/methods/sysMenu.js +42 -42
  22. package/src/api/methods/sysRole.js +35 -35
  23. package/src/api/methods/sysUser.js +25 -25
  24. package/src/api/methods/system.js +15 -15
  25. package/src/api/request.js +225 -225
  26. package/src/assets/css/style.css +2 -2
  27. package/src/assets/css/zcui.css +1023 -1023
  28. package/src/assets/imgs/logo.png +0 -0
  29. package/src/assets/imgs/md/console.png +0 -0
  30. package/src/assets/imgs/md/login.png +0 -0
  31. package/src/assets/imgs/md/menu.png +0 -0
  32. package/src/assets/imgs/md/serviceMonitoring.png +0 -0
  33. package/src/assets/imgs/md/statistics.png +0 -0
  34. package/src/components/FormTable.vue +5 -19
  35. package/src/components/IconPicker.vue +351 -351
  36. package/src/components/MainPage.vue +838 -838
  37. package/src/components/details/logErrorDetails.vue +58 -58
  38. package/src/components/details/logOperationDetails.vue +76 -76
  39. package/src/components/edit/QuartzEdit.vue +221 -221
  40. package/src/components/edit/SysAccountEdit.vue +185 -185
  41. package/src/components/edit/SysDictEdit.vue +116 -116
  42. package/src/components/edit/SysDictItemEdit.vue +136 -136
  43. package/src/components/edit/SysRoleEdit.vue +111 -111
  44. package/src/components/edit/organizationalStructure/DepartmentEdit.vue +162 -0
  45. package/src/components/edit/organizationalStructure/EmployeeEdit.vue +295 -0
  46. package/src/components/edit/organizationalStructure/PositionEdit.vue +166 -0
  47. package/src/components/edit/sysMenuEdit.vue +2 -1
  48. package/src/config/index.js +74 -74
  49. package/src/directives/permission.js +49 -49
  50. package/src/main.js +37 -37
  51. package/src/router/index.js +4 -6
  52. package/src/stores/config.js +43 -43
  53. package/src/stores/dict.js +33 -33
  54. package/src/stores/menu.js +81 -81
  55. package/src/stores/user.js +21 -21
  56. package/src/utils/baseEcharts.js +661 -661
  57. package/src/utils/dictTemplate.js +26 -26
  58. package/src/utils/regionUtils.js +173 -173
  59. package/src/utils/useFormCRUD.js +59 -59
  60. package/src/views/baiscstatis/center.vue +474 -474
  61. package/src/views/baiscstatis/iframePage.vue +29 -29
  62. package/src/views/baiscstatis/notFound.vue +192 -192
  63. package/src/views/console.vue +821 -821
  64. package/src/views/demo/button.vue +269 -269
  65. package/src/views/demo/importexport.vue +119 -119
  66. package/src/views/demo/region.vue +322 -322
  67. package/src/views/demo/statistics.vue +214 -214
  68. package/src/views/home.vue +6 -6
  69. package/src/views/login.vue +264 -149
  70. package/src/views/operations/log/logError.vue +78 -78
  71. package/src/views/operations/log/logLogin.vue +66 -66
  72. package/src/views/operations/log/logOperation.vue +103 -103
  73. package/src/views/operations/log/logQuartz.vue +56 -56
  74. package/src/views/operations/quartz.vue +179 -179
  75. package/src/views/operations/serviceMonitoring.vue +134 -134
  76. package/src/views/organizationalStructure/department.vue +194 -0
  77. package/src/views/organizationalStructure/employee.vue +234 -0
  78. package/src/views/organizationalStructure/position.vue +196 -0
  79. package/src/views/system/sysAccount.vue +128 -128
  80. package/src/views/system/sysDict.vue +159 -159
  81. package/src/views/system/sysDictItem.vue +118 -118
  82. package/src/views/system/sysMenu.vue +225 -225
  83. package/src/views/system/sysRole.vue +207 -207
  84. package/src/assets/imgs/md/1.png +0 -0
  85. package/src/assets/imgs/md/10.png +0 -0
  86. package/src/assets/imgs/md/11.png +0 -0
  87. package/src/assets/imgs/md/2.png +0 -0
  88. package/src/assets/imgs/md/3.png +0 -0
  89. package/src/assets/imgs/md/4.png +0 -0
  90. package/src/assets/imgs/md/5.png +0 -0
  91. package/src/assets/imgs/md/6.png +0 -0
  92. package/src/assets/imgs/md/7.png +0 -0
  93. package/src/assets/imgs/md/8.png +0 -0
  94. package/src/assets/imgs/md/9.png +0 -0
@@ -1,144 +1,141 @@
1
1
  <template>
2
2
  <div class="app">
3
- <div class="demo-login">
4
- <div class="tel flex-row">
5
- <img src="@/assets/imgs/logo.png" alt="" width="50px" />ZAntAdmin
3
+ <div class="app-flex-row">
4
+ <div class="app-flex-row-left">
5
+ <div class="logo-wrapper">
6
+ <img src="@/assets/imgs/logo.png" alt="Logo" class="logo-img" />
7
+ <span class="logo-text">Zant Admin</span>
8
+ </div>
9
+ <div class="description">
10
+ <h2>
11
+ <span class="text-white">构建现代化的</span><br />
12
+ <span class="text-gradient">全栈管理系统</span>
13
+ </h2>
14
+ <p>基于 Vue 3.5 + Ant Design Vue 的现代化前端开发框架</p>
15
+ <p>提供开箱即用的高质量组件,助您快速构建专业应用</p>
16
+ </div>
6
17
  </div>
7
- <a-tabs v-model:activeKey="activeKey" centered tabBarGutter="10">
8
- <a-tab-pane key="1" tab="密码登录">
9
- <a-form
10
- :model="formState"
11
- name="normal_login"
12
- class="login-form"
13
- @finish="onFinish"
14
- @finishFailed="onFinishFailed"
15
- >
16
- <a-form-item
17
- name="mobile"
18
- :rules="[{ required: true, message: '手机号码不能为空!' }]"
19
- >
20
- <a-input
21
- v-model:value="formState.mobile"
22
- placeholder="请输入手机号码"
23
- size="large"
24
- >
25
- <template #prefix>
26
- <MobileOutlined class="site-form-item-icon" />
27
- </template>
28
- </a-input>
29
- </a-form-item>
30
- <a-form-item
31
- name="password"
32
- :rules="[{ required: true, message: '密码不能为空!' }]"
33
- >
34
- <a-input-password
35
- v-model:value="formState.password"
36
- placeholder="请输入密码"
37
- size="large"
38
- >
39
- <template #prefix>
40
- <LockOutlined class="site-form-item-icon" />
41
- </template>
42
- </a-input-password>
43
- </a-form-item>
44
- <a-form-item>
45
- <a-form-item name="remember" no-style>
46
- <a-checkbox v-model:checked="formState.remember"
47
- >自动登录</a-checkbox
48
- >
49
- </a-form-item>
50
- <a class="login-form-forgot" href="">忘记密码</a>
51
- </a-form-item>
52
-
53
- <a-form-item>
54
- <a-button
55
- :disabled="disabled"
56
- type="primary"
57
- :loading="loading"
58
- html-type="submit"
59
- size="large"
60
- class="login-form-button"
61
- >
62
- 登录
63
- </a-button>
64
- </a-form-item>
65
- </a-form>
66
- </a-tab-pane>
67
- <a-tab-pane key="2" tab="验证码登录" force-render>
68
- <a-form
69
- :model="formState"
70
- name="normal_login"
71
- class="login-form"
72
- @finish="onFinish"
73
- @finishFailed="onFinishFailed"
74
- >
75
- <a-form-item
76
- name="mobile"
77
- :rules="[{ required: true, message: '手机号码不能为空!' }]"
78
- >
79
- <a-input
80
- v-model:value="formState.mobile"
81
- placeholder="请输入手机号码"
82
- size="large"
83
- >
84
- <template #prefix>
85
- <MobileOutlined class="site-form-item-icon" />
86
- </template>
87
- </a-input>
88
- </a-form-item>
89
- <a-row :gutter="16">
90
- <a-col :span="16">
91
- <a-form-item
92
- name="mobile"
93
- :rules="[{ required: true, message: '验证码不能为空!' }]"
94
- >
95
- <a-input
96
- v-model:value="formState.vercode"
97
- placeholder="请输入验证码"
98
- size="large"
99
- >
18
+ <div class="app-flex-row-right">
19
+ <div class="demo-login">
20
+ <div class="tel">
21
+ 欢迎使用
22
+ </div>
23
+ <a-tabs v-model:activeKey="activeKey" tabBarGutter="10">
24
+ <a-tab-pane key="1" tab="账号密码登录">
25
+ <a-form :model="formState" name="normal_login" class="login-form" @finish="onFinish"
26
+ @finishFailed="onFinishFailed">
27
+ <a-form-item name="mobile" :rules="[{ required: true, message: '手机号码不能为空!' }]">
28
+ <a-input v-model:value="formState.mobile" placeholder="请输入手机号码" size="large">
29
+ <template #prefix>
30
+ <MobileOutlined class="site-form-item-icon" />
31
+ </template>
32
+ </a-input>
33
+ </a-form-item>
34
+ <a-form-item name="password" :rules="[{ required: true, message: '密码不能为空!' }]">
35
+ <a-input-password v-model:value="formState.password" placeholder="请输入密码" size="large">
100
36
  <template #prefix>
101
37
  <LockOutlined class="site-form-item-icon" />
102
38
  </template>
39
+ </a-input-password>
40
+ </a-form-item>
41
+ <a-form-item>
42
+ <a-form-item name="remember" no-style>
43
+ <a-checkbox v-model:checked="formState.remember">自动登录</a-checkbox>
44
+ </a-form-item>
45
+ <a class="login-form-forgot" href="">忘记密码</a>
46
+ </a-form-item>
47
+
48
+ <a-form-item>
49
+ <a-button :disabled="disabled" type="primary" :loading="loading" html-type="submit" size="large"
50
+ class="login-form-button">
51
+ 登录
52
+ </a-button>
53
+ </a-form-item>
54
+ </a-form>
55
+ </a-tab-pane>
56
+ <a-tab-pane key="2" tab="手机号登录" force-render>
57
+ <a-form :model="formState" name="normal_login" class="login-form" @finish="onFinish"
58
+ @finishFailed="onFinishFailed">
59
+ <a-form-item name="mobile" :rules="[{ required: true, message: '手机号码不能为空!' }]">
60
+ <a-input v-model:value="formState.mobile" placeholder="请输入手机号码" size="large">
61
+ <template #prefix>
62
+ <MobileOutlined class="site-form-item-icon" />
63
+ </template>
103
64
  </a-input>
104
65
  </a-form-item>
105
- </a-col>
106
- <a-col :span="8">
107
- <a-button
108
- size="large"
109
- class="login-form-button"
110
- @click="sendSmsCode"
111
- :disabled="smsdisabled"
112
- >
113
- {{ smstext }}
114
- </a-button>
115
- </a-col>
116
- </a-row>
117
- <a-form-item>
118
- <a-form-item name="remember" no-style>
119
- <a-checkbox v-model:checked="formState.remember"
120
- >自动登录</a-checkbox
66
+ <a-row :gutter="16">
67
+ <a-col :span="16">
68
+ <a-form-item name="mobile" :rules="[{ required: true, message: '验证码不能为空!' }]">
69
+ <a-input v-model:value="formState.vercode" placeholder="请输入验证码" size="large">
70
+ <template #prefix>
71
+ <LockOutlined class="site-form-item-icon" />
72
+ </template>
73
+ </a-input>
74
+ </a-form-item>
75
+ </a-col>
76
+ <a-col :span="8">
77
+ <a-button size="large" class="login-form-button" @click="sendSmsCode" :disabled="smsdisabled">
78
+ {{ smstext }}
79
+ </a-button>
80
+ </a-col>
81
+ </a-row>
82
+ <a-form-item>
83
+ <a-form-item name="remember" no-style>
84
+ <a-checkbox v-model:checked="formState.remember">自动登录</a-checkbox>
85
+ </a-form-item>
86
+ <a class="login-form-forgot" href="">忘记密码</a>
87
+ </a-form-item>
88
+
89
+ <a-form-item>
90
+ <a-button :disabled="disabled" type="primary" :loading="loading" html-type="submit" size="large"
91
+ class="login-form-button">
92
+ 登录
93
+ </a-button>
94
+ </a-form-item>
95
+ </a-form>
96
+
97
+ </a-tab-pane>
98
+ </a-tabs>
99
+ <a-alert
100
+ type="info"
101
+ show-icon
102
+ style="margin-bottom: 16px"
121
103
  >
122
- </a-form-item>
123
- <a class="login-form-forgot" href="">忘记密码</a>
124
- </a-form-item>
125
- <a-form-item>
126
- <a-button
127
- :disabled="disabled"
128
- type="primary"
129
- :loading="loading"
130
- html-type="submit"
131
- size="large"
132
- class="login-form-button"
133
- >
134
- 登录
135
- </a-button>
136
- </a-form-item>
137
- </a-form>
138
- </a-tab-pane>
139
- </a-tabs>
104
+ <template #message>
105
+ 测试账号:<b>admin</b> &nbsp;&nbsp;密码:<b>123456</b>
106
+ </template>
107
+ </a-alert>
108
+ <a-divider>其他登录方式</a-divider>
109
+ <div class="text-align-center">
110
+ <a-space size="large">
111
+ <a href="" target="_blank">
112
+ <WechatOutlined style="font-size: 24px; color: #4dbf00;" />
113
+ </a>
114
+
115
+ <a href="" target="_blank">
116
+ <QqOutlined style="font-size: 24px; color: #0099ff;" />
117
+ </a>
118
+
119
+ <a href="" target="_blank">
120
+ <AlipayCircleOutlined style="font-size: 24px; color:#0099ff;" />
121
+ </a>
122
+
123
+ <a href="" target="_blank">
124
+ <TaobaoCircleOutlined style="font-size: 24px; color: #ff6600;" />
125
+ </a>
126
+ <a href="" target="_blank">
127
+ <GithubOutlined style="font-size: 24px; color: #000;" />
128
+ </a>
129
+ </a-space>
130
+
131
+ </div>
132
+
133
+ </div>
134
+ <div class="footer">Copyright © 2025 ZantAdmin</div>
135
+ </div>
136
+
140
137
  </div>
141
- <div class="footer">Copyright © 2025 *********</div>
138
+
142
139
  </div>
143
140
  </template>
144
141
  <script setup>
@@ -148,9 +145,10 @@ import router, { refreshRoutes } from '@/router'
148
145
  import { useUserStore } from '@/stores/user'
149
146
  import { reactive, computed, ref } from 'vue'
150
147
  import { message } from 'ant-design-vue'
148
+ import { MessageOutlined, QqOutlined } from '@ant-design/icons-vue'
151
149
  const formState = reactive({
152
- mobile: '123456',
153
- password: '123456',
150
+ mobile: '',
151
+ password: '',
154
152
  remember: true,
155
153
  vercode: '',
156
154
  })
@@ -220,39 +218,154 @@ const sendSmsCode = () => {
220
218
  }, 1000)
221
219
  })
222
220
  }
221
+
222
+ // 微信登录
223
+ const loginWithWechat = () => {
224
+ message.info('微信登录功能开发中,敬请期待')
225
+ // 这里可以添加实际的微信登录逻辑
226
+ // 例如:跳转到微信授权页面或打开微信扫码登录
227
+ }
228
+
229
+ // QQ登录
230
+ const loginWithQQ = () => {
231
+ message.info('QQ登录功能开发中,敬请期待')
232
+ // 这里可以添加实际的QQ登录逻辑
233
+ // 例如:跳转到QQ授权页面或打开QQ扫码登录
234
+ }
223
235
  </script>
224
236
  <style scoped>
225
237
  .app {
226
238
  height: 100vh !important;
239
+ width: 100vw !important;
227
240
  display: flex !important;
228
241
  align-items: center !important;
229
- background-image: url(../assets/imgs/loginbackground.svg);
230
242
  background-size: 100% 100%;
231
243
  }
232
244
 
233
- .demo-login {
234
- width: 400px !important;
245
+ .app-flex-row {
246
+ width: 100%;
247
+ display: flex;
248
+ flex-direction: row;
249
+ justify-content: center;
250
+ align-items: center;
251
+ }
252
+
253
+ .app-flex-row-left {
254
+ width: 65%;
255
+ height: 100vh;
256
+ display: flex;
257
+ flex-direction: column;
258
+ justify-content: center;
259
+ align-items: center;
260
+ background: #0f172a; /* Dark background to match the image */
261
+ position: relative;
262
+ overflow: hidden;
263
+ color: #fff;
264
+ }
265
+
266
+ .app-flex-row-left::before {
267
+ content: '';
268
+ position: absolute;
269
+ top: 0;
270
+ left: 0;
271
+ width: 100%;
272
+ height: 100%;
273
+
274
+ }
275
+
276
+ .logo-wrapper {
277
+ position: absolute;
278
+ top: 40px;
279
+ left: 40px;
280
+ display: flex;
281
+ align-items: center;
282
+ z-index: 10;
283
+ }
284
+
285
+ .logo-img {
286
+ width: 25px;
287
+ height: 25px;
288
+ margin-right: 16px;
289
+ }
290
+
291
+ .logo-text {
292
+ font-size: 20px;
293
+ font-weight: bold;
294
+ letter-spacing: 1px;
295
+ }
296
+
297
+ .illustration-wrapper {
298
+ flex: 1;
299
+ display: flex;
300
+ align-items: center;
301
+ justify-content: center;
302
+ width: 80%;
303
+ max-width: 600px;
304
+ z-index: 10;
305
+ }
306
+
307
+ .illustration-img {
308
+ width: 100%;
235
309
  height: auto;
236
- margin: 0 auto;
237
- background-color: rgba(255, 255, 255, 1);
238
- padding: 30px;
239
- border-radius: 20px;
310
+ object-fit: contain;
240
311
  }
241
312
 
242
- .demo-auto-login {
243
- margin-bottom: 60px;
244
- text-align: left;
313
+ .description {
314
+ margin-bottom: 20px;
315
+ text-align: center;
316
+ z-index: 10;
245
317
  }
246
318
 
247
- .demo-auto-login a {
248
- float: right;
319
+ .description h2 {
320
+ font-size: 64px;
321
+ font-weight: 900;
322
+ margin-bottom: 24px;
323
+ line-height: 1.1;
324
+ letter-spacing: 2px;
325
+ }
326
+
327
+ .text-white {
328
+ color: #ffffff;
329
+ }
330
+
331
+ .text-gradient {
332
+ background: linear-gradient(90deg, #a855f7 0%, #3b82f6 100%);
333
+ -webkit-background-clip: text;
334
+ background-clip: text;
335
+ color: transparent;
336
+ }
337
+
338
+ .description p {
339
+ font-size: 16px;
340
+ opacity: 0.9;
341
+ margin-bottom: 8px;
342
+ color: #e0e7ff;
343
+ }
344
+
345
+ .app-flex-row-right {
346
+ width: 35%;
347
+ height: 100vh;
348
+ display: flex;
349
+ flex-direction: row;
350
+ justify-content: center;
351
+ align-items: center;
352
+ background-color: white;
353
+ position: relative;
354
+ }
355
+
356
+ .demo-login {
357
+ width: 400px !important;
358
+ height: auto;
359
+ margin: 0 auto;
360
+ padding: 30px;
249
361
  }
250
362
 
251
363
  .tel {
252
- font-size: 30px;
253
- text-align: center;
254
- padding: 20px;
364
+ font-size: 24px;
365
+ font-weight: 600;
255
366
  color: rgb(0, 0, 0);
367
+ text-align: left;
368
+ margin-bottom: 30px;
256
369
  }
257
370
 
258
371
  .login-form-forgot {
@@ -262,11 +375,13 @@ const sendSmsCode = () => {
262
375
  .login-form-button {
263
376
  width: 100%;
264
377
  }
378
+
265
379
  .footer {
266
- position: fixed;
380
+ position: absolute;
267
381
  bottom: 20px;
268
382
  left: 0;
269
383
  right: 0;
270
384
  text-align: center;
385
+ color: rgb(100, 100, 100);
271
386
  }
272
387
  </style>
@@ -1,78 +1,78 @@
1
- <template>
2
- <form-table
3
- :formState="formState"
4
- :columns="columns"
5
- modulePath="LogError"
6
- :rowSelect="false"
7
- :permissionModulePath="permissionModulePath"
8
- @details="details"
9
- >
10
- </form-table>
11
- <!-- 详情 -->
12
- <LogErrorDetails
13
- :open="detailsopen"
14
- :info="info"
15
- @close="detailsopen = false"
16
- >
17
- </LogErrorDetails>
18
- </template>
19
- <script setup>
20
- import { ref } from 'vue'
21
- import FormTable from '@/components/FormTable.vue'
22
- import logError from '@/api/methods/logError'
23
- import LogErrorDetails from '@/components/details/logErrorDetails.vue'
24
- // 权限模块路径
25
- const permissionModulePath = ref('operations:log:logError')
26
- const formState = ref({
27
- actionName: { label: '方法', value: '', type: 'text' },
28
- code: { label: '异常码', value: '', type: 'text' },
29
- createTime: { label: '日期范围', value: '', type: 'time' },
30
- })
31
- const columns = ref([
32
- {
33
- title: '序号',
34
- key: 'num',
35
- width: 80,
36
- },
37
- {
38
- title: '方法',
39
- dataIndex: 'actionName',
40
- ellipsis: true,
41
- },
42
- {
43
- title: '异常码',
44
- dataIndex: 'code',
45
- width: 100,
46
- },
47
- {
48
- title: '异常内容',
49
- dataIndex: 'message',
50
- ellipsis: true,
51
- },
52
-
53
- {
54
- title: '创建时间',
55
- dataIndex: 'createTime',
56
- width: 200,
57
- },
58
- {
59
- title: '操作',
60
- key: 'operation',
61
- fixed: 'right',
62
- width: 100,
63
- },
64
- ])
65
- //详情
66
- const detailsopen = ref(false)
67
- const info = ref({})
68
- const details = record => {
69
- logError.detail({ id: record.id }).then(res => {
70
- info.value = res.data
71
- detailsopen.value = true
72
- })
73
- }
74
- const detailsHandleCancel = () => {
75
- detailsopen.value = false
76
- }
77
- </script>
78
- <style></style>
1
+ <template>
2
+ <form-table
3
+ :formState="formState"
4
+ :columns="columns"
5
+ modulePath="LogError"
6
+ :rowSelect="false"
7
+ :permissionModulePath="permissionModulePath"
8
+ @details="details"
9
+ >
10
+ </form-table>
11
+ <!-- 详情 -->
12
+ <LogErrorDetails
13
+ :open="detailsopen"
14
+ :info="info"
15
+ @close="detailsopen = false"
16
+ >
17
+ </LogErrorDetails>
18
+ </template>
19
+ <script setup>
20
+ import { ref } from 'vue'
21
+ import FormTable from '@/components/FormTable.vue'
22
+ import logError from '@/api/methods/logError'
23
+ import LogErrorDetails from '@/components/details/logErrorDetails.vue'
24
+ // 权限模块路径
25
+ const permissionModulePath = ref('operations:log:logError')
26
+ const formState = ref({
27
+ actionName: { label: '方法', value: '', type: 'text' },
28
+ code: { label: '异常码', value: '', type: 'text' },
29
+ createTime: { label: '日期范围', value: '', type: 'time' },
30
+ })
31
+ const columns = ref([
32
+ {
33
+ title: '序号',
34
+ key: 'num',
35
+ width: 80,
36
+ },
37
+ {
38
+ title: '方法',
39
+ dataIndex: 'actionName',
40
+ ellipsis: true,
41
+ },
42
+ {
43
+ title: '异常码',
44
+ dataIndex: 'code',
45
+ width: 100,
46
+ },
47
+ {
48
+ title: '异常内容',
49
+ dataIndex: 'message',
50
+ ellipsis: true,
51
+ },
52
+
53
+ {
54
+ title: '创建时间',
55
+ dataIndex: 'createTime',
56
+ width: 200,
57
+ },
58
+ {
59
+ title: '操作',
60
+ key: 'operation',
61
+ fixed: 'right',
62
+ width: 100,
63
+ },
64
+ ])
65
+ //详情
66
+ const detailsopen = ref(false)
67
+ const info = ref({})
68
+ const details = record => {
69
+ logError.detail({ id: record.id }).then(res => {
70
+ info.value = res.data
71
+ detailsopen.value = true
72
+ })
73
+ }
74
+ const detailsHandleCancel = () => {
75
+ detailsopen.value = false
76
+ }
77
+ </script>
78
+ <style></style>