From 13467ba2fff34794378462e129b1407ce4ebabb0 Mon Sep 17 00:00:00 2001 From: lihui Date: Mon, 4 Aug 2025 16:31:12 +0800 Subject: [PATCH] =?UTF-8?q?refactor=EF=BC=9A=E5=9C=B0=E5=8C=BA=E7=BA=A7?= =?UTF-8?q?=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/audit/gold/rechargeAudit.vue | 2 +- src/views/consume/gold/coinConsumeDetail.vue | 80 ++------ src/views/permissions/userPermission.vue | 260 +++++++++++++++++++------ src/views/recharge/gold/coinRechargeDetail.vue | 98 ++++++---- src/views/refund/gold/coinRefundDetail.vue | 77 ++------ src/views/usergold/gold/clientCountBalance.vue | 84 ++------ src/views/usergold/gold/clientCountDetail.vue | 77 ++------ 7 files changed, 325 insertions(+), 353 deletions(-) diff --git a/src/views/audit/gold/rechargeAudit.vue b/src/views/audit/gold/rechargeAudit.vue index 812f437..ecd9984 100644 --- a/src/views/audit/gold/rechargeAudit.vue +++ b/src/views/audit/gold/rechargeAudit.vue @@ -95,7 +95,7 @@ diff --git a/src/views/consume/gold/coinConsumeDetail.vue b/src/views/consume/gold/coinConsumeDetail.vue index fb5fed0..a9087eb 100644 --- a/src/views/consume/gold/coinConsumeDetail.vue +++ b/src/views/consume/gold/coinConsumeDetail.vue @@ -29,7 +29,7 @@ const tableData = ref([]) const consumeUser = ref({ jwcode: null, payPlatform: "", - markets: [], + market: "", startTime: '', endTime: '', @@ -63,7 +63,7 @@ const getTime = ref({ const activity = ref([]) // 搜索地区列表 -const markets = ref([]) +const market = ref("") // 新增排序字段和排序方式 const sortField = ref('') @@ -115,7 +115,7 @@ const goods = ref([]) const totalGoldSearch = ref({ jwcode: null, payPlatform: "", - markets: [], + market:"" , startTime: "", endTime: "", goodsName: "" @@ -194,7 +194,7 @@ const ConsumeSelectBy = async function (val) { totalGoldSearch.value.startTime = consumeUser.value.startTime totalGoldSearch.value.endTime = consumeUser.value.endTime totalGoldSearch.value.payPlatform = consumeUser.value.payPlatform - totalGoldSearch.value.markets = consumeUser.value.markets + totalGoldSearch.value.market = consumeUser.value.market totalGoldSearch.value.goodsName = consumeUser.value.goodsName totalGoldSearch.value.jwcode = consumeUser.value.jwcode // @@ -267,7 +267,7 @@ const reset = function () { consumeUser.value.goodsName = '' - consumeUser.value.markets = [] + consumeUser.value.market = "" consumeUser.value.payPlatform = '' @@ -396,7 +396,7 @@ const exportExcel = async function () { consumeUser: { jwcode: consumeUser.value.jwcode || '', payPlatform: consumeUser.value.payPlatform || '', - markets: consumeUser.value.markets || [], + marketss: consumeUser.value.market || "", startTime: consumeUser.value.startTime || '', endTime: consumeUser.value.endTime || '', goodsName: consumeUser.value.goodsName || '', @@ -483,63 +483,16 @@ const getTagText = (state) => { } } // 存储地区选择变化 -const selectedMarketPath = ref([]) -//处理地区选择变化 +const selectedMarketPath = ref("") const handleMarketChange = (value) => { - if (Array.isArray(value) && value.length > 0) { - const ids = new Set(); - - value.forEach(path => { - const lastName = path[path.length - 1]; - const id = reverseMarketMapping[lastName]; - if (id) ids.add(Number(id)); - }); - - // 添加额外处理:如果一个父节点下所有子节点都被选中,则把父节点也加入 - const getAllLeafNames = (nodes) => { - const leafNames = []; - - const traverse = (node, parentName = null) => { - if (!node.children || node.children.length === 0) { - leafNames.push({name: node.label, parent: parentName}); - } else { - node.children.forEach(child => traverse(child, node.label)); - } - }; - - nodes.forEach(node => traverse(node)); - return leafNames; - }; - - const leafNameMap = getAllLeafNames(markets.value); // 所有叶子节点和对应父级名称 - - // 列表构建 - const parentToChildren = {}; - leafNameMap.forEach(({name, parent}) => { - if (!parentToChildren[parent]) parentToChildren[parent] = []; - parentToChildren[parent].push(name); - }); - - // 构建当前被选中的叶子节点 - const selectedLeafNames = value.map(path => path[path.length - 1]); - - // 如果 parent 下所有子节点都选中了,就把 parent 加进来 - Object.entries(parentToChildren).forEach(([parent, children]) => { - const allChildrenSelected = children.every(child => selectedLeafNames.includes(child)); - if (allChildrenSelected && reverseMarketMapping[parent]) { - ids.add(Number(reverseMarketMapping[parent])); - } - }); - - consumeUser.value.markets = Array.from(ids); + if (value && value.length > 0) { + const lastValue = value[value.length - 1] + consumeUser.value.market = reverseMarketMapping[lastValue] } else { - consumeUser.value.markets = []; + consumeUser.value.market = '' } +} - console.log('最终映射后的 market IDs:', consumeUser.value.markets); -}; - -const props = {multiple: true} // 获取地区,修改为级联下拉框 const getMarket = async function () { try { @@ -569,8 +522,8 @@ const getMarket = async function () { }); }; // 存储地区信息 - markets.value = transformTree(result.data) - console.log('转换后的地区树==============', markets.value) + market.value = transformTree(result.data) + console.log('转换后的地区树==============', market.value) } catch (error) { console.log('请求失败', error) } @@ -603,14 +556,11 @@ const getMarket = async function () { 所属地区: diff --git a/src/views/permissions/userPermission.vue b/src/views/permissions/userPermission.vue index c9057d0..127019f 100644 --- a/src/views/permissions/userPermission.vue +++ b/src/views/permissions/userPermission.vue @@ -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 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('总部'); - if (hasHeadquarters) { - // 如果选择了总部,只保留总部 - permissionEditObj.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 = '' } - console.log('看看现在的地区', permissionEditObj.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 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 = []; + } }; + +// 计算属性:控制级联选择器的选项禁用状态 +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,37 +831,37 @@ const cancelResetPassword = function () { } // 为提交时查找父节点的辅助函数 - const selectParentNodesForSubmit = (treeData, nodeId, checkedKeys) => { - if (!Array.isArray(treeData)) return false; - - for (const item of treeData) { - // 先检查子节点 - if (item.children && item.children.length > 0) { - const foundInChildren = selectParentNodesForSubmit(item.children, nodeId, checkedKeys); - if (foundInChildren) { - // 找到子节点后添加当前节点(父节点) - checkedKeys.add(item.id); - return true; - } - } +const selectParentNodesForSubmit = (treeData, nodeId, checkedKeys) => { + if (!Array.isArray(treeData)) return false; - // 检查当前节点是否为目标节点 - if (item.id === nodeId) { + for (const item of treeData) { + // 先检查子节点 + if (item.children && item.children.length > 0) { + const foundInChildren = selectParentNodesForSubmit(item.children, nodeId, checkedKeys); + if (foundInChildren) { + // 找到子节点后添加当前节点(父节点) + checkedKeys.add(item.id); return true; } } - return false; - }; + // 检查当前节点是否为目标节点 + if (item.id === nodeId) { + return true; + } + } + return false; +}; - const throttledPermissionEdit = _.throttle(permissionEdit, 5000, { - trailing: false - }) + +const throttledPermissionEdit = _.throttle(permissionEdit, 5000, { + trailing: false +}) // 使用 _.throttle 并设置 trailing 为 false 实现严格节流,只执行一次 - const throttledPermissionAdd = _.throttle(permissionAdd, 5000, { - trailing: false - }) +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() }) -