|
|
@ -9,6 +9,9 @@ import API from '@/util/http' |
|
|
|
const tableData = ref([]) |
|
|
|
const total = ref(100) |
|
|
|
|
|
|
|
const propsAdduser = { |
|
|
|
multiple: true, // 多选 |
|
|
|
} |
|
|
|
// 搜索admin |
|
|
|
const admin = ref({ |
|
|
|
account: '', |
|
|
@ -173,17 +176,45 @@ const getRoleArea = async function () { |
|
|
|
console.log('请求失败', error) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 获取地区树 |
|
|
|
const marketsTree = ref([]) |
|
|
|
const getArea = async function () { |
|
|
|
try { |
|
|
|
const result = await request({ |
|
|
|
url: '/general/adminMarkets', |
|
|
|
data: {account: adminData.value.account} |
|
|
|
}) |
|
|
|
market.value = result.data |
|
|
|
// 发送POST请求 |
|
|
|
const result = await API({ |
|
|
|
|
|
|
|
url: '/market/selectMarket', |
|
|
|
}); |
|
|
|
// 将响应结果存储到响应式数据中 |
|
|
|
console.log('请求成功', result) |
|
|
|
|
|
|
|
// 递归转换树形结构为级联选择器需要的格式(跳过第一级节点) |
|
|
|
const transformTree = (nodes) => { |
|
|
|
// 直接处理第一级节点的子节点 |
|
|
|
const allChildren = nodes.flatMap(node => node.children || []); |
|
|
|
|
|
|
|
return allChildren.map(child => { |
|
|
|
const grandchildren = child.children && child.children.length |
|
|
|
? transformTree([child]) // 递归处理子节点 |
|
|
|
: null; |
|
|
|
|
|
|
|
return { |
|
|
|
value: child.name, |
|
|
|
label: child.name, |
|
|
|
children: grandchildren |
|
|
|
}; |
|
|
|
}); |
|
|
|
}; |
|
|
|
// 存储地区信息 |
|
|
|
marketsTree.value = transformTree(result.data) |
|
|
|
console.log('转换后的地区树==============', marketsTree.value) |
|
|
|
} catch (error) { |
|
|
|
console.log('请求失败', error) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 获取部门 |
|
|
|
const getStore = async function () { |
|
|
|
try { |
|
|
@ -260,6 +291,7 @@ const permissionAdd = async function () { |
|
|
|
"machineId": addAdmin.value.machineIds[0],//机器码 |
|
|
|
"remark": addAdmin.value.remark//备注 |
|
|
|
} |
|
|
|
console.log('提交前addAdmin market', addAdmin.value.market) |
|
|
|
const result = await request({ |
|
|
|
url: '/permission/addPermission', |
|
|
|
data: params |
|
|
@ -288,6 +320,20 @@ const Ref = ref(null) |
|
|
|
// 权限类别 |
|
|
|
const permissionList = ref([]) |
|
|
|
|
|
|
|
const getRoles = async function () { |
|
|
|
try { |
|
|
|
const res = await API({url: '/role/selectAll'}) |
|
|
|
permissionList.value = res.data.map(item => ({ |
|
|
|
label: item.roleName, |
|
|
|
value: item.id |
|
|
|
})) |
|
|
|
|
|
|
|
console.log('权限列表:', permissionList.value) |
|
|
|
} catch (error) { |
|
|
|
console.error('获取权限列表失败:', error) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 打开编辑用户权限弹窗 |
|
|
|
const openUserEditVisible = function () { |
|
|
@ -577,7 +623,8 @@ const handleCurrentChange = function (val) { |
|
|
|
|
|
|
|
const data = ref([]) |
|
|
|
|
|
|
|
const handleMarketChange = (values) => { |
|
|
|
// todo 处理地区选择变化 |
|
|
|
/*const handleMarketChange = (values) => { |
|
|
|
console.log('values的类型:', typeof values); |
|
|
|
console.log('values的值:', values); |
|
|
|
//判断是否选择了总部 |
|
|
@ -589,27 +636,99 @@ const handleMarketChange = (values) => { |
|
|
|
} |
|
|
|
console.log('看看现在的地区', addAdmin.value.market); |
|
|
|
|
|
|
|
};*/ |
|
|
|
|
|
|
|
|
|
|
|
// 存储地区选择变化 |
|
|
|
const selectedMarketPath = ref("") |
|
|
|
// 这个不转id |
|
|
|
const handleMarketChange = (value) => { |
|
|
|
if (value && value.length > 0) { |
|
|
|
admin.value.market = value[value.length - 1] |
|
|
|
} else { |
|
|
|
admin.value.market = '' |
|
|
|
} |
|
|
|
} |
|
|
|
// 修改地区选择处理函数 |
|
|
|
const handleMarketChangeAddUser = (value) => { |
|
|
|
if (Array.isArray(value) && value.length > 0) { |
|
|
|
// 提取所有选中项的最后一级 |
|
|
|
const selectedMarkets = value |
|
|
|
.map(path => Array.isArray(path) && path.length > 0 ? path[path.length - 1] : null) |
|
|
|
.filter(Boolean); |
|
|
|
|
|
|
|
// 检查是否包含总部 |
|
|
|
const hasHeadquarters = selectedMarkets.includes('总部'); |
|
|
|
|
|
|
|
if (hasHeadquarters) { |
|
|
|
// 如果包含总部,只保留总部 |
|
|
|
addAdmin.value.market = ['总部']; |
|
|
|
} else { |
|
|
|
// 不包含总部,保留所有选择 |
|
|
|
addAdmin.value.market = selectedMarkets; |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 未选择任何地区 |
|
|
|
addAdmin.value.market = []; |
|
|
|
} |
|
|
|
}; |
|
|
|
const includeHq = computed(() => { |
|
|
|
const i = addAdmin.value.market.includes('总部') |
|
|
|
return (item) => i && item != '总部' |
|
|
|
}) |
|
|
|
const EditincludeHq = computed(() => { |
|
|
|
const i = permissionEditObj.value.market.includes('总部') |
|
|
|
return (item) => i && item != '总部' |
|
|
|
}) |
|
|
|
const EdithandleMarketChange = (values) => { |
|
|
|
//判断是否选择了总部 |
|
|
|
const hasHeadquarters = values.includes('总部'); |
|
|
|
|
|
|
|
// 修改地区选择处理函数 |
|
|
|
const handleMarketChangeEditUser = (value) => { |
|
|
|
if (Array.isArray(value) && value.length > 0) { |
|
|
|
// 提取所有选中项的最后一级 |
|
|
|
const selectedMarkets = value |
|
|
|
.map(path => Array.isArray(path) && path.length > 0 ? path[path.length - 1] : null) |
|
|
|
.filter(Boolean); |
|
|
|
|
|
|
|
// 检查是否包含总部 |
|
|
|
const hasHeadquarters = selectedMarkets.includes('总部'); |
|
|
|
|
|
|
|
if (hasHeadquarters) { |
|
|
|
// 如果选择了总部,只保留总部 |
|
|
|
// 如果包含总部,只保留总部 |
|
|
|
permissionEditObj.value.market = ['总部']; |
|
|
|
} else { |
|
|
|
// 不包含总部,保留所有选择 |
|
|
|
permissionEditObj.value.market = selectedMarkets; |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 未选择任何地区 |
|
|
|
permissionEditObj.value.market = []; |
|
|
|
} |
|
|
|
console.log('看看现在的地区', permissionEditObj.value.market); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 计算属性:控制级联选择器的选项禁用状态 |
|
|
|
const addUserProps = computed(() => { |
|
|
|
// 判断是否已选择总部(注意:addAdmin.market 存储的是最后一级地区数组) |
|
|
|
const hasHeadquarters = addAdmin.value.market.includes('总部'); |
|
|
|
|
|
|
|
return { |
|
|
|
multiple: true, // 保留多选功能 |
|
|
|
// 选项禁用逻辑:如果已选择总部,则禁用非总部的选项 |
|
|
|
disabled: (data) => { |
|
|
|
return hasHeadquarters && data.label !== '总部'; |
|
|
|
|
|
|
|
} |
|
|
|
}; |
|
|
|
}); |
|
|
|
|
|
|
|
// 计算属性:控制级联选择器的选项禁用状态 |
|
|
|
const editUserProps = computed(() => { |
|
|
|
// 判断是否已选择总部(注意:addAdmin.market 存储的是最后一级地区数组) |
|
|
|
const hasHeadquarters = permissionEditObj.value.market.includes('总部'); |
|
|
|
|
|
|
|
return { |
|
|
|
multiple: true, // 保留多选功能 |
|
|
|
// 选项禁用逻辑:如果已选择总部,则禁用非总部的选项 |
|
|
|
disabled: (data) => { |
|
|
|
return hasHeadquarters && data.label !== '总部'; |
|
|
|
|
|
|
|
} |
|
|
|
}; |
|
|
|
}); |
|
|
|
|
|
|
|
const selectParentNodes = (treeData, nodeId, checkedKeys) => { |
|
|
|
if (!Array.isArray(treeData)) return false; |
|
|
|
|
|
|
@ -712,7 +831,7 @@ const cancelResetPassword = function () { |
|
|
|
} |
|
|
|
|
|
|
|
// 为提交时查找父节点的辅助函数 |
|
|
|
const selectParentNodesForSubmit = (treeData, nodeId, checkedKeys) => { |
|
|
|
const selectParentNodesForSubmit = (treeData, nodeId, checkedKeys) => { |
|
|
|
if (!Array.isArray(treeData)) return false; |
|
|
|
|
|
|
|
for (const item of treeData) { |
|
|
@ -733,16 +852,16 @@ const cancelResetPassword = function () { |
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const throttledPermissionEdit = _.throttle(permissionEdit, 5000, { |
|
|
|
const throttledPermissionEdit = _.throttle(permissionEdit, 5000, { |
|
|
|
trailing: false |
|
|
|
}) |
|
|
|
}) |
|
|
|
// 使用 _.throttle 并设置 trailing 为 false 实现严格节流,只执行一次 |
|
|
|
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, { |
|
|
|
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, { |
|
|
|
trailing: false |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
// 挂载 |
|
|
|
onMounted(async function () { |
|
|
@ -750,11 +869,11 @@ onMounted(async function () { |
|
|
|
await getPermission() |
|
|
|
await getArea() |
|
|
|
await getStore() |
|
|
|
await getRoles() |
|
|
|
await getRoleArea() |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
<template> |
|
|
@ -762,7 +881,7 @@ onMounted(async function () { |
|
|
|
<!--搜索菜单--> |
|
|
|
<el-row> |
|
|
|
<el-col> |
|
|
|
<el-card style="margin-bottom: 20px;margin-top:10px" > |
|
|
|
<el-card style="margin-bottom: 20px;margin-top:10px"> |
|
|
|
<div class="head-card"> |
|
|
|
<div class="head-card-element"> |
|
|
|
<el-text class="mx-1" size="large">OA号:</el-text> |
|
|
@ -770,9 +889,15 @@ onMounted(async function () { |
|
|
|
</div> |
|
|
|
<div class="head-card-element" style="margin-left: 50px"> |
|
|
|
<el-text class="mx-1" size="large">所属地区:</el-text> |
|
|
|
<el-select v-model="admin.market" placeholder="请选择所属地区" style="width: 240px" clearable> |
|
|
|
<el-option v-for="item in market" :key="item" :label="item" :value="item"/> |
|
|
|
</el-select> |
|
|
|
<el-cascader |
|
|
|
v-model="admin.market" |
|
|
|
:options="marketsTree" |
|
|
|
placeholder="请选择所属地区" |
|
|
|
clearable |
|
|
|
style="width:180px" |
|
|
|
@change="handleMarketChange" |
|
|
|
/> |
|
|
|
|
|
|
|
</div> |
|
|
|
<div class="head-card-element" style="margin-left: 50px"> |
|
|
|
<el-text class="mx-1" size="large">职位名称:</el-text> |
|
|
@ -880,10 +1005,19 @@ onMounted(async function () { |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item prop="market" label="所属地区:" required clearable> |
|
|
|
<el-select multiple v-model="addAdmin.market" placeholder="请选择所属地区" style="width: 220px" clearable |
|
|
|
@change="handleMarketChange"> |
|
|
|
<el-option v-for="item in market" :key="item" :label="item" :value="item" :disabled="includeHq(item)"/> |
|
|
|
</el-select> |
|
|
|
<el-cascader |
|
|
|
v-model="addAdmin.market" |
|
|
|
:options="marketsTree" |
|
|
|
placeholder="请选择所属地区" |
|
|
|
clearable |
|
|
|
collapse-tags |
|
|
|
collapse-tags-tooltip |
|
|
|
style="width:220px" |
|
|
|
@change="handleMarketChangeAddUser" |
|
|
|
:max-collapse-tags="2" |
|
|
|
:props="addUserProps" |
|
|
|
|
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="permission" label="角色名称:" required> |
|
|
|
<el-select v-model="addAdmin.permission" placeholder="请选择角色名称" style="width: 220px" clearable> |
|
|
@ -930,11 +1064,19 @@ onMounted(async function () { |
|
|
|
<el-input v-model="permissionEditObj.adminName" placeholder="请输入用户名" style="width: 220px" disabled/> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="market" label="所属地区:" clearable> |
|
|
|
<el-select multiple v-model="permissionEditObj.market" placeholder="请选择所属地区" style="width: 220px" |
|
|
|
<el-cascader |
|
|
|
v-model="permissionEditObj.market" |
|
|
|
:options="marketsTree" |
|
|
|
placeholder="请选择所属地区" |
|
|
|
clearable |
|
|
|
@change="EdithandleMarketChange"> |
|
|
|
<el-option v-for="item in market" :key="item" :label="item" :value="item" :disabled="EditincludeHq(item)"/> |
|
|
|
</el-select> |
|
|
|
collapse-tags |
|
|
|
collapse-tags-tooltip |
|
|
|
style="width:220px" |
|
|
|
@change="handleMarketChangeEditUser" |
|
|
|
:max-collapse-tags="2" |
|
|
|
:props="editUserProps" |
|
|
|
|
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="postiton" label="职位:"> |
|
|
|
<el-input v-model="permissionEditObj.postiton" placeholder="请输入职位" style="width: 220px" clearable/> |
|
|
|