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.
- package/LICENSE +21 -0
- package/README.en.md +414 -25
- package/README.md +426 -277
- package/bin/cli.js +99 -99
- package/bin/generator.js +502 -502
- package/bin/prompts.js +158 -158
- package/bin/utils.js +133 -133
- package/package.json +3 -3
- package/public/logo.png +0 -0
- package/src/App.vue +1 -1
- package/src/api/methods/sysAccount.js +0 -1
- package/src/api/methods/sysDictItem.js +3 -3
- package/src/api/methods/system.js +10 -11
- package/src/api/request.js +39 -39
- package/src/assets/css/style.css +0 -11
- package/src/assets/css/zcui.css +1002 -319
- package/src/assets/imgs/logo.png +0 -0
- package/src/assets/imgs/md/console.png +0 -0
- package/src/assets/imgs/md/login.png +0 -0
- package/src/assets/imgs/md/menu.png +0 -0
- package/src/assets/imgs/md/serviceMonitoring.png +0 -0
- package/src/assets/imgs/md/statistics.png +0 -0
- package/src/components/FormTable.vue +50 -37
- package/src/components/IconPicker.vue +351 -344
- package/src/components/MainPage.vue +220 -339
- package/src/components/edit/QuartzEdit.vue +1 -1
- package/src/components/edit/SysAccountEdit.vue +15 -8
- package/src/components/edit/SysDictEdit.vue +6 -4
- package/src/components/edit/SysDictItemEdit.vue +8 -6
- package/src/components/edit/SysRoleEdit.vue +5 -3
- package/src/components/edit/sysMenuEdit.vue +10 -25
- package/src/config/index.js +74 -74
- package/src/directives/permission.js +49 -45
- package/src/main.js +2 -3
- package/src/router/index.js +48 -30
- package/src/stores/config.js +7 -1
- package/src/stores/menu.js +32 -8
- package/src/stores/user.js +17 -17
- package/src/utils/regionUtils.js +20 -16
- package/src/utils/useFormCRUD.js +59 -60
- package/src/views/baiscstatis/center.vue +53 -42
- package/src/views/baiscstatis/iframePage.vue +9 -11
- package/src/views/console.vue +92 -42
- package/src/views/demo/button.vue +269 -0
- package/src/views/demo/importexport.vue +8 -12
- package/src/views/demo/region.vue +103 -21
- package/src/views/demo/statistics.vue +38 -19
- package/src/views/home.vue +2 -3
- package/src/views/login.vue +254 -149
- package/src/views/operations/log/logQuartz.vue +0 -1
- package/src/views/operations/quartz.vue +22 -24
- package/src/views/system/sysAccount.vue +16 -11
- package/src/views/system/sysDict.vue +9 -6
- package/src/views/system/sysMenu.vue +17 -15
- package/src/views/system/sysRole.vue +44 -21
- package/SCAFFOLD_README.md +0 -215
- package/src/assets/imgs/md/1.png +0 -0
- package/src/assets/imgs/md/10.png +0 -0
- package/src/assets/imgs/md/11.png +0 -0
- package/src/assets/imgs/md/2.png +0 -0
- package/src/assets/imgs/md/3.png +0 -0
- package/src/assets/imgs/md/4.png +0 -0
- package/src/assets/imgs/md/5.png +0 -0
- package/src/assets/imgs/md/6.png +0 -0
- package/src/assets/imgs/md/7.png +0 -0
- package/src/assets/imgs/md/8.png +0 -0
- package/src/assets/imgs/md/9.png +0 -0
package/src/views/login.vue
CHANGED
|
@@ -1,144 +1,131 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="app">
|
|
3
|
-
<div class="
|
|
4
|
-
<div class="
|
|
5
|
-
<
|
|
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
|
-
<
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
>
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
>
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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
|
-
.
|
|
234
|
-
width:
|
|
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
|
-
|
|
237
|
-
background-color: rgba(255, 255, 255, 1);
|
|
238
|
-
padding: 30px;
|
|
239
|
-
border-radius: 20px;
|
|
300
|
+
object-fit: contain;
|
|
240
301
|
}
|
|
241
302
|
|
|
242
|
-
.
|
|
243
|
-
margin-bottom:
|
|
244
|
-
text-align:
|
|
303
|
+
.description {
|
|
304
|
+
margin-bottom: 20px;
|
|
305
|
+
text-align: center;
|
|
306
|
+
z-index: 10;
|
|
245
307
|
}
|
|
246
308
|
|
|
247
|
-
.
|
|
248
|
-
|
|
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:
|
|
253
|
-
|
|
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:
|
|
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>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
:formState="formState"
|
|
4
4
|
:columns="columns"
|
|
5
5
|
modulePath="quartz"
|
|
6
|
-
|
|
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
|
|
22
|
+
<a-dropdown class="">
|
|
23
|
+
<a @click.prevent> 更多 <DownOutlined /></a>
|
|
24
24
|
<template #overlay>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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: {
|
|
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
|
-
|
|
71
|
+
resizable: true,
|
|
67
72
|
},
|
|
68
73
|
{
|
|
69
74
|
title: '手机号',
|
|
70
75
|
dataIndex: 'mobile',
|
|
71
|
-
|
|
76
|
+
resizable: true,
|
|
72
77
|
},
|
|
73
78
|
{
|
|
74
79
|
title: '角色',
|
|
75
80
|
dataIndex: 'roleName',
|
|
76
|
-
|
|
81
|
+
resizable: true,
|
|
77
82
|
},
|
|
78
83
|
{
|
|
79
84
|
title: '备注',
|
|
80
85
|
dataIndex: 'remark',
|
|
81
|
-
|
|
86
|
+
resizable: true,
|
|
82
87
|
},
|
|
83
88
|
{
|
|
84
89
|
title: '是否启用',
|
|
85
90
|
key: 'isEnable',
|
|
86
|
-
|
|
91
|
+
resizable: true,
|
|
87
92
|
},
|
|
88
93
|
{
|
|
89
94
|
title: '创建时间',
|
|
90
95
|
dataIndex: 'createTime',
|
|
91
|
-
|
|
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
|
-
|
|
5
|
+
modulePath="sysDict"
|
|
6
6
|
:permissionModulePath="permissionModulePath"
|
|
7
|
-
|
|
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
|
-
|
|
24
|
+
<template #custom-operation="{ record }">
|
|
25
25
|
<a-divider type="vertical" />
|
|
26
|
-
<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>
|