diff --git a/src/router/index.js b/src/router/index.js index 63f6ee5..2b89dba 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -386,6 +386,7 @@ router.beforeEach(async (to, from, next) => { // 拿权限id userPermissionIds = getAllPermissionIds(menuTree.value) + console.log("userPermissionIds",userPermissionIds) // 2.4 权限验证(逻辑不变) console.log('to.meta:', to.meta) diff --git a/src/utils/menuTreePermission.js b/src/utils/menuTreePermission.js index da6a2ba..56899bd 100644 --- a/src/utils/menuTreePermission.js +++ b/src/utils/menuTreePermission.js @@ -49,8 +49,8 @@ export const permissionMapping = { refundWaitThough:40, // 退款审核通过 refundWaitReject:41, // 退款审核驳回 - beanWait:42, // 金豆审核待审核 - beanThough:43, // 金豆审核已通过 + beanWait:42, // 金豆审核待审核 + beanThrough:43, // 金豆审核已通过 beanReject:44, // 金豆审核已驳回 beanWaitShow:45, // 金豆审核待审核查看 beanWaitThough:46, // 金豆审核通过 diff --git a/src/utils/menuUtils.js b/src/utils/menuUtils.js index 6e903b7..9db9be8 100644 --- a/src/utils/menuUtils.js +++ b/src/utils/menuUtils.js @@ -42,12 +42,15 @@ export function findFirstThirdLevelMenu(menuList) { export const getRoutePath = (menu) => { // 路由映射表:key为接口menuName,value为对应路由路径 const routeMap = { - '工作台展示': '/workspace', + + '工作台查看': '/workbench', + '金币管理': '/goldManage', + '现金管理': '/moneyManage', '金币审核': '/audit', '金豆审核': '/beanAudit', - '汇率管理': '/rate', + '现金汇率': '/rate', '金币充值': '/coinRecharge', @@ -72,6 +75,9 @@ export const getRoutePath = (menu) => { '金币客户账户明细': '/usergold', '金豆客户账户明细': '/userbean', + + '用户管理': '/permissions/userPermission', + '角色管理': '/permissions/rolePermission', }; // 未匹配的菜单默认使用id作为路由(可根据实际需求调整) diff --git a/src/views/audit/bean/beanAudit.vue b/src/views/audit/bean/beanAudit.vue index 243953a..2f94bb6 100644 --- a/src/views/audit/bean/beanAudit.vue +++ b/src/views/audit/bean/beanAudit.vue @@ -132,6 +132,26 @@ const reason = ref('') const rejectRow = ref({ id: null })// 驳回行数据 + +// 操作权限(金豆审核相关,与充值权限格式对齐) +const hasbeanWait = ref(false) // 金豆审核待审核(对应beanWait:42) +const hasbeanThrough = ref(false) // 金豆审核已通过(对应beanThrough:43) +const hasbeanReject = ref(false) // 金豆审核已驳回(对应beanReject:44) +const hasbeanWaitShow = ref(false) // 金豆审核待审核查看(对应beanWaitShow:45) +const hasbeanWaitThough = ref(false) // 金豆审核通过(对应beanWaitThough:46) +const hasbeanWaitReject = ref(false) // 金豆审核驳回(对应beanWaitReject:47) + +// 初始化权限状态(补充金豆审核权限,与充值权限初始化逻辑并列) +const initPermissions = () => { + if (!menuTree.value || !menuTree.value.length) return; + // 2. 金豆审核相关权限初始化(新增,与充值权限结构一致) + hasbeanWait.value = hasMenuPermission(menuTree.value, permissionMapping.hasbeanWait); + hasbeanThrough.value = hasMenuPermission(menuTree.value, permissionMapping.hasbeanThrough); + hasbeanReject.value = hasMenuPermission(menuTree.value, permissionMapping.hasbeanReject); + hasbeanWaitShow.value = hasMenuPermission(menuTree.value, permissionMapping.hasbeanWaitShow); + hasbeanWaitThough.value = hasMenuPermission(menuTree.value, permissionMapping.hasbeanWaitThough); + hasbeanWaitReject.value = hasMenuPermission(menuTree.value, permissionMapping.hasbeanWaitReject); +}; const clicked = ref(false) // 状态常量 const STATUS = { diff --git a/src/views/audit/gold/audit.vue b/src/views/audit/gold/audit.vue index f39ae61..532f69b 100644 --- a/src/views/audit/gold/audit.vue +++ b/src/views/audit/gold/audit.vue @@ -22,6 +22,7 @@ import { useRouter, useRoute } from 'vue-router'; import { storeToRefs } from 'pinia'; import { useAdminStore } from '@/store/index.js'; import { hasMenuPermission, permissionMapping } from "@/utils/menuTreePermission.js"; +import { ElMessage } from 'element-plus'; const router = useRouter(); const route = useRoute(); @@ -33,6 +34,17 @@ const hasRecharge = ref(false); const hasRefund = ref(false); // 导航方法 const navigateTo = (name) => { + if(name == 'rechargeAudit'){ + if(!hasRecharge){ + ElMessage.error('您暂无充值审核操作权限') + return; + } + }else if(name = 'refundAudit'){ + if(!hasRefund){ + ElMessage.error('您暂无退款审核操作权限') + return; + } + } activeTab.value = name; router.push({ name }); }; @@ -42,8 +54,8 @@ const navigateTo = (name) => { const initPermissions = () => { if (!menuTree.value || !menuTree.value.length) return; - hasRecharge.value = hasMenuPermission(menuTree.value, permissionMapping.Recharge_Audit); - hasRefund.value = hasMenuPermission(menuTree.value, permissionMapping.Refund_Audit); + hasRecharge.value = hasMenuPermission(menuTree.value, permissionMapping.rechargeAudit); + hasRefund.value = hasMenuPermission(menuTree.value, permissionMapping.refundAudit); }; // 默认跳转逻辑 diff --git a/src/views/audit/gold/rechargeAudit.vue b/src/views/audit/gold/rechargeAudit.vue index 74c16f9..2b1feaa 100644 --- a/src/views/audit/gold/rechargeAudit.vue +++ b/src/views/audit/gold/rechargeAudit.vue @@ -42,7 +42,7 @@
重置 - 查询 + 查询
@@ -176,7 +176,7 @@ import { storeToRefs } from "pinia"; const adminStore = useAdminStore(); const { adminData, menuTree } = storeToRefs(adminStore); -import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js" +import { permissionMapping, hasMenuPermission } from "@/utils/menuTreePermission.js" import dayjs from "dayjs"; const defaultTime = [ @@ -221,6 +221,29 @@ const getObj = ref({ pageNum: 1, pageSize: 50 }) + +//操作权限 +const hasrechargeThrough = ref(false) // 充值审核已通过 +const hasrechargeReject = ref(false) // 充值审核已驳回 +const hasrechargeWait = ref(false) // 充值审核已驳回 +const hasrechargeWaitShow = ref(false) // 充值审核待审核查看 +const hasrechargeWaitThough = ref(false) // 充值审核通过 +const hasrechargeWaitReject = ref(false) // 充值审核驳回 + +// 初始化权限状态 +const initPermissions = () => { + if (!menuTree.value || !menuTree.value.length) return; + hasrechargeThrough.value = hasMenuPermission(menuTree.value, permissionMapping.rechargeThrough); + hasrechargeReject.value = hasMenuPermission(menuTree.value, permissionMapping.rechargeReject); + hasrechargeWait.value = hasMenuPermission(menuTree.value, permissionMapping.rechargeWait); + hasrechargeWaitShow.value = hasMenuPermission(menuTree.value, permissionMapping.rechargeWaitShow); + hasrechargeWaitThough.value = hasMenuPermission(menuTree.value, permissionMapping.rechargeWaitThough); + hasrechargeWaitReject.value = hasMenuPermission(menuTree.value, permissionMapping.hasrechargeWaitReject); + console.log(hasrechargeWaitThough.value) + console.log(hasrechargeWaitReject.value) + +}; + // 支付方式选项 const payModel = [ { @@ -282,6 +305,11 @@ const rules = reactive({ }) // 搜索方法 const getRecharge = async function (val) { + + if (!hasrechargeWaitShow) { + ElMessage.error('暂无权限') + return + } try { if (getTime.value && getTime.value.length === 2) { rechargeAudit.value.startTime = formatTime(getTime.value[0]) @@ -320,9 +348,13 @@ const getRecharge = async function (val) { } catch (error) { console.log('请求失败', error) } + } const getStats = async () => { + if (!hasrechargeWaitShow) { + return + } try { const params = { pageNum: getObj.value.pageNum, @@ -446,10 +478,22 @@ const adminReject = async function () { const handleClick = function (tab, event) { activeName.value = tab.props.name if (tab.props.name === 'wait') { + if(!hasrechargeWait){ + ElMessage.error('暂无权限') + return + } adminWait() } else if (tab.props.name === 'pass') { + if(!hasrechargeThrough){ + ElMessage.error('暂无权限') + return + } adminPass() } else if (tab.props.name === 'reject') { + if(!hasrechargeReject){ + ElMessage.error('暂无权限') + return + } adminReject() } } @@ -477,8 +521,11 @@ const handlePagination = (type, val) => { const clicked = ref(false); // 处理通过操作 const handleApprove = async (row) => { + if(!hasrechargeWaitThough){ + ElMessage.error('暂无权限') + return + } clicked.value = true - if (findMenuById(menuTree.value, permissionMapping.Recharge_Approval)) { try { const params = { orderCode: row.orderCode, @@ -495,27 +542,27 @@ const handleApprove = async (row) => { console.error('审核通过失败', error) ElMessage.error('操作失败') } - } else { - clicked.value = false - ElMessage.error('无权限') - } + } const showRejectDialog = (row) => { + if(!hasrechargeWaitReject){ + ElMessage.error('暂无权限') + return + } currentRecord.value = row rejectReason.value = '' - if (findMenuById(menuTree.value, permissionMapping.Recharge_Approval)) { - rejectDialogVisible.value = true - } else { - ElMessage.error('无权限') - } + rejectDialogVisible.value = true } //控制驳回确认按钮禁用状态 const cancelClicked = ref(false) // 处理驳回操作 const handleReject = async () => { + if(!hasrechargeWaitReject){ + ElMessage.error('暂无权限') + return + } cancelClicked.value = true - if (findMenuById(menuTree.value, permissionMapping.Recharge_Approval)) { if (!rejectReason.value.trim()) { ElMessage.warning('请输入驳回理由') @@ -539,10 +586,6 @@ const handleReject = async () => { console.error('驳回操作失败', error) ElMessage.error('操作失败') } - } else { - ElMessage.error('无权限') - cancelClicked.value = false - } } // 处理排序事件 const handleSortChange = (column) => { @@ -657,6 +700,8 @@ onMounted(async function () { await getRecharge() console.log("看看通信来的用户身份", adminData.value) await getStats() + + initPermissions() }) diff --git a/src/views/audit/gold/refundAudit.vue b/src/views/audit/gold/refundAudit.vue index 2f49ed2..22fcc34 100644 --- a/src/views/audit/gold/refundAudit.vue +++ b/src/views/audit/gold/refundAudit.vue @@ -21,13 +21,13 @@
所属地区: - +
-
+
{{ activeName === 'wait' ? '提交时间:' : '审核时间:' }} @@ -43,7 +43,7 @@
重置 - 查询 + 查询
@@ -169,9 +169,8 @@ import API from '@/util/http.js' import moment from 'moment' import { useAdminStore } from "@/store/index.js"; import { storeToRefs } from "pinia"; -import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js" import dayjs from "dayjs"; - +import { permissionMapping, hasMenuPermission } from "@/utils/menuTreePermission.js" const adminStore = useAdminStore(); const { adminData, menuTree } = storeToRefs(adminStore); const defaultTime = [ @@ -232,6 +231,28 @@ const activeName = ref('wait') const sortField = ref('') const sortOrder = ref('') const market = ref("") + +//退款操作权限 +const hasrefundThrough = ref(false) // 退款审核已通过 +const hasrefundReject = ref(false) // 退款审核已驳回 +const hasrefundWait = ref(false) // 退款审核待审核 +const hasrefundWaitShow = ref(false) // 退款审核待审核查看 +const hasrefundWaitThough = ref(false) // 退款审核通过 +const hasrefundWaitReject = ref(false) // 退款审核驳回 + +// 初始化权限状态 +const initPermissions = () => { + if (!menuTree.value || !menuTree.value.length) return; + // 退款相关权限 + hasrefundThrough.value = hasMenuPermission(menuTree.value, permissionMapping.refundThrough); + hasrefundReject.value = hasMenuPermission(menuTree.value, permissionMapping.refundReject); + hasrefundWait.value = hasMenuPermission(menuTree.value, permissionMapping.refundWait); + hasrefundWaitShow.value = hasMenuPermission(menuTree.value, permissionMapping.refundWaitShow); + hasrefundWaitThough.value = hasMenuPermission(menuTree.value, permissionMapping.refundWaitThough); + hasrefundWaitReject.value = hasMenuPermission(menuTree.value, permissionMapping.refundWaitReject); + console.log('退款权限赋值完成'); + +}; // 处理排序事件 const handleSortChange = (column) => { if (column.prop === 'sumGold') { @@ -256,6 +277,10 @@ const handleSortChange = (column) => { } // 显示驳回对话框 const showRejectDialog = (row) => { + if (!hasrefundWaitReject) { + ElMessage.error('暂无权限') + return + } scopeValue.value = row rejectReason.value = '' rejectDialogVisible.value = true @@ -272,6 +297,10 @@ const getRefundGoods = async () => { // 搜索方法 const get = async function (val) { + if (!hasrefundWaitShow) { + ElMessage.error('暂无权限') + return + } try { if (typeof val === 'number') { pagination.value.pageNum = val @@ -319,65 +348,67 @@ const get = async function (val) { const clicked = ref(false); // 通过 const handleApprove = async (row) => { + if (!hasrefundWaitThough) { + ElMessage.error('暂无权限') + return + } clicked.value = true - if (findMenuById(menuTree.value, permissionMapping.Refund_Approval)) { - try { - const params = { - orderCode: row.orderCode, - auditId: adminData.value.id, - action: 1,// action的1是通过,2是驳回 - rejectReason: '' - } - await API({ url: '/audit/audit', data: params }) - ElMessage.success('审核通过成功') - await get() - clicked.value = false - await getStats() - } catch (error) { - console.error('审核通过失败', error) - ElMessage.error('操作失败') + try { + const params = { + orderCode: row.orderCode, + auditId: adminData.value.id, + action: 1,// action的1是通过,2是驳回 + rejectReason: '' } - } else { - ElMessage.warning('没有权限') + await API({ url: '/audit/audit', data: params }) + ElMessage.success('审核通过成功') + await get() clicked.value = false + await getStats() + } catch (error) { + console.error('审核通过失败', error) + ElMessage.error('操作失败') } + } //控制驳回确认按钮禁用状态 const cancelClicked = ref(false) // 处理驳回操作 const handleReject = async () => { + if (!hasrefundWaitReject) { + ElMessage.error('暂无权限') + return + } cancelClicked.value = true - if (findMenuById(menuTree.value, permissionMapping.Refund_Approval)) { - if (!rejectReason.value.trim()) { - ElMessage.warning('请输入驳回理由') - return - } - try { - const params = { - orderCode: scopeValue.value.orderCode, - auditId: adminData.value.id, - action: 2, - rejectReason: rejectReason.value - } - await API({ url: '/audit/audit', data: params }) - ElMessage.success('驳回成功') - rejectDialogVisible.value = false - await get() - cancelClicked.value = false - await getStats() - console.log('看看驳回参数', params) - } catch (error) { - console.error('驳回失败', error) - ElMessage.error('操作失败') + if (!rejectReason.value.trim()) { + ElMessage.warning('请输入驳回理由') + return + } + try { + const params = { + orderCode: scopeValue.value.orderCode, + auditId: adminData.value.id, + action: 2, + rejectReason: rejectReason.value } - } else { - ElMessage.warning('没有权限') + await API({ url: '/audit/audit', data: params }) + ElMessage.success('驳回成功') + rejectDialogVisible.value = false + await get() cancelClicked.value = false + await getStats() + console.log('看看驳回参数', params) + } catch (error) { + console.error('驳回失败', error) + ElMessage.error('操作失败') } } const getStats = async () => { + if (!hasrefundWaitShow) { + return + } try { const params = { pageNum: pagination.value.pageNum, @@ -473,26 +504,27 @@ const get7Days = function () { const handleClick = function (tab, event) { activeName.value = tab.props.name if (tab.props.name === 'wait') { + console.log(hasrefundWait.value); + if (!hasrefundWait) { + ElMessage.error('暂无权限') + return + } adminWait() } else if (tab.props.name === 'pass') { + if (hasrefundThrough.value) { + ElMessage.error('暂无权限') + return + } adminPass() } else if (tab.props.name === 'reject') { + if (!hasrefundReject) { + ElMessage.error('暂无权限') + return + } adminReject() } } -// 当前状态 -const getCurrentStatus = () => { - switch (activeName.value) { - case 'wait': - return STATUS.PENDING - case 'pass': - return STATUS.APPROVED - case 'reject': - return STATUS.REJECTED - default: - return '' - } -} + // 待审核 const adminWait = async function () { checkTab.value = 'pending' @@ -584,6 +616,7 @@ onMounted(async () => { await getMarket() await get() await getStats() + initPermissions() }) diff --git a/src/views/consume/bean/beanConsume.vue b/src/views/consume/bean/beanConsume.vue index 715ba57..496297b 100644 --- a/src/views/consume/bean/beanConsume.vue +++ b/src/views/consume/bean/beanConsume.vue @@ -68,10 +68,10 @@ const navigateTo = (name) => { const initPermissions = () => { if (!menuTree.value || !menuTree.value.length) return; - hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.Submit_Golden_Bean_Consumption); - hasLive.value = hasMenuPermission(menuTree.value, permissionMapping.View_Golden_Bean_Live_Consumption_Details); - hasFan.value = hasMenuPermission(menuTree.value, permissionMapping.View_Golden_Bean_Fan_Consumption_Details); - hasArticleVideo.value = hasMenuPermission(menuTree.value, permissionMapping.View_Golden_Bean_Article_Video_Consumption_Details); + hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.addBeanConsume); + hasLive.value = hasMenuPermission(menuTree.value, permissionMapping.beanZBDetail); + hasFan.value = hasMenuPermission(menuTree.value, permissionMapping.beanTFDetail); + hasArticleVideo.value = hasMenuPermission(menuTree.value, permissionMapping.beanSPWZDetail); }; // 默认跳转逻辑 diff --git a/src/views/consume/gold/coinConsume.vue b/src/views/consume/gold/coinConsume.vue index f432bd3..2838da3 100644 --- a/src/views/consume/gold/coinConsume.vue +++ b/src/views/consume/gold/coinConsume.vue @@ -42,8 +42,8 @@ const navigateTo = (name) => { // 初始化权限状态 const initPermissions = () => { if (!menuTree.value || !menuTree.value.length) return; - hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.Submit_Gold_Coin_Consumption); - hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.View_Gold_Coin_Consumption_Details); + hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.addCoinConsume); + hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.coinConsumeDetail); }; // 默认跳转逻辑 @@ -51,7 +51,7 @@ const getDefaultAuditRoute = () => { initPermissions(); if (hasDetail.value) return 'coinConsumeDetail'; if (hasAdd.value) return 'addCoinConsume'; - return 'addCoinConsume'; + return 'coinConsumeDetail'; }; // 监听路由变化更新标签状态 diff --git a/src/views/managerecharge/rate.vue b/src/views/managerecharge/rate.vue index 0d3eed1..436e18a 100644 --- a/src/views/managerecharge/rate.vue +++ b/src/views/managerecharge/rate.vue @@ -122,10 +122,10 @@ const getEditData = async function (row) { } } const editRole = ref(true) -editRole.value = findMenuById(menuTree.value, permissionMapping.Exchange_Rate_Modification) +editRole.value = findMenuById(menuTree.value, permissionMapping.rateEdit) // 编辑汇率 const editRate = async function () { - if (findMenuById(menuTree.value, permissionMapping.Exchange_Rate_Modification)) { + if (findMenuById(menuTree.value, permissionMapping.rateEdit)) { // 提交前验证 汇率是否为数字 rateEdit.value.num = parseFloat(rateEdit.value.num); try { @@ -265,9 +265,9 @@ onMounted(async function () { {{ formatDate(scope.row.updateTime) }} - +