diff --git a/src/views/permissions/permission.vue b/src/views/permissions/permission.vue index 7c77d59..69b9b83 100644 --- a/src/views/permissions/permission.vue +++ b/src/views/permissions/permission.vue @@ -4,10 +4,11 @@ import ElementPlus from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus' import axios from 'axios' import moment from 'moment' -import {InfoFilled, UserFilled} from '@element-plus/icons-vue' +import { InfoFilled, UserFilled } from '@element-plus/icons-vue' import _ from 'lodash' import request from '@/util/http' import API from '@/util/http' +import { } from 'vue'; // 客户明细表格 什么表格??????? const tableData = ref([]) const roleData = ref([]) @@ -44,8 +45,6 @@ const market = ref([]) const postiton = ref([]) // 新增用户对象 const userAddObj = ref({}) -// 新增角色对象 -const permissionAddObj = ref({}) // 新增角色弹窗 const permissionAddVisible = ref(false) // 新增用户权限对象,机器码要实现存储多个,addMachineIdInput方法实现 @@ -67,6 +66,7 @@ const addRole = ref({ grade: '', market: '' }) +const addRoleMarket = ref([]) // 新增角色的权限列表 const permissionSelect = ref() //这是获取用户信息的接口 @@ -273,7 +273,13 @@ const userAddInit = function () { } // 新增角色初始化 const permissionAddInit = function () { - permissionAddObj.value = {} + const addRole = ref({ + roleName: '', + parentId: null, + checkedKeys: [], + grade: '', + market: '' + }) openPermissionAddVisible() } //新增用户 @@ -600,8 +606,13 @@ const handleAddRole = async function () { "market": addRole.value.market } }) - console.log('成功了,看看addRole', addRole.value) - closePermissionAddVisible() + if (res.code == 200) { + ElMessage.success('角色' + addRole.value.roleName + '添加成功') + console.log('成功了,看看addRole', addRole.value) + closePermissionAddVisible() + } else { + ElMessage.error(res.msg) + } } catch (error) { console.log('请求失败', error) console.log('失败,看看addRole', addRole.value); @@ -670,6 +681,37 @@ const getLists = async function () { } console.log('看看data', data.value) console.log('parentID:', addRole.value.parentId, 'roleId:', roleId) + if (addRole.value.parentId) { + const result = await API({ + url: '/general/roleMarket', + data: { id: addRole.value.parentId } + }) + if (result.code == 200) { + if (typeof result.data === 'string' && result.data) { + addRoleMarket.value = result.data.split(','); + } else if (Array.isArray(result.data)) { + addRoleMarket.value = result.data + } + else { + addRoleMarket.value = []; + } + } else { + ElMessage.error('该上级角色无所属地区') + console.log('该上级角色无所属地区'); + + } + console.log('addRoleMarket.value', addRoleMarket.value); + } else { + if (typeof adminData.value.markets === 'string' && adminData.value.markets) { + addRoleMarket.value = adminData.value.markets.split(','); + } else if (Array.isArray(adminData.value.markets)) { + addRoleMarket.value = adminData.value.markets + } + else { + addRoleMarket.value = []; + } + } + } catch (error) { console.log('请求失败', error) } @@ -684,8 +726,8 @@ const handleMarketChange = (values) => { // 如果选择了总部,只保留总部 addAdmin.value.market = ['总部']; } - console.log('看看现在的地区',addAdmin.value.market); - + console.log('看看现在的地区', addAdmin.value.market); + }; const includeHq = computed(() => { const i = addAdmin.value.market.includes('总部') @@ -702,13 +744,59 @@ const EdithandleMarketChange = (values) => { // 如果选择了总部,只保留总部 permissionEditObj.value.market = ['总部']; } - console.log('看看现在的地区',permissionEditObj.value.market); - + console.log('看看现在的地区', permissionEditObj.value.market); + +}; +const handleCheckChange = async (checkedNodes, checkedInfo) => { + const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo; + + // 判断是否有选中的节点(避免空数组报错) + if (allCheckedNodes.length === 0) return; + // 取第一个选中的节点 + const node = allCheckedNodes[0]; + // 选中状态 + const checked = checkedKeys.includes(node.id); + + console.log('checkedInfo', checkedInfo); + console.log('node', node); + console.log('checked', checked); + + if (checked) { + const newCheckedKeys = [...checkedInfo.checkedKeys]; + console.log('初始选中项:', newCheckedKeys); + // 执行递归前先清空可能的重复父级(可选优化) + const uniqueKeys = [...new Set(newCheckedKeys)]; + + selectParentNodes(data.value, node.id, uniqueKeys); + console.log('包含父级的选中项:', uniqueKeys); + addRole.value.checkedKeys = uniqueKeys; + } else { + addRole.value.checkedKeys = checkedInfo.checkedKeys; + console.log('else'); + + } }; -const handleCheckChange = (checkedNodes, { checkedKeys }) => { - addRole.value.checkedKeys = checkedKeys; -} +const selectParentNodes = (treeData, nodeId, checkedKeys) => { + if (!Array.isArray(treeData)) return false; + + for (const item of treeData) { + if (item.children && Array.isArray(item.children) && item.children.length > 0) { + const found = selectParentNodes(item.children, nodeId, checkedKeys); + if (found) { + // 避免重复添加父级 + if (!checkedKeys.includes(item.id)) { + checkedKeys.push(item.id); + } + return true; + } + } + if (item.id === nodeId) { + return true; + } + } + return false; +}; //点击角色权限菜单树点击展示逻辑 const menuTreeVisible = ref(false); const currentRoleMenuTree = ref([]); @@ -742,7 +830,7 @@ const confirmResetPassword = async function () { // 处理markets数据 if (typeof adminData.value.markets === 'string' && adminData.value.markets) { adminData.value.markets = adminData.value.markets.split(','); - }else if(Array.isArray(adminData.value.markets)){ + } else if (Array.isArray(adminData.value.markets)) { // 不处理 } else { @@ -755,7 +843,7 @@ const confirmResetPassword = async function () { // 权限检查 if (adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部') { - console.log('符合条件,可以操作',adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部'); + console.log('符合条件,可以操作', adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部'); const params = { account: currentRow.value.account, } @@ -790,54 +878,6 @@ const confirmResetPassword = async function () { const cancelResetPassword = function () { resetConfirmVisible.value = false } - -/*//用户密码重置 -const resetPassword = function (row) { - console.log('adminData.value.markets', adminData.value.markets); - - // 处理markets数据 - if (typeof adminData.value.markets === 'string' && adminData.value.markets) { - adminData.value.markets = adminData.value.markets.split(','); - } else { - adminData.value.markets = []; - } - - if (adminData.value.markets.includes(row.market)||adminData.value.markets=='总部') { - console.log('符合条件,可以操作'); - // 用then处理确认,catch处理取消和错误 - ElMessageBox.confirm( - `确认重置该账号密码?`, - '提示', - { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: "warning", - lockScroll: false - } - ).then(async () => { - // 仅当用户确认时执行 - try { - const res = await API({ - url: '/admin/reset', - data: { account: row.account } - }); - if (res.code === 200) { - ElMessage.success(res.data); - } - } catch (error) { - ElMessage.error('请求失败: ' + (error.message || error)); - } - }).catch(() => { - // 取消操作,可选择性添加日志 - console.log('用户取消了重置密码操作'); - }); - }else{ - ElMessage.error('您没有修改'+row.market+'地区的用户密码的权限') - } - - -}*/ - const Rolerules = reactive({ roleName: [ { required: true, message: '请输入角色名称', trigger: 'blur' }, @@ -849,6 +889,20 @@ const Rolerules = reactive({ grade: [ { required: true, message: '请输入优先级', trigger: 'blur' }, { pattern: /^[1-9]\d{0,2}$/, message: '优先级应为1-999的数字', trigger: 'blur' } + ], + checkedKeys: [ + { + required: true, + message: '请选择权限列表', + trigger: 'change', // 选框变化或提交时触发,可根据实际调整 + validator: (rule, value, callback) => { + if (value && value.length > 0) { + callback(); // 有选中项,校验通过 + } else { + callback(new Error('请选择权限列表')); // 未选中,抛出错误提示 + } + } + } ] }); // 挂载 @@ -1119,7 +1173,8 @@ onMounted(async function () { - + @@ -1178,7 +1233,7 @@ onMounted(async function () { - + @@ -1213,13 +1268,12 @@ onMounted(async function () { - + - +