diff --git a/package.json b/package.json index 627db57..a08640c 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dev": "vite --host 0.0.0.0", "build:test": "vite build --mode test", "build:prod": "vite build --mode production", - "preview": "vite preview", + "prev` iew": "vite preview", "serve": "vite - service serve --host 0.0.0.0 --port 8080" }, "dependencies": { diff --git a/src/router/index.js b/src/router/index.js index 9f80aa1..2b89dba 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -25,19 +25,20 @@ const routes = [ path: 'workbench', name: "workbench", component: () => import("../views/workspace/index.vue"), - meta: { permissionId: 10 } // 对应"工作台展示"id=10 + meta: { permissionId: 13 } // }, - + //金币管理 { path: '/goldManage', name: 'goldManage', + meta:{permissionId:3}, children: [ // 审核 { path: '/audit', name: "audit", component: () => import("../views/audit/gold/audit.vue"), - meta: { permissionId: 40 }, + meta: { permissionId: 14 }, // redirect: '/index', children: [ // 充值审核 @@ -45,21 +46,30 @@ const routes = [ path: 'rechargeAudit', name: "rechargeAudit", component: () => import("../views/audit/gold/rechargeAudit.vue"), - meta: { permissionId: [11, 12] } // 对应"查看充值审核"id=11、"充值审批"id=12 + meta: { permissionId: [28,30,31,32,33,34,35] } // 对应"查看充值审核"id=11、"充值审批"id=12 }, // 退款审核 { path: 'refundAudit', name: "refundAudit", component: () => import("../views/audit/gold/refundAudit.vue"), - meta: { permissionId: [13, 14] } // 对应"查看退款审核"id=13、"退款审批"id=14 + meta: { permissionId: [29,36,37,38,39,40,41] } // 对应"查看退款审核"id=13、"退款审批"id=14 }, ] }, { - path: 'beanAudit', + path: '/beanAudit', name: "beanAudit", component: () => import("../views/audit/bean/beanAudit.vue"), - meta: { permissionId: [54, 55] } + meta: { permissionId: 15 }, + children: [ + // 充值审核 + { + path: 'addbeanAudit', + name: "addbeanAudit", + component: () => import("../views/audit/bean/beanAudit.vue"), + meta: { permissionId: [42,43,44,45,46,47] } // 对应"查看充值审核"id=11、"充值审批"id=12 + }, + ] }, @@ -69,21 +79,21 @@ const routes = [ name: "coinConsume", component: () => import("../views/consume/gold/coinConsume.vue"), // redirect: '/coinConsume/add', - meta: { permissionId: 6 }, + meta: { permissionId: 19 }, children: [ // 金币新增消耗 { path: 'add', name: "addCoinConsume", component: () => import("../views/consume/gold/addCoinConsume.vue"), - meta: { permissionId: 19 } // 对应"提交金币消耗"id=19 + meta: { permissionId: 55 } // 对应"提交金币消耗"id=19 }, // 金币消耗明细详情 { path: 'detail', name: "coinConsumeDetail", component: () => import("../views/consume/gold/coinConsumeDetail.vue"), - meta: { permissionId: 20 } // 对应"查看金币消耗明细"id=20 + meta: { permissionId: 56 } // 对应"查看金币消耗明细"id=20 } ] }, @@ -92,35 +102,35 @@ const routes = [ path: '/beanConsume', name: "beanConsume", component: () => import("../views/consume/bean/beanConsume.vue"), - meta: { permissionId: 42 }, + meta: { permissionId: 20 }, children: [ // 金豆新增消耗 { path: 'add', name: "addBeanConsume", component: () => import("../views/consume/bean/addBeanConsume.vue"), - meta: { permissionId: 49 } // 对应"提交金豆消耗"id=49 + meta: { permissionId: 57 } // 对应"提交金豆消耗"id=49 }, // 直播 { path: 'live', name: "liveStream", component: () => import("../views/consume/bean/liveStream.vue"), - meta: { permissionId: 50 } // 对应"直播"id=50 + meta: { permissionId: 58 } // 对应"直播"id=50 }, // 铁粉 { path: 'fan', name: "dieHardFan", component: () => import("../views/consume/bean/dieHardFan.vue"), - meta: { permissionId: 51 } // 对应"铁粉"id=51 + meta: { permissionId: 59 } // 对应"铁粉"id=51 }, // 文章视频 { path: 'article', name: "articleVideo", component: () => import("../views/consume/bean/articleVideo.vue"), - meta: { permissionId: 52 } // 对应"文章视频"id=52 + meta: { permissionId: 60 } // 对应"文章视频"id=52 } ] @@ -131,13 +141,14 @@ const routes = [ path: '/rate', name: "rate", component: () => import("../views/managerecharge/rate.vue"), - meta: { permissionId: [15, 16] } // 对应"汇率查看"id=15、"汇率修改"id=16 + meta: { permissionId: [16,48,49] } // 对应"汇率查看"id=15、"汇率修改"id=16 }, // 金币充值 { path: '/coinRecharge', name: "coinRecharge", component: () => import("../views/recharge/gold/coinRecharge.vue"), + meta: { permissionId: 17 }, // redirect: '/coinRecharge/add', children: [ // 金币新增充值 @@ -145,14 +156,14 @@ const routes = [ path: 'add', name: "addCoinRecharge", component: () => import("../views/recharge/gold/addCoinRecharge.vue"), - meta: { permissionId: 17 } // 对应"提交金币充值"id=17 + meta: { permissionId: 50 } // 对应"提交金币充值"id=17 }, // 金币充值明细详情 { path: 'detail', name: "coinRechargeDetail", component: () => import("../views/recharge/gold/coinRechargeDetail.vue"), - meta: { permissionId: 18 } // 对应"查看金币充值明细"id=18 + meta: { permissionId: 51 } // 对应"查看金币充值明细"id=18 } ] }, @@ -163,58 +174,52 @@ const routes = [ name: "beanRecharge", component: () => import("../views/recharge/bean/beanRecharge.vue"), // redirect: '/coinRecharge/add', + meta: { permissionId: 18 }, children: [ // 金豆新增充值 { path: 'add', name: "addBeanRecharge", component: () => import("../views/recharge/bean/addBeanRecharge.vue"), - meta: { permissionId: 46 } // 对应"提交金豆充值"id=46 + meta: { permissionId: 52 } // 对应"提交金豆充值"id=46 }, // 金豆系统充值 { path: 'system', name: "beanSystemRecharge", component: () => import("../views/recharge/bean/beanSystemRecharge.vue"), - meta: { permissionId: 47 } // 对应"查看金豆系统充值明细"id=47 + meta: { permissionId: 53 } // 对应"查看金豆系统充值明细"id=47 }, // 金豆线上充值 { path: 'online', name: "beanOnlineRecharge", component: () => import("../views/recharge/bean/beanOnlineRecharge.vue"), - meta: { permissionId: 48 } // 对应"查看金豆线上充值明细"id=48 + meta: { permissionId: 54 } // 对应"查看金豆线上充值明细"id=48 } ] }, - // 金币退款 + // 金币退款 { path: '/coinRefund', name: "coinRefund", component: () => import("../views/refund/gold/coinRefund.vue"), - // redirect: '/coinRefund/add', - meta: { permissionId: 7 }, + meta: { permissionId: 9 }, children: [ // 金币新增退款 { path: 'add', name: "addCoinRefund", component: () => import("../views/refund/gold/addCoinRefund.vue"), - meta: { permissionId: 21 } // 对应"提交金币退款"id=21 + meta: { permissionId: 61 } }, // 金币退款明细详情 { path: 'detail', name: "coinRefundDetail", component: () => import("../views/refund/gold/coinRefundDetail.vue"), - meta: { permissionId: 22 } // 对应"查看金币退款明细"id=22 - }, - { - path: 'addRefund', - name: "addNewCoinRefund", - component: () => import("../views/refund/gold/addNewCoinRefund.vue"), - meta: { permissionId: 58 } + meta: { permissionId: 62 } } ] }, @@ -224,27 +229,26 @@ const routes = [ path: '/usergold', name: "usergold", component: () => import("../views/usergold/gold/clientCount.vue"), - // redirect: '/usergold/detail', - meta: { permissionId: 8 }, + meta: { permissionId: 10 }, children: [ // 金币明细 { path: 'detail', name: "clientCountDetail", component: () => import("../views/usergold/gold/clientCountDetail.vue"), - meta: { permissionId: 23 } // 对应"查看金币明细"id=23 + meta: { permissionId: 63 } }, // 金币余额 { path: 'balance', name: "clientCountBalance", component: () => import("../views/usergold/gold/clientCountBalance.vue"), - meta: { permissionId: 24 } // 对应"查看金币余额"id=24 + meta: { permissionId: 64 } }, ] }, { - path: 'userbean', + path: '/userbean', name: "userbean", component: () => import("../views/usergold/bean/userbean.vue"), meta: { permissionId: 45 } @@ -253,7 +257,21 @@ const routes = [ path: '/history', name: "history", component: () => import("../views/history/history.vue"), - meta: { permissionId: [56, 57] } + meta: { permissionId: 12 }, + children: [ + { + path: 'newHistory', + name: "newHistory", + component: () => import("../views/history/newHistory.vue"), + meta: { permissionId: 26 } + }, + { + path: 'oldHistory', + name: "oldHistory", + component: () => import("../views/history/oldHistory.vue"), + meta: { permissionId: 27 } + } + ] }, // 权限管理 @@ -261,24 +279,24 @@ const routes = [ path: '/permissions', name: "permissions", component: () => import("../views/permissions/permissions.vue"), - meta: { permissionId: 9 }, + meta: { permissionId: 11 }, children: [ // 用户权限 { path: 'userPermission', name: "userPermission", component: () => import("../views/permissions/userPermission.vue"), - meta: { permissionId: 25 } + meta: { permissionId: 24 } }, // 角色权限 { path: 'rolePermission', name: "rolePermission", component: () => import("../views/permissions/rolePermission.vue"), - meta: { permissionId: 30 } - }, + meta: { permissionId: 25 } + } ] - }, + } ] }, { @@ -368,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 b498ac2..0100e1a 100644 --- a/src/utils/menuTreePermission.js +++ b/src/utils/menuTreePermission.js @@ -50,7 +50,7 @@ export const permissionMapping = { refundWaitReject:41, // 退款审核等待驳回 beanWait:42, // 金豆审核待审核 - beanWaitThough:43, // 金豆审核已通过 + beanThrough:43, // 金豆审核已通过 beanReject:44, // 金豆审核已驳回 beanWaitShow:45, // 金豆审核待审核查看 beanWaitThough:46, // 金豆审核通过 @@ -83,8 +83,9 @@ export const permissionMapping = { editUserInfo:67, // 编辑用户信息 updateUserInfo:68, // 重置密码 deleteUserInfo:69, // 删除用户信息 + changeStatus:70, // 启用禁用用户 - roleManageShow:70, // 查看角色信息 + roleManageShow:73, // 查看角色信息 addRoleInfo:71, // 新增角色信息 editRoleInfo:72, // 编辑角色信息 } diff --git a/src/utils/menuUtils.js b/src/utils/menuUtils.js index 83f2647..9db9be8 100644 --- a/src/utils/menuUtils.js +++ b/src/utils/menuUtils.js @@ -50,7 +50,7 @@ export const getRoutePath = (menu) => { '金币审核': '/audit', '金豆审核': '/beanAudit', - '汇率管理': '/rate', + '现金汇率': '/rate', '金币充值': '/coinRecharge', @@ -64,13 +64,20 @@ export const getRoutePath = (menu) => { // '金豆退款': '/beanRefund', '历史数据查询': '/history', + '金币查询(新)': '/history/newHistory', + '金币查询(旧)': '/history/oldHistory', '权限管理': '/permissions', + '用户管理': '/permissions/userPermission', + '角色管理': '/permissions/rolePermission', '金币客户账户明细': '/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..5d2c129 100644 --- a/src/views/audit/bean/beanAudit.vue +++ b/src/views/audit/bean/beanAudit.vue @@ -22,11 +22,11 @@ - + - - - + + +
@@ -61,12 +61,12 @@ {{ row.auditTime ? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss') : '--' }} - + - + 驳回
@@ -111,13 +111,13 @@ import moment from 'moment' import { useAdminStore } from "@/store/index.js"; import { storeToRefs } from "pinia"; import _ from 'lodash' +import { permissionMapping, hasMenuPermission } from "@/utils/menuTreePermission.js" const defaultTime = [ new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59), ] const adminStore = useAdminStore(); const { adminData, menuTree } = storeToRefs(adminStore); -import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js" import dayjs from "dayjs"; const tableData = ref([]) @@ -132,6 +132,25 @@ 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 = async() => { + if (!menuTree.value || !menuTree.value.length) return; + hasbeanWait.value = hasMenuPermission(menuTree.value, permissionMapping.beanWait); + hasbeanThrough.value = hasMenuPermission(menuTree.value, permissionMapping.beanThrough); + hasbeanReject.value = hasMenuPermission(menuTree.value, permissionMapping.beanReject); + hasbeanWaitShow.value = hasMenuPermission(menuTree.value, permissionMapping.beanWaitShow); + hasbeanWaitThough.value = hasMenuPermission(menuTree.value, permissionMapping.beanWaitThough); + hasbeanWaitReject.value = hasMenuPermission(menuTree.value, permissionMapping.beanWaitReject); +}; const clicked = ref(false) // 状态常量 const STATUS = { @@ -192,131 +211,129 @@ const handleSearch = async function () { await getStats() } const get = async function () { - if (findMenuById(menuTree.value, permissionMapping.View_Golden_Bean_Recharge_Audit)) { - try { - if (dateRange.value && dateRange.value.length === 2) { - if (checkTab.value === 'pending') { - searchForm.value.createStartTime = moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') - searchForm.value.createEndTime = moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') - } else { - searchForm.value.auditStartTime = moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') - searchForm.value.auditEndTime = moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') - } + if (!hasbeanWaitShow) { + ElMessage.error('暂无权限') + return + } + try { + if (dateRange.value && dateRange.value.length === 2) { + if (checkTab.value === 'pending') { + searchForm.value.createStartTime = moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') + searchForm.value.createEndTime = moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') } else { - searchForm.value.createStartTime = '' - searchForm.value.createEndTime = '' - } - if(checkTab.value === 'pending'){ - sortField.value = 'createTime' - sortOrder.value = 'desc' - }else{ - sortField.value = 'auditTime' - sortOrder.value = 'desc' - } - const params = { - pageNum: pagination.value.pageNum,//页码 - pageSize: pagination.value.pageSize,//页面大小 - beanAuditInfo: { - jwcode: searchForm.value.jwcode, - status: searchForm.value.status, - market: searchForm.value.market, - createStartTime: searchForm.value.createStartTime, - createEndTime: searchForm.value.createEndTime, - auditStartTime: searchForm.value.auditStartTime, - auditEndTime: searchForm.value.auditEndTime, - sortField: sortField.value, - sortOrder: sortOrder.value - } + searchForm.value.auditStartTime = moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') + searchForm.value.auditEndTime = moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') } - console.log('看看传给后端的参数:', params) - const res = await API({ url: '/beanAudit/selectBy', data: params }) - tableData.value = res.data.list || [] - } catch (error) { - console.error('获取数据失败', error) + } else { + searchForm.value.createStartTime = '' + searchForm.value.createEndTime = '' } - } else { - ElMessage.error('无此权限') - } -} -const getStats = async () => { - if (findMenuById(menuTree.value, permissionMapping.View_Golden_Bean_Recharge_Audit)) { - try { - const params = { + if (checkTab.value === 'pending') { + sortField.value = 'createTime' + sortOrder.value = 'desc' + } else { + sortField.value = 'auditTime' + sortOrder.value = 'desc' + } + const params = { + pageNum: pagination.value.pageNum,//页码 + pageSize: pagination.value.pageSize,//页面大小 + beanAuditInfo: { jwcode: searchForm.value.jwcode, status: searchForm.value.status, market: searchForm.value.market, createStartTime: searchForm.value.createStartTime, createEndTime: searchForm.value.createEndTime, auditStartTime: searchForm.value.auditStartTime, - auditEndTime: searchForm.value.auditEndTime + auditEndTime: searchForm.value.auditEndTime, + sortField: sortField.value, + sortOrder: sortOrder.value } - const res = await API({ - url: '/beanAudit/statsBean', - data: params - }) - - stats.value.num = res.data.num - stats.value.permanentBean = res.data.permanentBean - stats.value.freeBean = res.data.freeBean - stats.value.beanNum = res.data.beanNum - console.log('see see stats和搜索对象', stats.value, params) - } catch (error) { - console.log('请求失败', error) } - } else { - ElMessage.error('无此权限') + console.log('看看传给后端的参数:', params) + const res = await API({ url: '/beanAudit/selectBy', data: params }) + tableData.value = res.data.list || [] + } catch (error) { + console.error('获取数据失败', error) + } +} +const getStats = async () => { + if (!hasbeanWaitShow) { + ElMessage.error('暂无权限') + return + } + try { + const params = { + jwcode: searchForm.value.jwcode, + status: searchForm.value.status, + market: searchForm.value.market, + createStartTime: searchForm.value.createStartTime, + createEndTime: searchForm.value.createEndTime, + auditStartTime: searchForm.value.auditStartTime, + auditEndTime: searchForm.value.auditEndTime + } + const res = await API({ + url: '/beanAudit/statsBean', + data: params + }) + + stats.value.num = res.data.num + stats.value.permanentBean = res.data.permanentBean + stats.value.freeBean = res.data.freeBean + stats.value.beanNum = res.data.beanNum + console.log('see see stats和搜索对象', stats.value, params) + } catch (error) { + console.log('请求失败', error) } } // 处理通过操作 const handleApprove = async (row) => { + if (!hasbeanWaitThough) { + ElMessage.error('暂无权限') + return + } clicked.value = true - if (findMenuById(menuTree.value, permissionMapping.Golden_Bean_Recharge_Approval)) { - try { - const params = { - id: row.id, - auditName: adminData.value.adminName - } - await API({ url: '/beanAudit/status1', data: params }) - ElMessage.success('审核通过成功') - await get() - clicked.value = false - await getStats() - } catch (error) { - console.error('审核通过失败', error) - ElMessage.error('操作失败') + try { + const params = { + id: row.id, + auditName: adminData.value.adminName } - } else { - ElMessage.error('无此权限') + await API({ url: '/beanAudit/status1', data: params }) + ElMessage.success('审核通过成功') + await get() clicked.value = false + await getStats() + } catch (error) { + console.error('审核通过失败', error) + ElMessage.error('操作失败') } } // 处理驳回操作 const handleReject = async () => { + if (!hasbeanWaitReject) { + ElMessage.error('暂无权限') + return + } cancelClicked.value = true - if (findMenuById(menuTree.value, permissionMapping.Golden_Bean_Recharge_Approval)) { - if (!reason.value.trim()) { - ElMessage.warning('请输入驳回理由') - return - } - try { - const params = { - id: rejectRow.value.id, - auditName: adminData.value.adminName, - reason: reason.value - } - await API({ url: '/beanAudit/status2', data: params }) - ElMessage.success('驳回成功') - rejectVisible.value = false - await get() - cancelClicked.value = false - await getStats() - } catch (error) { - console.error('驳回失败', error) - ElMessage.error('操作失败') + if (!reason.value.trim()) { + ElMessage.warning('请输入驳回理由') + return + } + try { + const params = { + id: rejectRow.value.id, + auditName: adminData.value.adminName, + reason: reason.value } - } else { - ElMessage.error('无此权限') + await API({ url: '/beanAudit/status2', data: params }) + ElMessage.success('驳回成功') + rejectVisible.value = false + await get() cancelClicked.value = false + await getStats() + } catch (error) { + console.error('驳回失败', error) + ElMessage.error('操作失败') } } const getToday = async function () { @@ -370,10 +387,22 @@ const resetSearch = async function () { const handleClick = async function (tab) { checkTab.value = tab.props.name if (tab.props.name === 'pending') { + if (!hasbeanWait) { + ElMessage.error('暂无权限') + return + } adminWait() } else if (tab.props.name === 'pass') { + if (!hasbeanThrough) { + ElMessage.error('暂无权限') + return + } adminPass() } else if (tab.props.name === 'reject') { + if (!hasbeanReject) { + ElMessage.error('暂无权限') + return + } adminReject() } } @@ -429,6 +458,10 @@ const throttledHandleApprove = _.throttle(handleApprove, 5000, { trailing: false }) const showRejectDialog = (row) => { + if (!hasbeanWaitReject) { + ElMessage.error('暂无权限') + return + } rejectRow.value.id = row.id reason.value = '' rejectVisible.value = true @@ -467,6 +500,14 @@ const trimJwCode = () => { } } onMounted(async () => { + await initPermissions() + if(hasbeanWaitShow.value){ + searchForm.value.status = 0 + }else if(hasbeanThrough.value){ + searchForm.value.status = 1 + }else if(hasbeanReject){ + searchForm.value.status = 2 + } getmarkets() await get() await getStats() diff --git a/src/views/audit/gold/audit.vue b/src/views/audit/gold/audit.vue index f39ae61..ed6caac 100644 --- a/src/views/audit/gold/audit.vue +++ b/src/views/audit/gold/audit.vue @@ -3,11 +3,11 @@
+ v-if="hasRecharge"> 充值审核 + v-if="hasRefund"> 退款审核 @@ -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..08f2750 100644 --- a/src/views/audit/gold/rechargeAudit.vue +++ b/src/views/audit/gold/rechargeAudit.vue @@ -42,16 +42,16 @@
重置 - 查询 + 查询
- - - - + + + +
@@ -119,12 +119,12 @@ {{ moment(scope.row.auditTime).format('YYYY-MM-DD HH:mm:ss') }} - + - + 驳回
@@ -176,9 +176,31 @@ 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 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 = async() => { + 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.rechargeWaitReject); + console.log(hasrechargeWaitThough.value) + console.log(hasrechargeWaitReject.value) + +}; const defaultTime = [ new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59), @@ -214,13 +236,16 @@ const rechargeAudit = ref({ startTime: "", // 充值时间开始 endTime: "", // 充值时间结束 market: "", // 地区 - auditStatus: "0", + auditStatus: '0', }) // 搜索对象 const getObj = ref({ pageNum: 1, pageSize: 50 }) + + + // 支付方式选项 const payModel = [ { @@ -282,6 +307,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 +350,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 +480,24 @@ const adminReject = async function () { const handleClick = function (tab, event) { activeName.value = tab.props.name if (tab.props.name === 'wait') { - adminWait() + if(!hasrechargeWait){ + ElMessage.error('暂无权限') + return + } + if(hasrechargeWaitShow){ + 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 +525,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 +546,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 +590,6 @@ const handleReject = async () => { console.error('驳回操作失败', error) ElMessage.error('操作失败') } - } else { - ElMessage.error('无权限') - cancelClicked.value = false - } } // 处理排序事件 const handleSortChange = (column) => { @@ -652,6 +699,14 @@ const cancelClick = () => { const formatTime = (val) => val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : '' // 挂载 onMounted(async function () { + await initPermissions() + if(hasrechargeWaitShow.value){ + rechargeAudit.value.auditStatus = '0' + }else if(hasrechargeThrough.value){ + rechargeAudit.value.auditStatus = '1' + }else if(hasrechargeReject){ + rechargeAudit.value.auditStatus = '2' + } await getActivity() await getMarket() await getRecharge() diff --git a/src/views/audit/gold/refundAudit.vue b/src/views/audit/gold/refundAudit.vue index 2f49ed2..4248286 100644 --- a/src/views/audit/gold/refundAudit.vue +++ b/src/views/audit/gold/refundAudit.vue @@ -21,13 +21,13 @@
所属地区: - +
-
+
{{ activeName === 'wait' ? '提交时间:' : '审核时间:' }} @@ -43,17 +43,17 @@
重置 - 查询 + 查询
- + - - - + + +
@@ -118,12 +118,13 @@ {{ row.auditTime ? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss') : '--' }} - + - + 驳回
@@ -169,9 +171,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 +233,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 = async() => { + 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 +279,10 @@ const handleSortChange = (column) => { } // 显示驳回对话框 const showRejectDialog = (row) => { + if (!hasrefundWaitReject) { + ElMessage.error('暂无权限') + return + } scopeValue.value = row rejectReason.value = '' rejectDialogVisible.value = true @@ -272,6 +299,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 +350,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 +506,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' @@ -580,6 +614,14 @@ const handleCurrentChange = function (val) { get() } onMounted(async () => { + await initPermissions() + if(hasrefundWaitShow.value){ + searchForm.value.auditStatus = '0' + }else if(hasrefundThrough.value){ + searchForm.value.auditStatus = '1' + }else if(hasrefundReject){ + searchForm.value.auditStatus = '2' + } getRefundGoods() await getMarket() await get() diff --git a/src/views/consume/bean/beanConsume.vue b/src/views/consume/bean/beanConsume.vue index 715ba57..8788c41 100644 --- a/src/views/consume/bean/beanConsume.vue +++ b/src/views/consume/bean/beanConsume.vue @@ -4,7 +4,7 @@ 新增消耗 @@ -12,7 +12,7 @@ 直播 @@ -20,7 +20,7 @@ 铁粉 @@ -28,7 +28,7 @@ 文章/视频 @@ -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..0439276 100644 --- a/src/views/consume/gold/coinConsume.vue +++ b/src/views/consume/gold/coinConsume.vue @@ -3,11 +3,11 @@
+ @click="navigateTo('coinConsumeDetail')" v-if="hasDetail"> 金币消耗明细 + v-if="hasAdd"> 新增消耗 @@ -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/history/history.vue b/src/views/history/history.vue index cf69498..291f562 100644 --- a/src/views/history/history.vue +++ b/src/views/history/history.vue @@ -1,179 +1,71 @@ - - - \ No newline at end of file + }); + + \ No newline at end of file diff --git a/src/views/history/newHistory.vue b/src/views/history/newHistory.vue new file mode 100644 index 0000000..ab8c583 --- /dev/null +++ b/src/views/history/newHistory.vue @@ -0,0 +1,119 @@ + + + + \ No newline at end of file diff --git a/src/views/history/oldHistory.vue b/src/views/history/oldHistory.vue new file mode 100644 index 0000000..a4aed9e --- /dev/null +++ b/src/views/history/oldHistory.vue @@ -0,0 +1,117 @@ + + + + \ No newline at end of file diff --git a/src/views/managerecharge/rate.vue b/src/views/managerecharge/rate.vue index 0d3eed1..ac1b3d8 100644 --- a/src/views/managerecharge/rate.vue +++ b/src/views/managerecharge/rate.vue @@ -4,7 +4,7 @@ import { ElMessage, ElMessageBox } from 'element-plus' import request from '@/util/http' import { useAdminStore } from "@/store/index.js"; import { storeToRefs } from "pinia"; -import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js" +import { permissionMapping, hasMenuPermission } from "@/utils/menuTreePermission.js" const adminStore = useAdminStore() const { adminData, menuTree } = storeToRefs(adminStore) const regeEdit = ref(false) @@ -121,11 +121,22 @@ const getEditData = async function (row) { console.log('请求失败', error) } } -const editRole = ref(true) -editRole.value = findMenuById(menuTree.value, permissionMapping.Exchange_Rate_Modification) +const hasrateShow = ref(false) +const hasrateEdit = ref(false) + +// 初始化权限状态 +const initPermissions = () => { + if (!menuTree.value || !menuTree.value.length) return; + hasrateShow.value = hasMenuPermission(menuTree.value, permissionMapping.rateShow); + hasrateEdit.value = hasMenuPermission(menuTree.value, permissionMapping.rateEdit); + +}; // 编辑汇率 const editRate = async function () { - if (findMenuById(menuTree.value, permissionMapping.Exchange_Rate_Modification)) { + if(!hasrateEdit){ + ElMessage.error('暂无权限') + return + } // 提交前验证 汇率是否为数字 rateEdit.value.num = parseFloat(rateEdit.value.num); try { @@ -139,9 +150,7 @@ const editRate = async function () { } catch (error) { console.log('请求失败', error) } - } else { - ElMessage.error('没有权限') - } + } // 添加前验证 const edit = () => { @@ -237,12 +246,13 @@ function handleInput(value) { return value } onMounted(async function () { + initPermissions() await getAllRate() })