zant-admin 1.0.1 → 2.0.0

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +414 -25
  3. package/README.md +426 -277
  4. package/bin/cli.js +99 -99
  5. package/bin/generator.js +502 -502
  6. package/bin/prompts.js +158 -158
  7. package/bin/utils.js +133 -133
  8. package/package.json +3 -3
  9. package/public/logo.png +0 -0
  10. package/src/App.vue +1 -1
  11. package/src/api/methods/sysAccount.js +0 -1
  12. package/src/api/methods/sysDictItem.js +3 -3
  13. package/src/api/methods/system.js +10 -11
  14. package/src/api/request.js +39 -39
  15. package/src/assets/css/style.css +0 -11
  16. package/src/assets/css/zcui.css +1002 -319
  17. package/src/assets/imgs/logo.png +0 -0
  18. package/src/assets/imgs/md/console.png +0 -0
  19. package/src/assets/imgs/md/login.png +0 -0
  20. package/src/assets/imgs/md/menu.png +0 -0
  21. package/src/assets/imgs/md/serviceMonitoring.png +0 -0
  22. package/src/assets/imgs/md/statistics.png +0 -0
  23. package/src/components/FormTable.vue +50 -37
  24. package/src/components/IconPicker.vue +351 -344
  25. package/src/components/MainPage.vue +220 -339
  26. package/src/components/edit/QuartzEdit.vue +1 -1
  27. package/src/components/edit/SysAccountEdit.vue +15 -8
  28. package/src/components/edit/SysDictEdit.vue +6 -4
  29. package/src/components/edit/SysDictItemEdit.vue +8 -6
  30. package/src/components/edit/SysRoleEdit.vue +5 -3
  31. package/src/components/edit/sysMenuEdit.vue +10 -25
  32. package/src/config/index.js +74 -74
  33. package/src/directives/permission.js +49 -45
  34. package/src/main.js +2 -3
  35. package/src/router/index.js +48 -30
  36. package/src/stores/config.js +7 -1
  37. package/src/stores/menu.js +32 -8
  38. package/src/stores/user.js +17 -17
  39. package/src/utils/regionUtils.js +20 -16
  40. package/src/utils/useFormCRUD.js +59 -60
  41. package/src/views/baiscstatis/center.vue +53 -42
  42. package/src/views/baiscstatis/iframePage.vue +9 -11
  43. package/src/views/console.vue +92 -42
  44. package/src/views/demo/button.vue +269 -0
  45. package/src/views/demo/importexport.vue +8 -12
  46. package/src/views/demo/region.vue +103 -21
  47. package/src/views/demo/statistics.vue +38 -19
  48. package/src/views/home.vue +2 -3
  49. package/src/views/login.vue +254 -149
  50. package/src/views/operations/log/logQuartz.vue +0 -1
  51. package/src/views/operations/quartz.vue +22 -24
  52. package/src/views/system/sysAccount.vue +16 -11
  53. package/src/views/system/sysDict.vue +9 -6
  54. package/src/views/system/sysMenu.vue +17 -15
  55. package/src/views/system/sysRole.vue +44 -21
  56. package/SCAFFOLD_README.md +0 -215
  57. package/src/assets/imgs/md/1.png +0 -0
  58. package/src/assets/imgs/md/10.png +0 -0
  59. package/src/assets/imgs/md/11.png +0 -0
  60. package/src/assets/imgs/md/2.png +0 -0
  61. package/src/assets/imgs/md/3.png +0 -0
  62. package/src/assets/imgs/md/4.png +0 -0
  63. package/src/assets/imgs/md/5.png +0 -0
  64. package/src/assets/imgs/md/6.png +0 -0
  65. package/src/assets/imgs/md/7.png +0 -0
  66. package/src/assets/imgs/md/8.png +0 -0
  67. package/src/assets/imgs/md/9.png +0 -0
