12 Commits

  1. 2
      package.json
  2. 1
      src/router/index.js
  3. 4
      src/utils/menuTreePermission.js
  4. 10
      src/utils/menuUtils.js
  5. 257
      src/views/audit/bean/beanAudit.vue
  6. 20
      src/views/audit/gold/audit.vue
  7. 107
      src/views/audit/gold/rechargeAudit.vue
  8. 178
      src/views/audit/gold/refundAudit.vue
  9. 16
      src/views/consume/bean/beanConsume.vue
  10. 10
      src/views/consume/gold/coinConsume.vue
  11. 28
      src/views/managerecharge/rate.vue
  12. 53
      src/views/permissions/rolePermission.vue
  13. 13
      src/views/permissions/userPermission.vue
  14. 12
      src/views/recharge/bean/beanRecharge.vue
  15. 8
      src/views/recharge/gold/coinRecharge.vue
  16. 4
      src/views/refund/gold/addCoinRefund.vue
  17. 4
      src/views/refund/gold/coinRefund.vue
  18. 4
      src/views/refund/gold/coinRefundDetail.vue
  19. 4
      src/views/usergold/gold/clientCount.vue

2
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": {

1
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)

4
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, // 金豆审核通过

10
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作为路由(可根据实际需求调整)

257
src/views/audit/bean/beanAudit.vue

@ -22,11 +22,11 @@
</el-col>
</el-card>
<el-card>
<el-card >
<el-tabs v-model="checkTab" type="card" @tab-click="handleClick">
<el-tab-pane label="待审核" name="pending"></el-tab-pane>
<el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<el-tab-pane label="待审核" name="pending" v-if="hasbeanWait&&hasbeanWaitShow"></el-tab-pane>
<el-tab-pane label="已通过" name="pass" v-if="hasbeanThrough"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject" v-if="hasbeanReject"></el-tab-pane>
</el-tabs>
<div>
@ -61,12 +61,12 @@
{{ row.auditTime ? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss') : '--' }}
</template>
</el-table-column>
<el-table-column v-if="checkTab === 'pending'" fixed="right" prop="operation" label="操作" width="400px">
<el-table-column v-if="checkTab === 'pending' &&(hasbeanWaitThough||hasbeanWaitReject)" fixed="right" prop="operation" label="操作" width="400px">
<template #default="scope">
<div class="operation">
<el-popconfirm title="确定要通过此条记录吗?" @confirm="handleApprove(scope.row)">
<template #reference>
<el-button :disabled="clicked || cancelClicked" type="primary" text>
<el-button v-if="hasbeanWaitThough" :disabled="clicked || cancelClicked" type="primary" text>
通过
</el-button>
</template>
@ -77,7 +77,7 @@
</el-button>
</template>
</el-popconfirm>
<el-button :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
<el-button v-if="hasbeanWaitReject" :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
驳回
</el-button>
</div>
@ -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()

20
src/views/audit/gold/audit.vue

@ -3,11 +3,11 @@
<div style="height:4vh;width:82vw;">
<el-button-group>
<el-button :type="activeTab === 'rechargeAudit' ? 'primary' : 'default'" @click="navigateTo('rechargeAudit')"
:disabled="!hasRecharge">
v-if="hasRecharge">
充值审核
</el-button>
<el-button :type="activeTab === 'refundAudit' ? 'primary' : 'default'" @click="navigateTo('refundAudit')"
:disabled="!hasRefund">
v-if="hasRefund">
退款审核
</el-button>
</el-button-group>
@ -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);
};
//

107
src/views/audit/gold/rechargeAudit.vue

