From 8c4ef4b7fe3eab435c5ac4bc72dc1178679f0d26 Mon Sep 17 00:00:00 2001 From: lihuilin Date: Thu, 21 Aug 2025 11:13:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=AA=E5=A4=9A=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/audit/gold/rechargeAudit.vue | 6 +- src/views/permissions/rolePermission.vue | 370 ++++++++----------------- src/views/recharge/bean/beanOnlineRecharge.vue | 5 +- src/views/recharge/gold/coinRechargeDetail.vue | 4 +- src/views/refund/gold/coinRefundDetail.vue | 8 +- 5 files changed, 134 insertions(+), 259 deletions(-) diff --git a/src/views/audit/gold/rechargeAudit.vue b/src/views/audit/gold/rechargeAudit.vue index 89485b9..8dfd4c9 100644 --- a/src/views/audit/gold/rechargeAudit.vue +++ b/src/views/audit/gold/rechargeAudit.vue @@ -42,9 +42,9 @@ 总条数:{{ format3(stats.totalNum) }}条     充值新币:{{ format3(stats.permanentGolds) }}新币     - 总金币数:{{ format3(stats.permanentGolds + stats.freeGolds + stats.taskGolds) }}金币     - 永久金币:{{ format3(stats.permanentGolds) }}金币     - 免费金币:{{ format3(stats.freeGolds) }}金币     + 总金币数:{{ format3((stats.permanentGolds + stats.freeGolds + stats.taskGolds).toFixed(2)) }}金币     + 永久金币:{{ format3(stats.permanentGolds.toFixed(2)) }}金币     + 免费金币:{{ format3(stats.freeGolds.toFixed(2)) }}金币     -import {nextTick, onMounted, reactive, ref} from 'vue' -import {ElMessage} from 'element-plus' +import { nextTick, onMounted, reactive, ref } from 'vue' +import { ElMessage } from 'element-plus' import _ from 'lodash' import request from '@/util/http' import API from '@/util/http' -// 客户明细表格 什么表格??????? -const tableData = ref([]) +import { useAdminStore } from "@/store/index.js" +import { storeToRefs } from "pinia" +const adminStore = useAdminStore(); +const { adminData, menuTree } = storeToRefs(adminStore); +import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js" + +// 表单验证ref +const Ref = ref(null) const roleData = ref([]) const total = ref(100) -const roleTotal = ref(100)//角色分页 -// 搜索admin +const roleTotal = ref(100) +const treeRef = ref(null) const admin = ref({ account: '', market: '', postiton: '' }) -// 角色搜索 const role = ref({ name: '' }) -// 搜索对象 const getObj = ref({ pageNum: 1, pageSize: 10 }) -// 角色搜索对象 const getRoleObj = ref({ pageNum: 1, pageSize: 10 }) -//选地区 -const market = ref([]) -// 选部门 -const postiton = ref([]) - -// 新增角色弹窗 const permissionAddVisible = ref(false) -// 新增角色对象 const addRole = ref({ roleName: '', parentId: null, checkedKeys: [], - grade: '', market: '' }) const addRoleMarket = ref([]) - -//这是获取用户信息的接口 -const adminData = ref({}) -const getAdminData = async function () { - try { - const result = await API({url: '/admin/userinfo', data: {}}) - adminData.value = result - console.log('管理员用户信息', adminData.value) - } catch (error) { - console.log('请求失败', error) - } -} const viewRole = ref([]) const getRolePermission = async function () { const result = await request({ @@ -68,29 +51,6 @@ const getRolePermission = async function () { viewRole.value = collectIds(result.data) console.log('result111', viewRole.value); } - -const get = async function (val) { - try { - if (typeof val === 'number') { - getObj.value.pageNum = val - } - console.log('搜索参数', getObj.value, admin.value) - const result = await request({ - url: '/permission/getPermission', - data: { - ...getObj.value, - permission: { - ...admin.value - } - } - }) - tableData.value = result.data.list - console.log('tableData', tableData.value) - total.value = result.data.total - } catch (error) { - console.log('请求失败', error) - } -} const getRoleList = async function (val) { try { if (typeof val === 'number') { @@ -138,7 +98,6 @@ const trimJwCode = () => { admin.value.account = admin.value.account.replace(/\s/g, ''); } } - const searchRole = function () { trimJwCode(); getObj.value.pageNum = 1 @@ -164,32 +123,8 @@ const getRoleArea = async function () { console.log('请求失败', error) } } -const getArea = async function () { - try { - const result = await request({ - url: '/general/adminMarkets', - data: {account: adminData.value.account} - }) - market.value = result.data - } catch (error) { - console.log('请求失败', error) - } -} -// 获取部门 -const getStore = async function () { - try { - const result = await request({ - url: '/permission/getposition', - data: {} - }) - postiton.value = result.data - } catch (error) { - console.log('请求失败', error) - } -} // 新增角色弹窗 const openPermissionAddVisible = function () { - permissionAddVisible.value = true getRoles() getLists() @@ -205,18 +140,15 @@ const closePermissionAddVisible = function () { const permissionAddInit = function () { openPermissionAddVisible() } -const handleDialogClose = function(){ +const handleDialogClose = function () { closePermissionAddVisible() console.log('hhh'); } -// 表单验证ref -const Ref = ref(null) - // 权限类别 const permissionList = ref([]) const getRoles = async function () { try { - const res = await API({url: '/role/selectAll'}) + const res = await API({ url: '/role/selectAll' }) permissionList.value = res.data.map(item => ({ label: item.roleName, value: item.id @@ -237,7 +169,7 @@ const collectIds = (tree) => { } }); return ids; -}; +} //给data数据加上disabled属性,控制是否禁用 function processTreeData(data) { @@ -270,7 +202,6 @@ const handleAddRole = async function () { data: { "roleName": addRole.value.roleName, "menuIds": finalCheckedKeys, - "priority": addRole.value.grade, "fatherId": addRole.value.parentId, "market": addRole.value.market } @@ -278,14 +209,14 @@ const handleAddRole = async function () { if (res.code === 200) { ElMessage.success('角色' + addRole.value.roleName + '添加成功') console.log('成功了,看看addRole', addRole.value) - console.log('提交的权限ID列表:', finalCheckedKeys); + console.log('提交的权限ID列表:', finalCheckedKeys) closePermissionAddVisible() } else { ElMessage.error(res.msg) } } catch (error) { console.log('请求失败', error) - console.log('失败,看看addRole', addRole.value); + console.log('失败,看看addRole', addRole.value) } } @@ -311,7 +242,7 @@ const getLists = async function () { } const res = await API({ url: '/menu/tree', - data: {id: roleId} + data: { id: roleId } }) data.value = res.data let originalData = res.data.filter(item => item.id !== 9); // 排除权限管理 @@ -323,41 +254,39 @@ const getLists = async function () { console.log('parentID:', addRole.value.parentId, 'roleId:', roleId) -/* // 根据地区过滤金豆菜单 - if (addRole.value.market !== '总部') { - // 非总部地区:过滤掉金豆相关菜单 - originalData = filterGoldenBeanMenus(originalData); - } - data.value = originalData; // 更新菜单树数据*/ + /* // 根据地区过滤金豆菜单 + if (addRole.value.market !== '总部') { + // 非总部地区:过滤掉金豆相关菜单 + originalData = filterGoldenBeanMenus(originalData); + } + data.value = originalData; // 更新菜单树数据*/ if (addRole.value.parentId && addRole.value.parentId !== 2) { const result = await API({ url: '/general/roleMarket', - data: {id: addRole.value.parentId} + data: { id: addRole.value.parentId } }) if (result.code === 200) { if (typeof result.data === 'string' && result.data) { - addRoleMarket.value = result.data.split(','); + addRoleMarket.value = result.data.split(',') addRole.value.market = '' } else if (Array.isArray(result.data)) { addRoleMarket.value = result.data addRole.value.market = '' } else { - addRoleMarket.value = []; - addRole.value.market = '' + addRoleMarket.value = [] + addRole.value.market = '' } } else { ElMessage.error('该上级角色无归属地区') - console.log('该上级角色无归属地区'); + console.log('该上级角色无归属地区') } - console.log('addRoleMarket.value', addRoleMarket.value); + console.log('addRoleMarket.value', addRoleMarket.value) } else { addRoleMarket.value = RoleArea.value console.log('elseRoleArea', RoleArea); - } - } catch (error) { console.log('请求失败', error) } @@ -369,67 +298,62 @@ const goldenBeanMenuIds = new Set([ 41, 47, 46, 48, // 充值管理 -> 金豆充值 42, 50, 49, 52, 51, // 消耗管理 -> 金豆消耗 45, 53 // 客户账户明细 -> 金豆客户账户明细 -]); +]) const filterGoldenBeanMenus = (tree) => { return tree - .filter(item => { - // 排除金豆相关的顶层菜单 - if (goldenBeanMenuIds.has(item.id)) { - return false; - } - // 递归处理子菜单 - if (item.children && item.children.length > 0) { - item.children = filterGoldenBeanMenus(item.children); - } - return true; - }); -}; - - - -const treeRef = ref(null) + .filter(item => { + // 排除金豆相关的顶层菜单 + if (goldenBeanMenuIds.has(item.id)) { + return false + } + // 递归处理子菜单 + if (item.children && item.children.length > 0) { + item.children = filterGoldenBeanMenus(item.children) + } + return true + }) +} // 处理编辑角色权限时的勾选事件 const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => { - const {checkedKeys, checkedNodes: allCheckedNodes} = checkedInfo; + const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo // 判断是否有选中的节点 if (allCheckedNodes.length === 0) { - permissionEditRoleObj.value.checkedKeys = []; - return; + permissionEditRoleObj.value.checkedKeys = [] + return } // 由于设置了 check-strictly="false",Element Plus 会自动处理父子节点联动 // 我们只需要使用 checkedKeys,它已经包含了所有必要的节点ID - permissionEditRoleObj.value.checkedKeys = checkedKeys; + permissionEditRoleObj.value.checkedKeys = checkedKeys - console.log('编辑角色选中的权限ID:', checkedKeys); - console.log('选中的节点数量:', allCheckedNodes.length); + console.log('编辑角色选中的权限ID:', checkedKeys) + console.log('选中的节点数量:', allCheckedNodes.length) }; const handleCheckChange = async (checkedNodes, checkedInfo) => { - const {checkedKeys, checkedNodes: allCheckedNodes} = checkedInfo; + const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo // 判断是否有选中的节点 if (allCheckedNodes.length === 0) { - addRole.value.checkedKeys = []; - return; + addRole.value.checkedKeys = [] + return } // 创建一个Set存储所有需要选中的ID(包括父级) - const allKeys = new Set(checkedKeys); + const allKeys = new Set(checkedKeys) // 遍历所有选中的节点,为每个节点添加其父级 allCheckedNodes.forEach(node => { // 为每个选中的节点单独查找父级 - selectParentNodes(data.value, node.id, allKeys); + selectParentNodes(data.value, node.id, allKeys) }); // 将Set转换为数组并更新 - addRole.value.checkedKeys = Array.from(allKeys); - console.log('新增角色包含所有父级的选中项:', addRole.value.checkedKeys); -}; - + addRole.value.checkedKeys = Array.from(allKeys) + console.log('新增角色包含所有父级的选中项:', addRole.value.checkedKeys) +} const selectParentNodes = (treeData, nodeId, checkedKeys) => { - if (!Array.isArray(treeData)) return false; + if (!Array.isArray(treeData)) return false for (const item of treeData) { // 先检查子节点 @@ -438,32 +362,32 @@ const selectParentNodes = (treeData, nodeId, checkedKeys) => { if (foundInChildren) { // 找到子节点后添加当前节点(父节点) checkedKeys.add(item.id); - return true; + return true } } // 检查当前节点是否为目标节点 if (item.id === nodeId) { - return true; + return true } } - return false; + return false }; //点击角色权限菜单树点击展示逻辑 -const menuTreeVisible = ref(false); -const currentRoleMenuTree = ref([]); -const currentRoleName = ref(''); +const menuTreeVisible = ref(false) +const currentRoleMenuTree = ref([]) +const currentRoleName = ref('') const Rolecheckedkeys = ref([]) const showMenuTree = (treeData, roleName) => { currentRoleMenuTree.value = processTreeData(treeData) || []; - console.log('currentRoleMenuTree.value', currentRoleMenuTree.value); + console.log('currentRoleMenuTree.value', currentRoleMenuTree.value) Rolecheckedkeys.value = collectIds(treeData) - console.log('Rolecheckedkeys', Rolecheckedkeys.value); + console.log('Rolecheckedkeys', Rolecheckedkeys.value) - currentRoleName.value = roleName || '权限详情'; + currentRoleName.value = roleName || '权限详情' menuTreeVisible.value = true; -}; +} // 编辑角色对象 const permissionEditRoleObj = ref({ @@ -472,39 +396,37 @@ const permissionEditRoleObj = ref({ market: '', parentId: null, parentName: '', - checkedKeys: [], - grade: '', -}); + checkedKeys: [] +}) // 编辑角色弹窗 -const permissionEditRoleVisible = ref(false); +const permissionEditRoleVisible = ref(false) const collectIds2 = (tree) => { - let ids = []; + let ids = [] tree.forEach((node) => { // 如果当前节点没有 children 或 children 为空,说明是叶子节点 if (!node.children || node.children.length === 0) { - ids.push(node.id); + ids.push(node.id) } else { // 如果有 children,递归收集子节点的叶子节点 - ids = ids.concat(collectIds2(node.children)); + ids = ids.concat(collectIds2(node.children)) } - }); - return ids; -}; + }) + return ids +} // 编辑角色初始化 const permissionEditRoleInit = async function (row) { - console.log('row', row); - console.log('row.tree', row.tree); - permissionEditRoleObj.value = {}; - permissionEditRoleObj.value.id = row.id; - permissionEditRoleObj.value.roleName = row.roleName; - permissionEditRoleObj.value.market = row.market; - permissionEditRoleObj.value.parentId = row.fatherId; - permissionEditRoleObj.value.parentName = row.fatherName; - permissionEditRoleObj.value.grade = row.priority; + console.log('row', row) + console.log('row.tree', row.tree) + permissionEditRoleObj.value = {} + permissionEditRoleObj.value.id = row.id + permissionEditRoleObj.value.roleName = row.roleName + permissionEditRoleObj.value.market = row.market + permissionEditRoleObj.value.parentId = row.fatherId + permissionEditRoleObj.value.parentName = row.fatherName try { let roleId = permissionEditRoleObj.value.parentId; @@ -515,7 +437,7 @@ const permissionEditRoleInit = async function (row) { // 调用 /tree 接口,使用上级角色 ID 获取权限列表 const res = await API({ url: '/menu/tree', - data: {id: roleId} + data: { id: roleId } }); data.value = res.data; data.value = data.value.filter(item => item.id !== 9); @@ -575,7 +497,6 @@ const permissionEditRole = async function () { "id": permissionEditRoleObj.value.id, "roleName": permissionEditRoleObj.value.roleName, "menuIds": finalCheckedKeys, - "priority": permissionEditRoleObj.value.grade, "fatherId": permissionEditRoleObj.value.parentId, "market": permissionEditRoleObj.value.market } @@ -625,15 +546,11 @@ const selectParentNodesForSubmit = (treeData, nodeId, checkedKeys) => { const Rolerules = reactive({ roleName: [ - {required: true, message: '请输入角色名称', trigger: 'blur'}, - {min: 2, max: 20, message: '角色名称长度应在2-20个字符之间', trigger: 'blur'} + { required: true, message: '请输入角色名称', trigger: 'blur' }, + { min: 2, max: 20, message: '角色名称长度应在2-20个字符之间', trigger: 'blur' } ], market: [ - {required: true, message: '请选择归属地区', trigger: 'change'} - ], - grade: [ - {required: true, message: '请输入优先级', trigger: 'blur'}, - {pattern: /^[1-9]\d{0,2}$/, message: '优先级应为1-999的数字', trigger: 'blur'} + { required: true, message: '请选择归属地区', trigger: 'change' } ], checkedKeys: [ { @@ -657,10 +574,6 @@ const throttledHandleAddRole = _.throttle(handleAddRole, 5000, { // 挂载 onMounted(async function () { - await getAdminData() - await get() - await getArea() - await getStore() await getRoleList() await getRolePermission() await getRoleArea() @@ -669,20 +582,18 @@ onMounted(async function () {