Files
ebiz-ai-knowledge-manage/src/views/system/user/components/UserDialog.vue
陈昱达 d1016345bd feat(user): 优化用户管理功能
- 移除获取角色列表的冗余代码
- 添加角色列表数据传递和展示
-优化用户表单验证规则
- 美化用户角色展示样式
- 调整 API 请求配置
2025-05-22 18:05:37 +08:00

239 lines
6.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<r-dialog
:title="title"
:visible.sync="visible"
width="800px"
append-to-body
@close="handleClose"
>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="用户名称" prop="userName">
<el-input
v-model="form.userName"
placeholder="请输入用户名称"
clearable
size="small"
:disabled="isView"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="真实姓名" prop="realName">
<el-input
v-model="form.realName"
placeholder="请输入真实姓名"
clearable
size="small"
:disabled="isView"
/>
</el-form-item> </el-col
></el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="手机号" prop="mobile">
<el-input
v-model="form.mobile"
placeholder="请输入手机号"
clearable
size="small"
:disabled="isView"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input
v-model="form.email"
placeholder="请输入邮箱"
clearable
size="small"
:disabled="isView"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="用户角色" prop="sysUserRoleDTOs">
<el-select
v-model="selectedRoleIds"
multiple
placeholder="请选择用户角色"
clearable
size="small"
:disabled="isView"
@change="handleRolesChange"
>
<el-option
v-for="item in roleListData"
:key="item.id"
:label="item.roleName"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="默认密码" prop="password">
<el-input
placeholder="默认密码"
value="ebiz2025"
clearable
size="small"
:disabled="true"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer" v-if="!isView">
<el-button
type="primary"
size="medium"
:loading="loading"
@click="submitForm"
> </el-button
>
<el-button size="medium" @click="handleClose"> </el-button>
</div>
<div slot="footer" class="dialog-footer" v-else>
<el-button size="medium" @click="handleClose"> </el-button>
</div>
</r-dialog>
</template>
<script>
import { addUser, updateUser } from '@/api/generatedApi/system'
import { getRoleList } from '@/api/system/role'
export default {
name: 'UserDialog',
props: {
title: {
type: String,
default: '添加用户'
},
roleListData: {
type: Array,
default: () => []
},
visible: {
type: Boolean,
default: false
},
userData: {
type: Object,
default: () => ({})
},
isEdit: {
type: Boolean,
default: false
},
isView: {
type: Boolean,
default: false
}
},
data() {
return {
form: {
userCode: '',
userName: '',
realName: '',
mobile: '',
email: '',
sysUserRoleDTOs: []
},
selectedRoleIds: [], // 新增用于绑定选中的角色ID数组
rules: {
realName: [{ required: true, message: '请输入真实姓名' }],
userName: [{ required: true, message: '请输入用户名称' }],
email: [
{ required: true, message: '请输入邮箱' },
// 邮箱格式校验 正则
{
type: 'email',
message: '请输入正确的邮箱地址'
}
],
sysUserRoleDTOs: [
{ required: true, message: '请选择用户角色', trigger: 'blur' }
]
},
roleOptions: [
{ value: 'admin', label: '管理员' },
{ value: 'user', label: '普通用户' }
],
loading: false
}
},
watch: {
userData: {
handler(val) {
if (val && Object.keys(val).length > 0) {
this.form = { ...val }
this.selectedRoleIds = this.form.sysUserRoleDTOs.map(item => {
return item.roleId
})
}
},
immediate: true
}
},
created() {
// this.getRoleListData()
},
methods: {
handleClose() {
this.$refs.form.resetFields()
this.$emit('update:visible', false)
this.clearForm()
},
submitForm() {
// 查看模式下不允许提交
if (this.isView) {
return
}
this.$refs.form.validate(valid => {
if (valid) {
// this.loading = true
const submitData = { ...this.form }
// 根据是否是编辑模式调用不同的API
const apiRequest = this.isEdit
? updateUser(submitData)
: addUser(submitData)
apiRequest.then(() => {
this.$message.success(this.isEdit ? '修改成功' : '添加成功')
this.$emit('submit', submitData)
this.handleClose()
})
}
})
},
// 处理角色选择变化
handleRolesChange(roleIds) {
this.form.sysUserRoleDTOs = roleIds.map(id => ({ roleId: id }))
this.$refs.form.validateField('sysUserRoleDTOs')
},
clearForm() {
this.form = {}
this.selectedRoleIds = []
}
}
}
</script>
<style lang="scss" scoped>
.dialog-footer {
text-align: right;
}
</style>