Skip to content

Commit 7d84f86

Browse files
committed
REVIEW 用户管理(分配用户角色)
1 parent 643b387 commit 7d84f86

File tree

5 files changed

+147
-165
lines changed

5 files changed

+147
-165
lines changed

src/api/system/permission/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ export const assignRoleDataScopeApi = async (data: PermissionAssignRoleDataScope
3232
}
3333

3434
// 查询用户拥有的角色数组
35-
export const listUserRolesApi = async (userId: number) => {
35+
export const getUserRoleList = async (userId: number) => {
3636
return await request.get({ url: '/system/permission/list-user-roles?userId=' + userId })
3737
}
3838

3939
// 赋予用户角色
40-
export const assignUserRoleApi = async (data: PermissionAssignUserRoleReqVO) => {
40+
export const assignUserRole = async (data: PermissionAssignUserRoleReqVO) => {
4141
return await request.post({ url: '/system/permission/assign-user-role', data })
4242
}

src/api/system/user/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export const importUserTemplateApi = () => {
5353
}
5454

5555
// 用户密码重置
56-
export const resetUserPwdApi = (id: number, password: string) => {
56+
export const resetUserPwd = (id: number, password: string) => {
5757
const data = {
5858
id,
5959
password
@@ -62,7 +62,7 @@ export const resetUserPwdApi = (id: number, password: string) => {
6262
}
6363

6464
// 用户状态修改
65-
export const updateUserStatusApi = (id: number, status: number) => {
65+
export const updateUserStatus = (id: number, status: number) => {
6666
const data = {
6767
id,
6868
status
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<template>
2+
<Dialog title="分配角色" v-model="modelVisible">
3+
<el-form ref="formRef" :model="formData" label-width="80px" v-loading="formLoading">
4+
<el-form-item label="用户名称">
5+
<el-input v-model="formData.username" :disabled="true" />
6+
</el-form-item>
7+
<el-form-item label="用户昵称">
8+
<el-input v-model="formData.nickname" :disabled="true" />
9+
</el-form-item>
10+
<el-form-item label="角色">
11+
<el-select v-model="formData.roleIds" multiple placeholder="请选择角色">
12+
<el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id" />
13+
</el-select>
14+
</el-form-item>
15+
</el-form>
16+
<template #footer>
17+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
18+
<el-button @click="modelVisible = false">取 消</el-button>
19+
</template>
20+
</Dialog>
21+
</template>
22+
<script setup lang="ts">
23+
import * as PermissionApi from '@/api/system/permission'
24+
import * as UserApi from '@/api/system/user'
25+
import * as RoleApi from '@/api/system/role'
26+
const { t } = useI18n() // 国际化
27+
const message = useMessage() // 消息弹窗
28+
29+
const modelVisible = ref(false) // 弹窗的是否展示
30+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
31+
const formData = ref({
32+
id: undefined,
33+
nickname: '',
34+
username: '',
35+
roleIds: []
36+
})
37+
const formRef = ref() // 表单 Ref
38+
const roleList = ref([]) // 角色的列表
39+
40+
/** 打开弹窗 */
41+
const open = async (row: UserApi.UserVO) => {
42+
modelVisible.value = true
43+
resetForm()
44+
// 设置数据
45+
formData.value.id = row.id
46+
formData.value.username = row.username
47+
formData.value.nickname = row.nickname
48+
// 获得角色拥有的菜单集合
49+
formLoading.value = true
50+
try {
51+
formData.value.roleIds = await PermissionApi.getUserRoleList(row.id)
52+
} finally {
53+
formLoading.value = false
54+
}
55+
// 获得角色列表
56+
roleList.value = await RoleApi.getSimpleRoleList()
57+
}
58+
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
59+
60+
/** 提交表单 */
61+
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
62+
const submitForm = async () => {
63+
// 校验表单
64+
if (!formRef) return
65+
const valid = await formRef.value.validate()
66+
if (!valid) return
67+
// 提交请求
68+
formLoading.value = true
69+
try {
70+
await PermissionApi.assignUserRole({
71+
userId: formData.value.id,
72+
roleIds: formData.value.roleIds
73+
})
74+
message.success(t('common.updateSuccess'))
75+
modelVisible.value = false
76+
// 发送操作成功的事件
77+
emit('success', true)
78+
} finally {
79+
formLoading.value = false
80+
}
81+
}
82+
83+
/** 重置表单 */
84+
const resetForm = () => {
85+
formData.value = {
86+
id: undefined,
87+
nickname: '',
88+
username: '',
89+
roleIds: []
90+
}
91+
formRef.value?.resetFields()
92+
}
93+
</script>

src/views/system/user/components/UserAssignRoleForm.vue

Lines changed: 0 additions & 108 deletions
This file was deleted.

src/views/system/user/index.vue

Lines changed: 50 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,10 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
193193
import { dateFormatter } from '@/utils/formatTime'
194194
import download from '@/utils/download'
195195
import { CommonStatusEnum } from '@/utils/constants'
196-
197-
import { resetUserPwdApi, updateUserStatusApi, UserVO } from '@/api/system/user'
198196
import * as UserApi from '@/api/system/user'
199-
200197
import UserForm from './components/UserForm.vue'
201198
import UserImportForm from './components/UserImportForm.vue'
202-
import UserAssignRoleForm from './components/UserAssignRoleForm.vue'
199+
import UserAssignRoleForm from './UserAssignRoleForm.vue'
203200
import DeptTree from './DeptTree.vue'
204201
const message = useMessage() // 消息弹窗
205202
const { t } = useI18n() // 国际化
@@ -260,7 +257,40 @@ const handleImport = () => {
260257
importFormRef.value?.openForm()
261258
}
262259
263-
// 操作分发
260+
/** 修改用户状态 */
261+
const handleStatusChange = async (row: UserApi.UserVO) => {
262+
try {
263+
// 修改状态的二次确认
264+
const text = row.status === CommonStatusEnum.ENABLE ? '启用' : '停用'
265+
await message.confirm('确认要"' + text + '""' + row.username + '"用户吗?')
266+
// 发起修改状态
267+
await UserApi.updateUserStatus(row.id, row.status)
268+
// 刷新列表
269+
await getList()
270+
} catch {
271+
// 取消后,进行恢复按钮
272+
row.status =
273+
row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE : CommonStatusEnum.ENABLE
274+
}
275+
}
276+
277+
/** 导出按钮操作 */
278+
const exportLoading = ref(false)
279+
const handleExport = async () => {
280+
try {
281+
// 导出的二次确认
282+
await message.exportConfirm()
283+
// 发起导出
284+
exportLoading.value = true
285+
const data = await UserApi.exportUser(queryParams)
286+
download.excel(data, '用户数据.xls')
287+
} catch {
288+
} finally {
289+
exportLoading.value = false
290+
}
291+
}
292+
293+
/** 操作分发 */
264294
const handleCommand = (command: string, index: number, row: UserApi.UserVO) => {
265295
console.log(index)
266296
switch (command) {
@@ -278,25 +308,6 @@ const handleCommand = (command: string, index: number, row: UserApi.UserVO) => {
278308
}
279309
}
280310
281-
// 用户状态修改
282-
const handleStatusChange = (row: UserVO) => {
283-
let text = row.status === CommonStatusEnum.ENABLE ? '启用' : '停用'
284-
message
285-
.confirm('确认要"' + text + '""' + row.username + '"用户吗?', t('common.reminder'))
286-
.then(async () => {
287-
row.status =
288-
row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.ENABLE : CommonStatusEnum.DISABLE
289-
await updateUserStatusApi(row.id, row.status)
290-
message.success(text + '成功')
291-
// 刷新列表
292-
getList()
293-
})
294-
.catch(() => {
295-
row.status =
296-
row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE : CommonStatusEnum.ENABLE
297-
})
298-
}
299-
300311
/** 删除按钮操作 */
301312
const handleDelete = async (id: number) => {
302313
try {
@@ -310,39 +321,25 @@ const handleDelete = async (id: number) => {
310321
} catch {}
311322
}
312323
313-
/** 导出按钮操作 */
314-
const exportLoading = ref(false)
315-
const handleExport = async () => {
324+
/** 重置密码 */
325+
const handleResetPwd = async (row: UserApi.UserVO) => {
316326
try {
317-
// 导出的二次确认
318-
await message.exportConfirm()
319-
// 发起导出
320-
exportLoading.value = true
321-
const data = await UserApi.exportUser(queryParams)
322-
download.excel(data, '用户数据.xls')
323-
} catch {
324-
} finally {
325-
exportLoading.value = false
326-
}
327-
}
328-
329-
// 重置密码
330-
const handleResetPwd = (row: UserVO) => {
331-
message
332-
.prompt('请输入"' + row.username + '"的新密码', t('common.reminder'))
333-
.then(async ({ value }) => {
334-
await resetUserPwdApi(row.id, value)
335-
message.success('修改成功,新密码是:' + value)
336-
})
337-
.catch((e) => {
338-
console.error(e)
339-
})
327+
// 重置的二次确认
328+
const result = await message.prompt(
329+
'请输入"' + row.username + '"的新密码',
330+
t('common.reminder')
331+
)
332+
const password = result.value
333+
// 发起重置
334+
await UserApi.resetUserPwd(row.id, password)
335+
message.success('修改成功,新密码是:' + password)
336+
} catch {}
340337
}
341338
342-
// 分配角色
339+
/** 分配角色 */
343340
const assignRoleFormRef = ref()
344-
const handleRole = (row: UserVO) => {
345-
assignRoleFormRef.value?.openForm(row)
341+
const handleRole = (row: UserApi.UserVO) => {
342+
assignRoleFormRef.value.open(row)
346343
}
347344
348345
/** 初始化 */

0 commit comments

Comments
 (0)