@@ -1,144 +1,131 @@
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
121
- >
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>
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
+ <a-form-item>
89
+ <a-button :disabled="disabled" type="primary" :loading="loading" html-type="submit" size="large"
90
+ class="login-form-button">
91
+ 登录
92
+ </a-button>
93
+ </a-form-item>
94
+ </a-form>
95
+
96
+ </a-tab-pane>
97
+ </a-tabs>
98
+ <a-divider>其他登录方式</a-divider>
99
+ <div class="text-align-center">
100
+ <a-space size="large">
101
+ <a href="" target="_blank">
102
+ <WechatOutlined style="font-size: 24px; color: #4dbf00;" />
103
+ </a>
104
+
105
+ <a href="" target="_blank">
106
+ <QqOutlined style="font-size: 24px; color: #0099ff;" />
107
+ </a>
108
+
109
+ <a href="" target="_blank">
110
+ <AlipayCircleOutlined style="font-size: 24px; color:#0099ff;" />
111
+ </a>
112
+
113
+ <a href="" target="_blank">
114
+ <TaobaoCircleOutlined style="font-size: 24px; color: #ff6600;" />
115
+ </a>
116
+ <a href="" target="_blank">
117
+ <GithubOutlined style="font-size: 24px; color: #000;" />
118
+ </a>
119
+ </a-space>
120
+
121
+ </div>
122
+
123
+ </div>
124
+ <div class="footer">Copyright © 2025 ZantAdmin</div>
125
+ </div>
126
+
140
127
  </div>
141
- <div class="footer">Copyright © 2025 *********</div>
128
+
142
129
  </div>
143
130
  </template>
144
131
  <script setup>
@@ -148,6 +135,7 @@ import router, { refreshRoutes } from '@/router'
148
135
  import { useUserStore } from '@/stores/user'
149
136
  import { reactive, computed, ref } from 'vue'
150
137
  import { message } from 'ant-design-vue'
138
+ import { MessageOutlined, QqOutlined } from '@ant-design/icons-vue'
151
139
  const formState = reactive({
152
140
  mobile: '123456',
153
141
  password: '123456',
@@ -173,7 +161,7 @@ const onFinish = values => {
173
161
  user.token = res.data.token
174
162
  user.userInfo = res.data
175
163
  message.success('登录成功')
176
- // 重置路由状态并重新加载动态路由
164
+ // 重置路由状态并重新加载动态路由
177
165
  try {
178
166
  await refreshRoutes()
179
167
  router.push('/console')
@@ -220,39 +208,154 @@ const sendSmsCode = () => {
220
208
  }, 1000)
221
209
  })
222
210
  }
211
+
212
+ // 微信登录
213
+ const loginWithWechat = () => {
214
+ message.info('微信登录功能开发中,敬请期待')
215
+ // 这里可以添加实际的微信登录逻辑
216
+ // 例如:跳转到微信授权页面或打开微信扫码登录
217
+ }
218
+
219
+ // QQ登录
220
+ const loginWithQQ = () => {
221
+ message.info('QQ登录功能开发中,敬请期待')
222
+ // 这里可以添加实际的QQ登录逻辑
223
+ // 例如:跳转到QQ授权页面或打开QQ扫码登录
224
+ }
223
225
  </script>
224
226
  <style scoped>
225
227
  .app {
226
228
  height: 100vh !important;
229
+ width: 100vw !important;
227
230
  display: flex !important;
228
231
  align-items: center !important;
229
- background-image: url(../assets/imgs/loginbackground.svg);
230
232
  background-size: 100% 100%;
231
233
  }
232
234
 