@ -42,16 +42,16 @@
</div>
<div class="selectRow" style="justify-content: flex-start;">
<el-button @click="resetSearch" type="success">重置</el-button>
<el-button @click="handleSearch" type="primary">查询</el-button>
<el-button @click="handleSearch" type="primary">查询</el-button>
</div>
</div>
</el-col>
</el-card>
<el-card>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="待审核" name="wait"></el-tab-pane>
<el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="待审核" name="wait" v-if="hasrechargeWait&&hasrechargeWaitShow"></el-tab-pane>
<el-tab-pane label="已通过" name="pass" v-if="hasrechargeThrough"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject" v-if="hasrechargeReject"></el-tab-pane>
<div>
<!-- 总条数{{ format3(stats.totalNum) }}&nbsp;&nbsp;&nbsp;&nbsp;-->
@ -119,12 +119,12 @@
{{ moment(scope.row.auditTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column v-if="activeName === 'wait'" fixed="right" prop="operation" label="操作" width="150px">
<el-table-column v-if="activeName === 'wait'&&(hasrechargeWaitThough||hasrechargeWaitReject)&&hasrechargeWaitShow" fixed="right" prop="operation" label="操作" width="150px">
<template #default="scope">
<div class="operation">
<el-popconfirm title="确定要通过此条记录吗?" @confirm="handleApprove(scope.row)">
<template #reference>
<el-button :disabled="clicked || cancelClicked" type="primary" text>
<el-button v-if="hasrechargeWaitThough" :disabled="clicked || cancelClicked" type="primary" text>
通过
</el-button>
</template>
@ -135,7 +135,7 @@
</el-button>
</template>
</el-popconfirm>
<el-button :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
<el-button v-if="hasrechargeWaitReject" :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
驳回
</el-button>
</div>
@ -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()

178
src/views/audit/gold/refundAudit.vue

@ -21,13 +21,13 @@
</div>
<div class="selectRow">
<el-text class="text" size="large">所属地区</el-text>
<el-cascader class="selectContent" style="width: 12vw;" v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区"
clearable @change="handleMarketChange" />
<el-cascader class="selectContent" style="width: 12vw;" v-model="selectedMarketPath" :options="market"
placeholder="请选择所属地区" clearable @change="handleMarketChange" />
</div>
</div>
</el-col>
<el-col>
<div class="select">
<div class="select">
<div class="selectRow" style="width: 36vw;">
<el-text class="text" size="large">
{{ activeName === 'wait' ? '提交时间:' : '审核时间:' }}
@ -43,17 +43,17 @@
</div>
<div class="selectRow" style="justify-content: flex-start;">
<el-button @click="resetSearch" type="success">重置</el-button>
<el-button @click="handleSearch" type="primary">查询</el-button>
<el-button @click="handleSearch" type="primary">查询</el-button>
</div>
</div>
</el-col>
</el-card>
<el-card>
<el-card >
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="待审核" name="wait"></el-tab-pane>
<el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<el-tab-pane label="待审核" name="wait" v-if="hasrefundWait&&hasrefundWaitShow"></el-tab-pane>
<el-tab-pane label="已通过" name="pass" v-if="hasrefundThrough"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject" v-if="hasrefundReject"></el-tab-pane>
</el-tabs>
<div>
@ -118,12 +118,13 @@
{{ row.auditTime ? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss') : '--' }}
</template>
</el-table-column>
<el-table-column v-if="checkTab === 'pending'" fixed="right" prop="operation" label="操作" width="150px">
<el-table-column v-if="checkTab === 'pending' && (hasrefundWaitThough || hasrefundWaitReject)&&hasrefundWaitShow" fixed="right"
prop="operation" label="操作" width="150px">
<template #default="scope">
<div class="operation">
<el-popconfirm title="确定要通过此条记录吗?" @confirm="handleApprove(scope.row)">
<template #reference>
<el-button :disabled="clicked || cancelClicked" type="primary" text>
<el-button v-if="hasrefundWaitThough" :disabled="clicked || cancelClicked" type="primary" text>
通过
</el-button>
</template>
@ -134,7 +135,8 @@
</el-button>
</template>
</el-popconfirm>
<el-button :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
<el-button v-if="hasrefundWaitReject" :disabled="clicked || cancelClicked" type="primary" text
@click="showRejectDialog(scope.row)">
驳回
</el-button>
</div>
@ -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,// action1,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,// action1,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()

16
src/views/consume/bean/beanConsume.vue

@ -4,7 +4,7 @@
<el-button
:type="activeTab === 'addBeanConsume' ? 'primary' : 'default'"
@click="navigateTo('addBeanConsume')"
:disabled="!hasAdd"
v-if="hasAdd"
style="width: 120px;"
>
新增消耗
@ -12,7 +12,7 @@
<el-button
:type="activeTab === 'liveStream' ? 'primary' : 'default'"
@click="navigateTo('liveStream')"
:disabled="!hasLive"
v-if="hasLive"
style="width: 120px;"
>
直播
@ -20,7 +20,7 @@
<el-button
:type="activeTab === 'dieHardFan' ? 'primary' : 'default'"
@click="navigateTo('dieHardFan')"
:disabled="!hasFan"
v-if="hasFan"
style="width: 120px;"
>
铁粉
@ -28,7 +28,7 @@
<el-button
:type="activeTab === 'articleVideo' ? 'primary' : 'default'"
@click="navigateTo('articleVideo')"
:disabled="!hasArticleVideo"
v-if="hasArticleVideo"
style="width: 120px;"
>
文章/视频
@ -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);
};
//

10
src/views/consume/gold/coinConsume.vue

@ -3,11 +3,11 @@
<div class="fatherTop">
<el-button-group>
<el-button :type="activeTab === 'coinConsumeDetail' ? 'primary' : 'default'"
@click="navigateTo('coinConsumeDetail')" :disabled="!hasDetail">
@click="navigateTo('coinConsumeDetail')" v-if="hasDetail">
金币消耗明细
</el-button>
<el-button :type="activeTab === 'addCoinConsume' ? 'primary' : 'default'" @click="navigateTo('addCoinConsume')"
:disabled="!hasAdd">
v-if="hasAdd">
新增消耗
</el-button>
</el-button-group>
@ -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';
};
//

28
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()
})
</script>
<template>
<el-card style="width:82vw;height:85vh">
<el-card style="width:82vw;height:85vh" v-if="hasrateShow">
<el-table :data="tableData" v-if="(tableData.flag = 1)">
<el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope">
@ -265,7 +275,7 @@ onMounted(async function () {
<span>{{ formatDate(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" :span="3" v-if="editRole">
<el-table-column v-if="hasrateEdit" label="操作" :span="3">
<template #default="scope">
<el-button type="text" @click="() => {
regeEdit = true

53
src/views/permissions/rolePermission.vue

@ -240,23 +240,10 @@ const getLists = async function () {
data: { id: roleId }
})
data.value = res.data
// let originalData = res.data.filter(item => item.id !== 9);
//
// data.value = filterGoldenBeanMenus(originalData);
// data.value = data.value.filter(item => item.id !== 9);
data.value = data.value.filter(item => item.id !== 9);
data.value = filterPermission(data.value)
console.log('看看data', data.value)
console.log('parentID:', addRole.value.parentId, 'roleId:', roleId)
/* // 根据地区过滤金豆菜单
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',
@ -290,11 +277,15 @@ const getLists = async function () {
//
const goldenBeanMenuIds = new Set([
43, 55, 54, // ->
41, 47, 46, 48, // ->
42, 50, 49, 52, 51, // ->
45, 53 // ->
permissionMapping.beanAudit,
permissionMapping.beanRecharge,
permissionMapping.beanConsume,
permissionMapping.beanDetail
])
// 15,43,44,45,46,47,//
// 18,52,53,54,//
// 20,57,58,59,60,//
// 23//
const filterGoldenBeanMenus = (tree) => {
return tree
.filter(item => {
@ -309,6 +300,18 @@ const filterGoldenBeanMenus = (tree) => {
return true
})
}
// (????????)
const filterPermission = (tree) => {
return tree.filter(item =>{
if(item.id === permissionMapping.permissionManage){
return false
}
else if(item.children && item.children.length > 0){
item.children = filterPermission(item.children)
}
return true
})
}
//
const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => {
const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo
@ -436,8 +439,8 @@ const permissionEditRoleInit = async function (row) {
data: { id: roleId }
});
data.value = res.data;
data.value = data.value.filter(item => item.id !== 9);
data.value = filterGoldenBeanMenus(data.value);
data.value = filterPermission(data.value)
//data.value = filterGoldenBeanMenus(data.value);
// id
if (row.tree && row.tree.length > 0) {
@ -571,7 +574,9 @@ const Rolerules = reactive({
const throttledHandleAddRole = _.throttle(handleAddRole, 5000, {
trailing: false
})
const canLook = findMenuById(menuTree.value,permissionMapping.roleManageShow)
const canAdd = findMenuById(menuTree.value, permissionMapping.addRoleInfo)
const canEdit = findMenuById(menuTree.value, permissionMapping.editRoleInfo)
//
onMounted(async function () {
await getRoleList()
@ -587,14 +592,14 @@ onMounted(async function () {
<el-input v-model="role.name" style="width: 240px" placeholder="请输入角色名称" clearable />
<div style="margin-left: auto;">
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="searchRole()">查询</el-button>
<el-button type="primary" @click="searchRole()" :disabled="!canLook" v-if="canLook">查询</el-button>
</div>
</div>
</el-card>
<el-card>
<div class="add-item">
<el-button style="color: #048efb; border: 1px solid #048efb" @click="permissionAddInit()">新增角色</el-button>
<el-button style="color: #048efb; border: 1px solid #048efb" @click="permissionAddInit()" :disabled="!canAdd" v-if="canAdd">新增角色</el-button>
</div>
<div>
<el-table :data="roleData" style="width: 100%" show-overflow-tooltip>
@ -621,7 +626,7 @@ onMounted(async function () {
</el-table-column>
<el-table-column prop="operation" label="操作" width="200px">
<template #default="scope">
<el-button type="warning" text @click="permissionEditRoleInit(scope.row)" :disabled="(scope.row.id === 2)|| (scope.row.id === 1)">
<el-button type="warning" text @click="permissionEditRoleInit(scope.row)" :disabled="(scope.row.id === 2)|| (scope.row.id === 1) || !canEdit" v-if="canEdit">
编辑
</el-button>
</template>

13
src/views/permissions/userPermission.vue

@ -891,6 +891,7 @@ const throttledPermissionEdit = _.throttle(permissionEdit, 5000, {
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, {
trailing: false
})
const canLook = findMenuById(menuTree.value, permissionMapping.userManageShow)//
const canAdd = findMenuById(menuTree.value, permissionMapping.addUserInfo)
const canEdit = findMenuById(menuTree.value, permissionMapping.editUserInfo)
const canReset = findMenuById(menuTree.value, permissionMapping.updateUserInfo)
@ -930,14 +931,14 @@ onMounted(async function () {
<div class="head-card-btn">
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="search()" v-if="canLook">查询</el-button>
</div>
</div>
</el-card>
<el-card>
<!-- 展示表单 -->
<div class="add-item">
<el-button style="color: #048efb; border: 1px solid #048efb" :disabled="!canAdd" @click="userAddInit()">新增用户</el-button>
<el-button style="color: #048efb; border: 1px solid #048efb" :disabled="!canAdd" v-if="canAdd" @click="userAddInit()">新增用户</el-button>
</div>
<div>
@ -959,16 +960,16 @@ onMounted(async function () {
<el-table-column prop="remark" label="备注" />
<el-table-column prop="operation" label="操作" width="280px">
<template #default="scope">
<el-button type="warning" text :disabled="!canReset" @click="resetPassword(scope.row)">
<el-button type="warning" text :disabled="!canReset" @click="resetPassword(scope.row)" v-if="canReset">
重置密码
</el-button>
<el-button type="primary" text @click="permissionEditInit(scope.row)"
<el-button type="primary" text @click="permissionEditInit(scope.row)" v-if="canEdit"
:disabled="!canEdit || scope.row.adminStatus === 0 || scope.row.account === adminData.account">
修改权限
</el-button>
<el-popconfirm title="确定将此用户删除吗?" @confirm="delConfirm">
<template #reference>
<el-button type="danger" text @click="del(scope.row)"
<el-button type="danger" text @click="del(scope.row)" v-if="canDel"
:disabled="!canDel ||scope.row.adminStatus === 0 || scope.row.account === adminData.account">
删除
</el-button>
@ -984,7 +985,7 @@ onMounted(async function () {
</el-table-column>
<el-table-column prop="adminStatus" label="状态">
<template #default="scope">
<el-switch :model-value="scope.row.adminStatus" :active-value="1" :inactive-value="0" size="large"
<el-switch :model-value="scope.row.adminStatus" :active-value="1" :inactive-value="0" size="large" v-if="change"
:disabled="!change || scope.row.account === adminData.account || statusLoading[scope.row.id]"
@change="(targetStatus) => showStatusConfirm(scope.row, targetStatus)" style="
--el-switch-on-color: #13ce66;

12
src/views/recharge/bean/beanRecharge.vue

@ -2,15 +2,15 @@
<div class="father">
<el-button-group>
<el-button :type="activeTab === 'addBeanRecharge' ? 'primary' : 'default'" @click="navigateTo('addBeanRecharge')"
:disabled="!hasAdd" style="width: 6.5vw">
v-if="hasAdd" style="width: 6.5vw">
新增充值
</el-button>
<el-button :type="activeTab === 'beanSystemRecharge' ? 'primary' : 'default'"
@click="navigateTo('beanSystemRecharge')" :disabled="!hasSystem" style="width: 6.5vw;">
@click="navigateTo('beanSystemRecharge')" v-if="hasSystem" style="width: 6.5vw;">
系统充值
</el-button>
<el-button :type="activeTab === 'beanOnlineRecharge' ? 'primary' : 'default'"
@click="navigateTo('beanOnlineRecharge')" :disabled="!hasOnline" style="width: 6.5vw;">
@click="navigateTo('beanOnlineRecharge')" v-if="hasOnline" style="width: 6.5vw;">
线上充值
</el-button>
</el-button-group>
@ -46,9 +46,9 @@ const navigateTo = (name) => {
const initPermissions = () => {
if (!menuTree.value || !menuTree.value.length) return;
hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.Submit_Golden_Bean_Recharge);
hasSystem.value = hasMenuPermission(menuTree.value, permissionMapping.View_Golden_Bean_System_Recharge_Details);
hasOnline.value = hasMenuPermission(menuTree.value, permissionMapping.View_Golden_Bean_Online_Recharge_Details);
hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.addBeanRecharge);
hasSystem.value = hasMenuPermission(menuTree.value, permissionMapping.beanSystemRecharge);
hasOnline.value = hasMenuPermission(menuTree.value, permissionMapping.beanOnlineRecharge);
};
//

8
src/views/recharge/gold/coinRecharge.vue

@ -2,11 +2,11 @@
<div style="height:4vh;">
<el-button-group>
<el-button :type="activeTab === 'coinRechargeDetail' ? 'primary' : 'default'"
@click="navigateTo('coinRechargeDetail')" :disabled="!hasDetail">
@click="navigateTo('coinRechargeDetail')" v-if="hasDetail">
金币充值明细
</el-button>
<el-button :type="activeTab === 'addCoinRecharge' ? 'primary' : 'default'" @click="navigateTo('addCoinRecharge')"
:disabled="!hasAdd">
v-if="hasAdd">
新增充值
</el-button>
</el-button-group>
@ -40,8 +40,8 @@ const navigateTo = (name) => {
const initPermissions = () => {
if (!menuTree.value || !menuTree.value.length) return;
hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.Submit_Gold_Coin_Recharge);
hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.View_Gold_Coin_Recharge_Details);
hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.addCoinRecharge);
hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.coinRechargeDetail);
};
//

4
src/views/refund/gold/addCoinRefund.vue

@ -413,7 +413,7 @@ const calculatedRechargeGoods = computed(() => {
const taskGold = addRefund.value.taskGold === '' ? 0 : +addRefund.value.taskGold;
return Number((permanentGold + freeGold + taskGold).toFixed(2));
})
const canAdd = findMenuById(menuTree.value,permissionMapping.addCoinRefund)
watch(calculatedRechargeGoods, (newVal) => {
addRefund.value.sumGold = newVal
})
@ -502,7 +502,7 @@ onMounted(() =>{
</div>
<el-button type="success" @click="cancel()" style="margin-left: 200px">重置</el-button>
<el-button type="primary" :disabled="addDisabled" @click="addBefore"> 提交</el-button>
<el-button type="primary" :disabled="addDisabled" @click="addBefore" v-if="canAdd"> 提交</el-button>
</el-form>
</div>
</div>

4
src/views/refund/gold/coinRefund.vue

@ -3,12 +3,12 @@
<!-- 这里放置标签切换的按钮 -->
<el-button-group>
<el-button :type="activeTab === 'coinRefundDetail' ? 'primary' : 'default'"
@click="navigateTo('coinRefundDetail')" :disabled="!hasDetail">
@click="navigateTo('coinRefundDetail')" :disabled="!hasDetail" v-if="hasDetail">
金币退款明细
</el-button>
<!-- 切换后状态显示 primary 样式否则是默认样式 -->
<el-button :type="activeTab === 'addCoinRefund' ? 'primary' : 'default'" @click="navigateTo('addCoinRefund')"
:disabled="!hasAdd">
:disabled="!hasAdd" v-if="hasAdd">
新增退款
</el-button>
</el-button-group>

4
src/views/refund/gold/coinRefundDetail.vue

@ -14,7 +14,7 @@ import dayjs from "dayjs";
const adminStore = useAdminStore();
const { adminData, menuTree } = storeToRefs(adminStore);
const showEmployeeData = ref(false)
const canLook = findMenuById(menuTree.value,permissionMapping.coinRefundDetail)
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
@ -544,7 +544,7 @@ const getMarket = async function () {
</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="search()" v-if="canLook">查询</el-button>
<el-button type="primary" @click="exportExcel">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
</div>

4
src/views/usergold/gold/clientCount.vue

@ -6,14 +6,14 @@
<el-button
:type="activeTab === 'clientCountDetail' ? 'primary' : 'default'"
@click="navigateTo('clientCountDetail')"
:disabled="!hasDetail"
:disabled="!hasDetail" v-if="hasDetail"
>
金币明细
</el-button>
<el-button
:type="activeTab === 'clientCountBalance' ? 'primary' : 'default'"
@click="navigateTo('clientCountBalance')"
:disabled="!hasBalance"
:disabled="!hasBalance" v-if="hasBalance"
>
金币余额
</el-button>

Loading…
Cancel
Save