mirror of
http://112.124.100.131/ebiz-ai/ebiz-ai-knowledge-manage.git
synced 2025-12-24 10:12:58 +08:00
refactor(user): 优化用户管理功能
- 移除用户编码字段 - 添加真实姓名字段- 更新用户角色选择功能 - 优化表单布局和样式- 调整菜单添加提示信息
This commit is contained in:
@@ -26,7 +26,7 @@
|
|||||||
:type="item.type"
|
:type="item.type"
|
||||||
:sortable="item.sortable"
|
:sortable="item.sortable"
|
||||||
:key="index"
|
:key="index"
|
||||||
:min-width="item.width ? item.width : 225"
|
:min-width="item.width ? item.width : null"
|
||||||
:fixed="item.fixed"
|
:fixed="item.fixed"
|
||||||
v-if="!item.type"
|
v-if="!item.type"
|
||||||
>
|
>
|
||||||
@@ -35,23 +35,46 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<!--表单校验-->
|
<!--表单校验-->
|
||||||
<el-form-item v-if="item.ruleCode" :prop="'data.' + scope.$index + '.' + item.ruleCode" :rules="item.ruleCode ? item.rules : []">
|
<el-form-item
|
||||||
|
v-if="item.ruleCode"
|
||||||
|
:prop="'data.' + scope.$index + '.' + item.ruleCode"
|
||||||
|
:rules="item.ruleCode ? item.rules : []"
|
||||||
|
>
|
||||||
<body-slot :item="item" :scope="scope" v-if="item.render" />
|
<body-slot :item="item" :scope="scope" v-if="item.render" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<body-slot :item="item" :scope="scope" v-if="!item.ruleCode && item.render" />
|
<body-slot
|
||||||
|
:item="item"
|
||||||
|
:scope="scope"
|
||||||
|
v-if="!item.ruleCode && item.render"
|
||||||
|
/>
|
||||||
<!--自定义render模板-->
|
<!--自定义render模板-->
|
||||||
<!--</el-form>-->
|
<!--</el-form>-->
|
||||||
<!--自带的btn 不能有prop 属性-->
|
<!--自带的btn 不能有prop 属性-->
|
||||||
<div v-if="!item.selfBtn && !item.prop && !item.type && !item.render" :fixed="item.fixed ? item.fixed : fixed">
|
<div
|
||||||
<el-button class="normal-button" :disabled="disabled" icon="el-icon-delete" @click="del(scope.row, scope.$index)"></el-button>
|
v-if="!item.selfBtn && !item.prop && !item.type && !item.render"
|
||||||
<el-button class="normal-button" icon="el-icon-edit-outline" :disabled="disabled" @click="edit(scope.row, scope.$index)"></el-button>
|
:fixed="item.fixed ? item.fixed : fixed"
|
||||||
|
>
|
||||||
|
<el-button
|
||||||
|
class="normal-button"
|
||||||
|
:disabled="disabled"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="del(scope.row, scope.$index)"
|
||||||
|
></el-button>
|
||||||
|
<el-button
|
||||||
|
class="normal-button"
|
||||||
|
icon="el-icon-edit-outline"
|
||||||
|
:disabled="disabled"
|
||||||
|
@click="edit(scope.row, scope.$index)"
|
||||||
|
></el-button>
|
||||||
</div>
|
</div>
|
||||||
<!--如果渲染的是selfBtn-->
|
<!--如果渲染的是selfBtn-->
|
||||||
<div v-if="item.selfBtn && !item.render">
|
<div v-if="item.selfBtn && !item.render">
|
||||||
<el-button
|
<el-button
|
||||||
v-for="(btn, btnIndex) in item.selfBtn"
|
v-for="(btn, btnIndex) in item.selfBtn"
|
||||||
:fixed="item.fixed ? item.fixed : fixed"
|
:fixed="item.fixed ? item.fixed : fixed"
|
||||||
:disabled="item.disabled !== undefined ? item.disabled : disabled"
|
:disabled="
|
||||||
|
item.disabled !== undefined ? item.disabled : disabled
|
||||||
|
"
|
||||||
:type="btn.type ? btn.type : 'primary'"
|
:type="btn.type ? btn.type : 'primary'"
|
||||||
:size="btn.size ? btn.size : 'mini'"
|
:size="btn.size ? btn.size : 'mini'"
|
||||||
:key="btnIndex"
|
:key="btnIndex"
|
||||||
@@ -62,7 +85,11 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<!--提示框 内部判断是否给单元格提示-->
|
<!--提示框 内部判断是否给单元格提示-->
|
||||||
<TooltipScope :scope="scope" :item="item" v-if="!item.type && !item.render && item.prop" />
|
<TooltipScope
|
||||||
|
:scope="scope"
|
||||||
|
:item="item"
|
||||||
|
v-if="!item.type && !item.render && item.prop"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!--有设置type 的表格 type 设置的是selection 和 index-->
|
<!--有设置type 的表格 type 设置的是selection 和 index-->
|
||||||
@@ -85,12 +112,22 @@
|
|||||||
v-else-if="item.type === 'radio'"
|
v-else-if="item.type === 'radio'"
|
||||||
>
|
>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-radio v-model="check" :label="scope.$index" @change="setCheck($event, scope)">{{ null }}</el-radio>
|
<el-radio
|
||||||
|
v-model="check"
|
||||||
|
:label="scope.$index"
|
||||||
|
@change="setCheck($event, scope)"
|
||||||
|
>{{ null }}</el-radio
|
||||||
|
>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</template>
|
</template>
|
||||||
<!--自定义默认按钮 ps:增加 一行 删除一行-->
|
<!--自定义默认按钮 ps:增加 一行 删除一行-->
|
||||||
<el-table-column v-if="deletion" :align="align" width="180" :fixed="fixed">
|
<el-table-column
|
||||||
|
v-if="deletion"
|
||||||
|
:align="align"
|
||||||
|
width="180"
|
||||||
|
:fixed="fixed"
|
||||||
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div>
|
<div>
|
||||||
<el-button
|
<el-button
|
||||||
@@ -229,7 +266,9 @@ export default {
|
|||||||
this.$emit('select-row', { row: scope.row, index: scope.$index })
|
this.$emit('select-row', { row: scope.row, index: scope.$index })
|
||||||
},
|
},
|
||||||
sortChange(sortData) {
|
sortChange(sortData) {
|
||||||
let filters = this.columns.filter(item => item.key === sortData.column.label)
|
let filters = this.columns.filter(
|
||||||
|
item => item.key === sortData.column.label
|
||||||
|
)
|
||||||
if (filters && filters.length > 0) {
|
if (filters && filters.length > 0) {
|
||||||
sortData.prop = filters[0].prop
|
sortData.prop = filters[0].prop
|
||||||
}
|
}
|
||||||
@@ -238,7 +277,9 @@ export default {
|
|||||||
},
|
},
|
||||||
//行拖拽
|
//行拖拽
|
||||||
rowDrop() {
|
rowDrop() {
|
||||||
const tbody = document.querySelector('.dragTable .el-table__body-wrapper tbody')
|
const tbody = document.querySelector(
|
||||||
|
'.dragTable .el-table__body-wrapper tbody'
|
||||||
|
)
|
||||||
Sortable.create(tbody, {
|
Sortable.create(tbody, {
|
||||||
animation: 180,
|
animation: 180,
|
||||||
onEnd: ({ newIndex, oldIndex }) => {
|
onEnd: ({ newIndex, oldIndex }) => {
|
||||||
@@ -249,7 +290,9 @@ export default {
|
|||||||
},
|
},
|
||||||
//列拖拽 目前有问题 暂未解决
|
//列拖拽 目前有问题 暂未解决
|
||||||
columnDrop() {
|
columnDrop() {
|
||||||
const wrapperTr = document.querySelector('.dragTable .el-table__header-wrapper tr')
|
const wrapperTr = document.querySelector(
|
||||||
|
'.dragTable .el-table__header-wrapper tr'
|
||||||
|
)
|
||||||
Sortable.create(wrapperTr, {
|
Sortable.create(wrapperTr, {
|
||||||
animation: 180,
|
animation: 180,
|
||||||
filter: '.el-table-column--selection',
|
filter: '.el-table-column--selection',
|
||||||
@@ -293,7 +336,9 @@ export default {
|
|||||||
addRow(row, index) {
|
addRow(row, index) {
|
||||||
let newRow = JSON.parse(JSON.stringify(row))
|
let newRow = JSON.parse(JSON.stringify(row))
|
||||||
for (let item in newRow) {
|
for (let item in newRow) {
|
||||||
newRow[item] = this.getDataType(Object.prototype.toString.call(newRow[item]))
|
newRow[item] = this.getDataType(
|
||||||
|
Object.prototype.toString.call(newRow[item])
|
||||||
|
)
|
||||||
}
|
}
|
||||||
this.data.splice(index + 1, 0, newRow)
|
this.data.splice(index + 1, 0, newRow)
|
||||||
this.$emit('buttonAdd', row, newRow)
|
this.$emit('buttonAdd', row, newRow)
|
||||||
@@ -307,7 +352,9 @@ export default {
|
|||||||
this.data.splice(index, 1)
|
this.data.splice(index, 1)
|
||||||
if (this.data.length === 0) {
|
if (this.data.length === 0) {
|
||||||
for (let item in newRow) {
|
for (let item in newRow) {
|
||||||
newRow[item] = this.getDataType(Object.prototype.toString.call(newRow[item]))
|
newRow[item] = this.getDataType(
|
||||||
|
Object.prototype.toString.call(newRow[item])
|
||||||
|
)
|
||||||
}
|
}
|
||||||
this.data.push(newRow)
|
this.data.push(newRow)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ export default {
|
|||||||
this.isView = false
|
this.isView = false
|
||||||
this.currentMenuData = {}
|
this.currentMenuData = {}
|
||||||
this.dialogVisible = true
|
this.dialogVisible = true
|
||||||
this.dialogTitle = '添加角色'
|
this.dialogTitle = '添加菜单'
|
||||||
},
|
},
|
||||||
handleEdit(row) {
|
handleEdit(row) {
|
||||||
this.isEdit = true
|
this.isEdit = true
|
||||||
@@ -219,7 +219,7 @@ export default {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
this.$message.error('获取角色详情出错', error)
|
this.$message.error('获取菜单详情出错', error)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
|
|||||||
@@ -1,48 +1,92 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog :title="title" :visible.sync="visible" width="800px" append-to-body @close="handleClose">
|
<el-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-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="用户编码" prop="userCode">
|
|
||||||
<el-input v-model="form.userCode" placeholder="请输入用户编码" clearable size="small" :disabled="isView || isEdit" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="用户名称" prop="userName">
|
<el-form-item label="用户名称" prop="userName">
|
||||||
<el-input v-model="form.userName" placeholder="请输入用户名称" clearable size="small" :disabled="isView" />
|
<el-input
|
||||||
|
v-model="form.userName"
|
||||||
|
placeholder="请输入用户名称"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
:disabled="isView"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="真实姓名" prop="realName">
|
<el-form-item label="真实姓名" prop="realName">
|
||||||
<el-input v-model="form.realName" placeholder="请输入真实姓名" clearable size="small" :disabled="isView" />
|
<el-input
|
||||||
</el-form-item>
|
v-model="form.realName"
|
||||||
</el-col>
|
placeholder="请输入真实姓名"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
:disabled="isView"
|
||||||
|
/>
|
||||||
|
</el-form-item> </el-col
|
||||||
|
></el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="手机号" prop="mobile">
|
<el-form-item label="手机号" prop="mobile">
|
||||||
<el-input v-model="form.mobile" placeholder="请输入手机号" clearable size="small" :disabled="isView" />
|
<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-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<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-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="用户角色" prop="sysUserRoleDTOs">
|
<el-form-item label="用户角色" prop="sysUserRoleDTOs">
|
||||||
<el-select v-model="selectedRoleIds" multiple placeholder="请选择用户角色" clearable size="small" :disabled="isView" @change="handleRolesChange">
|
<el-select
|
||||||
<el-option v-for="item in roleListData" :key="item.id" :label="item.roleName" :value="item.id" />
|
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-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer" v-if="!isView">
|
<div slot="footer" class="dialog-footer" v-if="!isView">
|
||||||
<el-button type="primary" size="small" :loading="loading" @click="submitForm">确 定</el-button>
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:loading="loading"
|
||||||
|
@click="submitForm"
|
||||||
|
>确 定</el-button
|
||||||
|
>
|
||||||
<el-button size="small" @click="handleClose">取 消</el-button>
|
<el-button size="small" @click="handleClose">取 消</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div slot="footer" class="dialog-footer" v-else>
|
<div slot="footer" class="dialog-footer" v-else>
|
||||||
@@ -92,11 +136,18 @@ export default {
|
|||||||
roleListData: [],
|
roleListData: [],
|
||||||
selectedRoleIds: [], // 新增,用于绑定选中的角色ID数组
|
selectedRoleIds: [], // 新增,用于绑定选中的角色ID数组
|
||||||
rules: {
|
rules: {
|
||||||
userCode: [{ required: true, message: '请输入用户编码', trigger: 'blur' }],
|
realName: [
|
||||||
userName: [{ required: true, message: '请输入用户名称', trigger: 'blur' }],
|
{ required: true, message: '请输入真实姓名', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
userName: [
|
||||||
|
{ required: true, message: '请输入用户名称', trigger: 'blur' }
|
||||||
|
],
|
||||||
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
|
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
|
||||||
},
|
},
|
||||||
roleOptions: [{ value: 'admin', label: '管理员' }, { value: 'user', label: '普通用户' }],
|
roleOptions: [
|
||||||
|
{ value: 'admin', label: '管理员' },
|
||||||
|
{ value: 'user', label: '普通用户' }
|
||||||
|
],
|
||||||
loading: false
|
loading: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -149,7 +200,9 @@ export default {
|
|||||||
const submitData = { ...this.form }
|
const submitData = { ...this.form }
|
||||||
|
|
||||||
// 根据是否是编辑模式调用不同的API
|
// 根据是否是编辑模式调用不同的API
|
||||||
const apiRequest = this.isEdit ? updateUser(submitData) : addUser(submitData)
|
const apiRequest = this.isEdit
|
||||||
|
? updateUser(submitData)
|
||||||
|
: addUser(submitData)
|
||||||
|
|
||||||
apiRequest
|
apiRequest
|
||||||
.then(response => {
|
.then(response => {
|
||||||
@@ -158,11 +211,16 @@ export default {
|
|||||||
this.$emit('submit', submitData)
|
this.$emit('submit', submitData)
|
||||||
this.handleClose()
|
this.handleClose()
|
||||||
} else {
|
} else {
|
||||||
this.$message.error(response.msg || (this.isEdit ? '修改失败' : '添加失败'))
|
this.$message.error(
|
||||||
|
response.msg || (this.isEdit ? '修改失败' : '添加失败')
|
||||||
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error(this.isEdit ? '修改用户出错:' : '添加用户出错:', error)
|
console.error(
|
||||||
|
this.isEdit ? '修改用户出错:' : '添加用户出错:',
|
||||||
|
error
|
||||||
|
)
|
||||||
this.$message.error(this.isEdit ? '修改用户出错' : '添加用户出错')
|
this.$message.error(this.isEdit ? '修改用户出错' : '添加用户出错')
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
|
|||||||
@@ -125,7 +125,6 @@ export default {
|
|||||||
currentPage: 1,
|
currentPage: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
columns: [
|
columns: [
|
||||||
{ prop: 'userCode', key: '用户编码' },
|
|
||||||
{ prop: 'userName', key: '用户名称' },
|
{ prop: 'userName', key: '用户名称' },
|
||||||
{ prop: 'realName', key: '真实姓名' },
|
{ prop: 'realName', key: '真实姓名' },
|
||||||
{ prop: 'mobile', key: '手机号' },
|
{ prop: 'mobile', key: '手机号' },
|
||||||
|
|||||||
Reference in New Issue
Block a user