|
|
@ -64,10 +64,18 @@ const addRole = ref({ |
|
|
|
parentId: null, |
|
|
|
checkedKeys: [], |
|
|
|
grade: '', |
|
|
|
market:'' |
|
|
|
market: '' |
|
|
|
}) |
|
|
|
// 新增角色的权限列表 |
|
|
|
const permissionSelect = ref() |
|
|
|
|
|
|
|
|
|
|
|
// 编辑用户权限对象 |
|
|
|
const permissionEditObj = ref({ |
|
|
|
checkedKeys: [], |
|
|
|
machineIds: [], |
|
|
|
machineId: '' |
|
|
|
}) |
|
|
|
const addMachineIdInput = function () { |
|
|
|
if (addAdmin.value.machineIds.length >= 1) { |
|
|
|
ElMessage.warning('设备数量已达上限') |
|
|
@ -75,9 +83,17 @@ const addMachineIdInput = function () { |
|
|
|
} |
|
|
|
addAdmin.value.machineIds.push('') |
|
|
|
} |
|
|
|
const UseraddMachineIdInput = function () { |
|
|
|
if (!permissionEditObj.value.machineIds) { |
|
|
|
permissionEditObj.value.machineIds = []; |
|
|
|
} |
|
|
|
if (permissionEditObj.value.machineIds.length >= 1) { |
|
|
|
ElMessage.warning('设备数量已达上限') |
|
|
|
return |
|
|
|
} |
|
|
|
permissionEditObj.value.machineIds.push('') |
|
|
|
} |
|
|
|
|
|
|
|
// 编辑用户权限对象 |
|
|
|
const permissionEditObj = ref({}) |
|
|
|
// 删除权限对象 |
|
|
|
const delObj = ref({}) |
|
|
|
// 删除角色对象 |
|
|
@ -313,6 +329,7 @@ const getRoles = async function () { |
|
|
|
|
|
|
|
// 打开编辑用户权限弹窗 |
|
|
|
const openUserEditVisible = function () { |
|
|
|
getRoles() |
|
|
|
userEditVisible.value = true |
|
|
|
} |
|
|
|
// 关闭编辑用户权限弹窗 |
|
|
@ -327,33 +344,113 @@ const permissionEditInit = async function (row) { |
|
|
|
permissionEditObj.value.account = row.account |
|
|
|
permissionEditObj.value.name = row.name |
|
|
|
permissionEditObj.value.market = row.market |
|
|
|
// 将字符串形式的 market 转换为数组 |
|
|
|
if (typeof row.market === 'string' && row.market) { |
|
|
|
permissionEditObj.value.market = row.market.split(','); |
|
|
|
} else { |
|
|
|
// 处理空值或非字符串情况 |
|
|
|
permissionEditObj.value.market = []; |
|
|
|
} |
|
|
|
permissionEditObj.value.postiton = row.postiton |
|
|
|
permissionEditObj.value.roleId = row.roleId |
|
|
|
const result = await request({ |
|
|
|
url: '/role/selectFather', |
|
|
|
data: row.roleId |
|
|
|
data: { |
|
|
|
id: row.roleId |
|
|
|
} |
|
|
|
}) |
|
|
|
console.log('初始查上级权限', result) |
|
|
|
permissionEditObj.value.parentId = result.data?.fatherId |
|
|
|
permissionEditObj.value.parentName = result.data?.fatherName |
|
|
|
getUserLists(row.roleId) |
|
|
|
|
|
|
|
|
|
|
|
//permissionEditObj.value.permission = row.permission |
|
|
|
//permissionEditObj.value.permission = row.permission |
|
|
|
|
|
|
|
permissionEditObj.value.roleName = row.roleName |
|
|
|
console.log('编辑用户权限', permissionEditObj.value) |
|
|
|
openUserEditVisible() |
|
|
|
} |
|
|
|
const collectIds = (tree) => { |
|
|
|
let ids = []; |
|
|
|
tree.forEach((node) => { |
|
|
|
ids.push(node.id); |
|
|
|
if (node.children && node.children.length > 0) { |
|
|
|
ids = ids.concat(collectIds(node.children)); |
|
|
|
} |
|
|
|
}); |
|
|
|
return ids; |
|
|
|
}; |
|
|
|
// 定义上级角色提示变量 |
|
|
|
const parentRoleTip = ref(''); |
|
|
|
//根据上级角色控制权限列表,选择角色调整上级角色 |
|
|
|
const getUserLists = async function (selectedRoleId) { |
|
|
|
try { |
|
|
|
console.log('selectedRoleId', selectedRoleId); |
|
|
|
permissionEditObj.value.parentId = null; |
|
|
|
permissionEditObj.value.parentName = ''; |
|
|
|
permissionEditObj.value.checkedKeys = []; |
|
|
|
parentRoleTip.value = ''; |
|
|
|
const parentRes = await request({ |
|
|
|
url: '/role/selectFather', |
|
|
|
data: { id: selectedRoleId } // 用选中的角色ID请求 |
|
|
|
}); |
|
|
|
console.log('parentRes', parentRes) |
|
|
|
const parentId = parentRes.data.fatherId; |
|
|
|
const parentName = parentRes.data.parentName; |
|
|
|
|
|
|
|
permissionEditObj.value.parentId = parentId; |
|
|
|
permissionEditObj.value.parentName = parentName; |
|
|
|
if (parentId == null) { |
|
|
|
// 无上级角色:显示提示 |
|
|
|
parentRoleTip.value = '该角色无上级角色'; |
|
|
|
} |
|
|
|
|
|
|
|
let roleId = permissionEditObj.value.parentId |
|
|
|
if (permissionEditObj.value.parentId === null || permissionEditObj.value.parentId === undefined) { |
|
|
|
roleId = 2 |
|
|
|
} |
|
|
|
const res = await API({ |
|
|
|
url: '/menu/tree', |
|
|
|
data: { id: roleId } |
|
|
|
}) |
|
|
|
data.value = res.data |
|
|
|
permissionEditObj.value.checkedKeys = collectIds(res.data) || []; |
|
|
|
console.log('看看data', data.value) |
|
|
|
console.log('看checkedKeys', permissionEditObj.value.checkedKeys) |
|
|
|
console.log('parentID:', permissionEditObj.value.parentId, 'roleId:', roleId) |
|
|
|
} catch (error) { |
|
|
|
console.log('请求失败', error) |
|
|
|
} |
|
|
|
} |
|
|
|
// 编辑用户权限提交 |
|
|
|
const permissionEdit = async function () { |
|
|
|
const { name: userName, roleName: oldRole, roleId: newRoleId } = permissionEditObj.value; |
|
|
|
const newRole = permissionList.value.find(item => item.value === newRoleId)?.label || '未知角色'; |
|
|
|
try { |
|
|
|
await ElMessageBox.confirm( |
|
|
|
`确认修改权限角色?\n您正在将【${userName}】的权限角色从【${oldRole}】修改为【${newRole}】\n变更后,该用户的可操作权限将同步更新为新角色配置,涉及数据访问、功能操作等权限变化,请谨慎确认。`, |
|
|
|
'警告', |
|
|
|
{ |
|
|
|
confirmButtonText: '确认', |
|
|
|
cancelButtonText: '取消', |
|
|
|
type: "warning", |
|
|
|
lockScroll: false |
|
|
|
} |
|
|
|
); |
|
|
|
closeUserEditVisible(); |
|
|
|
const result = await request({ |
|
|
|
url: '/permission/updateAdminRole', |
|
|
|
data: permissionEditObj.value |
|
|
|
}) |
|
|
|
console.log('请求成功3', result) |
|
|
|
ElMessage.success('编辑用户权限成功') |
|
|
|
get() |
|
|
|
closeUserEditVisible() |
|
|
|
}); |
|
|
|
await ElMessageBox.alert( |
|
|
|
`用户${userName}的权限角色已更改为【${newRole}】`, |
|
|
|
'成功', |
|
|
|
{ |
|
|
|
confirmButtonText: '确定', |
|
|
|
type: 'success' // 设置为 success 类型 |
|
|
|
} |
|
|
|
); |
|
|
|
get(); |
|
|
|
} catch (error) { |
|
|
|
console.log('编辑用户权限失败', error) |
|
|
|
ElMessage.error('编辑用户权限失败') |
|
|
@ -420,7 +517,7 @@ const handleAddRole = async function () { |
|
|
|
"menuIds": addRole.value.checkedKeys, |
|
|
|
"priority": addRole.value.grade, |
|
|
|
"fatherId": addRole.value.parentName, |
|
|
|
"market":addRole.value.market |
|
|
|
"market": addRole.value.market |
|
|
|
} |
|
|
|
}) |
|
|
|
console.log('成功了,看看addRole', addRole.value) |
|
|
@ -555,7 +652,7 @@ const handleCheckChange = (checkedNodes, { checkedKeys }) => { |
|
|
|
<template #default="scope"> |
|
|
|
<span>{{ |
|
|
|
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize |
|
|
|
}}</span> |
|
|
|
}}</span> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
|
|
|
@ -733,32 +830,50 @@ const handleCheckChange = (checkedNodes, { checkedKeys }) => { |
|
|
|
<!-- 这是编辑用户权限弹窗 --> |
|
|
|
<el-dialog v-model="userEditVisible" title="编辑用户权限" width="800px" :close-on-click-modal="false"> |
|
|
|
<el-form ref="Ref" :model="permissionEditObj" label-width="auto" style="max-width: 600px; align-items: center"> |
|
|
|
<el-form-item prop="account" label="用户账号:" required clearable> |
|
|
|
<el-form-item prop="account" label="用户账号:" clearable> |
|
|
|
<el-input v-model="permissionEditObj.account" placeholder="请输入OA号" style="width: 220px" disabled /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="name" label="用户名称:" required> |
|
|
|
<el-form-item prop="name" label="用户名称:"> |
|
|
|
<el-input v-model="permissionEditObj.name" placeholder="请输入用户名" style="width: 220px" disabled /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="market" label="所属地区:" required clearable> |
|
|
|
<el-form-item prop="market" label="所属地区:" clearable> |
|
|
|
<el-select multiple v-model="permissionEditObj.market" placeholder="请选择所属地区" style="width: 440px" clearable> |
|
|
|
<el-option v-for="item in market" :key="item" :label="item" :value="item" :disabled="includeHq(item)" /> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="postiton" label="职位:" required> |
|
|
|
<el-form-item prop="postiton" label="职位:"> |
|
|
|
<el-input v-model="permissionEditObj.postiton" placeholder="请输入职位" style="width: 220px" clearable /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="roleName" label="角色名称:" required> |
|
|
|
<el-input v-model="permissionEditObj.roleName" placeholder="请输入用户名" style="width: 220px" /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="parentName" label="上级角色:" required> |
|
|
|
<el-select v-model="permissionEditObj.parentName" placeholder="请选择上级角色" style="width: 220px"> |
|
|
|
<el-form-item prop="roleName" label="角色名称:"> |
|
|
|
<el-select v-model="permissionEditObj.roleId" placeholder="请选择角色" style="width: 220px" @change="getUserLists"> |
|
|
|
<el-option v-for="item in permissionList" :key="item.value" :label="item.label" |
|
|
|
:value="item.value"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="permissionSelect" label="权限列表:" required> |
|
|
|
<el-tree multiple v-model="permissionEditObj.permissionSelect" :data="data" :render-after-expand="false" |
|
|
|
show-checkbox style="width: 700px" /> |
|
|
|
<el-form-item prop="parentName" label="上级角色:"> |
|
|
|
<el-select v-model="permissionEditObj.parentId" placeholder="无上级角色" :disabled="!!parentRoleTip" |
|
|
|
style="width: 220px"> |
|
|
|
<el-option v-if="parentRoleTip" :key="0" :label="parentRoleTip" :value="null" disabled /> |
|
|
|
<el-option v-else v-for="item in permissionList" :key="item.value" :label="item.label" disabled |
|
|
|
:value="item.value"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="permissionSelect" label="权限列表:"> |
|
|
|
<el-tree :data="data" :disabled="true" show-checkbox node-key="id" |
|
|
|
:props="{ label: 'menuName', children: 'children' }" :default-checked-keys="permissionEditObj.checkedKeys"> |
|
|
|
</el-tree> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="machineId" label="机器码:"> |
|
|
|
<div style="display: flex; align-items: center; flex-wrap: wrap;"> |
|
|
|
<el-input v-model="permissionEditObj.machineId" placeholder="请输入机器码" style="width: 220px; margin-right: 10px;" |
|
|
|
clearable /> |
|
|
|
<el-button type="primary" @click="UseraddMachineIdInput">添加</el-button> |
|
|
|
<!-- 动态添加的机器码输入框 --> |
|
|
|
<div v-for="(item, index) in permissionEditObj.machineIds" :key="index" style="margin-left: 10px;"> |
|
|
|
<el-input v-model="permissionEditObj.machineIds[index]" placeholder="请输入机器码" |
|
|
|
style="width: 180px; margin-right: 10px;" /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</el-form> |
|
|
|
<div> |
|
|
|