233
- .demo-login {
234
- width: 400px !important;
235
+ .app-flex-row {
236
+ width: 100%;
237
+ display: flex;
238
+ flex-direction: row;
239
+ justify-content: center;
240
+ align-items: center;
241
+ }
242
+
243
+ .app-flex-row-left {
244
+ width: 65%;
245
+ height: 100vh;
246
+ display: flex;
247
+ flex-direction: column;
248
+ justify-content: center;
249
+ align-items: center;
250
+ background: #0f172a; /* Dark background to match the image */
251
+ position: relative;
252
+ overflow: hidden;
253
+ color: #fff;
254
+ }
255
+
256
+ .app-flex-row-left::before {
257
+ content: '';
258
+ position: absolute;
259
+ top: 0;
260
+ left: 0;
261
+ width: 100%;
262
+ height: 100%;
263
+
264
+ }
265
+
266
+ .logo-wrapper {
267
+ position: absolute;
268
+ top: 40px;
269
+ left: 40px;
270
+ display: flex;
271
+ align-items: center;
272
+ z-index: 10;
273
+ }
274
+
275
+ .logo-img {
276
+ width: 25px;
277
+ height: 25px;
278
+ margin-right: 16px;
279
+ }
280
+
281
+ .logo-text {
282
+ font-size: 20px;
283
+ font-weight: bold;
284
+ letter-spacing: 1px;
285
+ }
286
+
287
+ .illustration-wrapper {
288
+ flex: 1;
289
+ display: flex;
290
+ align-items: center;
291
+ justify-content: center;
292
+ width: 80%;
293
+ max-width: 600px;
294
+ z-index: 10;
295
+ }
296
+
297
+ .illustration-img {
298
+ width: 100%;
235
299
  height: auto;
236
- margin: 0 auto;
237
- background-color: rgba(255, 255, 255, 1);
238
- padding: 30px;
239
- border-radius: 20px;
300
+ object-fit: contain;
240
301
  }
241
302
 
242
- .demo-auto-login {
243
- margin-bottom: 60px;
244
- text-align: left;
303
+ .description {
304
+ margin-bottom: 20px;
305
+ text-align: center;
306
+ z-index: 10;
245
307
  }
246
308
 
247
- .demo-auto-login a {
248
- float: right;
309
+ .description h2 {
310
+ font-size: 64px;
311
+ font-weight: 900;
312
+ margin-bottom: 24px;
313
+ line-height: 1.1;
314
+ letter-spacing: 2px;
315
+ }
316
+
317
+ .text-white {
318
+ color: #ffffff;
319
+ }
320
+
321
+ .text-gradient {
322
+ background: linear-gradient(90deg, #a855f7 0%, #3b82f6 100%);
323
+ -webkit-background-clip: text;
324
+ background-clip: text;
325
+ color: transparent;
326
+ }
327
+
328
+ .description p {
329
+ font-size: 16px;
330
+ opacity: 0.9;
331
+ margin-bottom: 8px;
332
+ color: #e0e7ff;
333
+ }
334
+
335
+ .app-flex-row-right {
336
+ width: 35%;
337
+ height: 100vh;
338
+ display: flex;
339
+ flex-direction: row;
340
+ justify-content: center;
341
+ align-items: center;
342
+ background-color: white;
343
+ position: relative;
344
+ }
345
+
346
+ .demo-login {
347
+ width: 400px !important;
348
+ height: auto;
349
+ margin: 0 auto;
350
+ padding: 30px;
249
351
  }
250
352
 
251
353
  .tel {
252
- font-size: 30px;
253
- text-align: center;
254
- padding: 20px;
354
+ font-size: 24px;
355
+ font-weight: 600;
255
356
  color: rgb(0, 0, 0);
357
+ text-align: left;
358
+ margin-bottom: 30px;
256
359
  }
257
360
 
258
361
  .login-form-forgot {
@@ -262,11 +365,13 @@ const sendSmsCode = () => {
262
365
  .login-form-button {
263
366
  width: 100%;
264
367
  }
368
+
265
369
  .footer {
266
- position: fixed;
370
+ position: absolute;
267
371
  bottom: 20px;
268
372
  left: 0;
269
373
  right: 0;
270
374
  text-align: center;
375
+ color: rgb(100, 100, 100);
271
376
  }
272
377
  </style>
@@ -50,7 +50,6 @@ const columns = ref([
50
50
  {
51
51
  title: '异常',
52
52
  dataIndex: 'error',
53
-
54
53
  },
55
54
  ])
56
55
  </script>
@@ -3,7 +3,7 @@
3
3
  :formState="formState"
4
4
  :columns="columns"
5
5
  modulePath="quartz"
6
- :permissionModulePath="permissionModulePath"
6
+ :permissionModulePath="permissionModulePath"
7
7
  @edit="edit"
8
8
  ftableDeleteAction="deleteTask"
9
9
  ref="childRef"
@@ -19,30 +19,29 @@
19
19
  </template>
20
20
  <template #custom-operation="{ record }">
21
21
  <a-divider type="vertical" />
22
- <a-dropdown class="" >
23
- <a @click.prevent > 更多 <DownOutlined /></a>
22
+ <a-dropdown class="">
23
+ <a @click.prevent> 更多 <DownOutlined /></a>
24
24
  <template #overlay>
25
-
26
- <a-menu @click="e => moreClick(e, record.id)" >
27
- <span v-permission="permissionModulePath+':resumeTask'">
28
- <a-menu-item key="1">
29
- <a @click="empower(record)" >恢复任务</a>
30
- </a-menu-item>
25
+ <a-menu @click="e => moreClick(e, record.id)">
26
+ <span v-permission="permissionModulePath + ':resumeTask'">
27
+ <a-menu-item key="1">
28
+ <a @click="empower(record)">恢复任务</a>
29
+ </a-menu-item>
31
30
  </span>
32
- <span v-permission="permissionModulePath+':pauseTask'">
33
- <a-menu-item key="2">
34
- <a @click="empower(record)" >暂停任务</a>
35
- </a-menu-item>
31
+ <span v-permission="permissionModulePath + ':pauseTask'">
32
+ <a-menu-item key="2">
33
+ <a @click="empower(record)">暂停任务</a>
34
+ </a-menu-item>
36
35
  </span>
37
- <span v-permission="permissionModulePath+':executeTask'">
38
- <a-menu-item key="3">
39
- <a @click="empower(record)" >立即执行</a>
40
- </a-menu-item>
36
+ <span v-permission="permissionModulePath + ':executeTask'">
37
+ <a-menu-item key="3">
38
+ <a @click="empower(record)">立即执行</a>
39
+ </a-menu-item>
41
40
  </span>
42
- <span v-permission="permissionModulePath+':viewLog'">
43
- <a-menu-item key="4">
44
- <a @click="empower(record)" >执行记录</a>
45
- </a-menu-item>
41
+ <span v-permission="permissionModulePath + ':viewLog'">
42
+ <a-menu-item key="4">
43
+ <a @click="empower(record)">执行记录</a>
44
+ </a-menu-item>
46
45
  </span>
47
46
  </a-menu>
48
47
  </template>
@@ -66,7 +65,7 @@
66
65
  :footer="null"
67
66
  :destroyOnClose="true"
68
67
  >
69
- <logQuartz :recordwhere="recordwhere"> </logQuartz>
68
+ <logQuartz :recordwhere="recordwhere"> </logQuartz>
70
69
  </a-modal>
71
70
  </template>
72
71
  <script setup>
@@ -75,7 +74,7 @@ import FormTable from '@/components/FormTable.vue'
75
74
  import QuartzEdit from '@/components/edit/QuartzEdit.vue'
76
75
  import logQuartz from '@/views/operations/log/logQuartz.vue'
77
76
  import quartz from '@/api/methods/quartz'
78
- import { message } from 'ant-design-vue'
77
+ import { message } from 'ant-design-vue'
79
78
  // 权限模块路径
80
79
  const permissionModulePath = ref('operations:quartz')
81
80
 
@@ -175,7 +174,6 @@ const childRef = ref(null)
175
174
  const refreshData = () => {
176
175
  childRef.value.tableLoad()
177
176
  }
178
-
179
177
  </script>
180
178
 
181
179
  <style></style>
@@ -3,7 +3,7 @@
3
3
  :formState="formState"
4
4
  :columns="columns"
5
5
  modulePath="sysAccount"
6
- :permissionModulePath="permissionModulePath"
6
+ :permissionModulePath="permissionModulePath"
7
7
  @edit="edit"
8
8
  ref="childRef"
9
9
  >
@@ -35,16 +35,21 @@ import sysRole from '@/api/methods/sysRole'
35
35
  // 权限模块路径
36
36
  const permissionModulePath = ref('system:sysAccount')
37
37
  const formState = ref({
38
- name: { label: '账号名称', value: '',defaultvalue:'', type: 'text' },
39
- mobile: { label: '手机号', value: '',defaultvalue:'', type: 'text' },
38
+ name: { label: '账号名称', value: '', defaultvalue: '', type: 'text' },
39
+ mobile: { label: '手机号', value: '', defaultvalue: '', type: 'text' },
40
40
  roleId: {
41
41
  label: '角色',
42
42
  value: null,
43
- defaultvalue:null,
43
+ defaultvalue: null,
44
44
  type: 'select',
45
45
  data: [],
46
46
  },
47
- createTime: { label: '日期范围', value: null, defaultvalue:null, type: 'time' },
47
+ createTime: {
48
+ label: '日期范围',
49
+ value: null,
50
+ defaultvalue: null,
51
+ type: 'time',
52
+ },
48
53
  })
49
54
 
50
55
  const fetchRoleData = async () => {
@@ -63,32 +68,32 @@ const columns = ref([
63
68
  {
64
69
  title: '账号名称',
65
70
  dataIndex: 'name',
66
- resizable: true,
71
+ resizable: true,
67
72
  },
68
73
  {
69
74
  title: '手机号',
70
75
  dataIndex: 'mobile',
71
- resizable: true,
76
+ resizable: true,
72
77
  },
73
78
  {
74
79
  title: '角色',
75
80
  dataIndex: 'roleName',
76
- resizable: true,
81
+ resizable: true,
77
82
  },
78
83
  {
79
84
  title: '备注',
80
85
  dataIndex: 'remark',
81
- resizable: true,
86
+ resizable: true,
82
87
  },
83
88
  {
84
89
  title: '是否启用',
85
90
  key: 'isEnable',
86
- resizable: true,
91
+ resizable: true,
87
92
  },
88
93
  {
89
94
  title: '创建时间',
90
95
  dataIndex: 'createTime',
91
- resizable: true,
96
+ resizable: true,
92
97
  },
93
98
  {
94
99
  title: '操作',
@@ -2,9 +2,9 @@
2
2
  <form-table
3
3
  :formState="formState"
4
4
  :columns="columns"
5
- modulePath="sysDict"
5
+ modulePath="sysDict"
6
6
  :permissionModulePath="permissionModulePath"
7
- @edit="edit"
7
+ @edit="edit"
8
8
  ref="childRef"
9
9
  >
10
10
  <template #table-toolbar="{ record }">
@@ -21,9 +21,13 @@
21
21
  @change="handleSwitchChange(record)"
22
22
  />
23
23
  </template>
24
- <template #custom-operation="{ record }">
24
+ <template #custom-operation="{ record }">
25
25
  <a-divider type="vertical" />
26
- <a @click="configuration(record)" v-permission="permissionModulePath+':configuration'">配置字典项</a>
26
+ <a
27
+ @click="configuration(record)"
28
+ v-permission="permissionModulePath + ':configuration'"
29
+ >配置字典项</a
30
+ >
27
31
  </template>
28
32
  </form-table>
29
33
  <!-- 编辑 -->
@@ -44,8 +48,7 @@
44
48
  wrap-class-name="full-modal"
45
49
  :destroyOnClose="true"
46
50
  >
47
- <SysDictItem :recordwhere="recordwhere" ref="childPageRef">
48
- </SysDictItem>
51
+ <SysDictItem :recordwhere="recordwhere" ref="childPageRef"> </SysDictItem>
49
52
  </a-modal>
50
53
  </template>
51
54
  <script setup>