Browse Source

权限重构2

0919test
lihuilin 3 weeks ago
parent
commit
e47b4b70ca
  1. 102
      src/router/index.js
  2. 7
      src/utils/menuTreePermission.js
  3. 9
      src/utils/menuUtils.js
  4. 228
      src/views/history/history.vue
  5. 119
      src/views/history/newHistory.vue
  6. 117
      src/views/history/oldHistory.vue
  7. 33
      src/views/permissions/permissions.vue
  8. 25
      src/views/permissions/rolePermission.vue
  9. 64
      src/views/permissions/userPermission.vue
  10. 5
      src/views/refund/gold/addCoinRefund.vue
  11. 726
      src/views/refund/gold/addNewCoinRefund.vue
  12. 8
      src/views/refund/gold/coinRefund.vue
  13. 23
      src/views/refund/gold/coinRefundDetail.vue
  14. 9
      src/views/usergold/bean/userbean.vue
  15. 4
      src/views/usergold/gold/clientCount.vue
  16. 22
      src/views/usergold/gold/clientCountBalance.vue
  17. 53
      src/views/usergold/gold/clientCountDetail.vue

102
src/router/index.js

@ -25,19 +25,20 @@ const routes = [
path: 'workbench', path: 'workbench',
name: "workbench", name: "workbench",
component: () => import("../views/workspace/index.vue"), component: () => import("../views/workspace/index.vue"),
meta: { permissionId: 10 } // 对应"工作台展示"id=10
meta: { permissionId: 13 } //
}, },
//金币管理
{ {
path: '/goldManage', path: '/goldManage',
name: 'goldManage', name: 'goldManage',
meta:{permissionId:3},
children: [ children: [
// 审核 // 审核
{ {
path: '/audit', path: '/audit',
name: "audit", name: "audit",
component: () => import("../views/audit/gold/audit.vue"), component: () => import("../views/audit/gold/audit.vue"),
meta: { permissionId: 40 },
meta: { permissionId: 14 },
// redirect: '/index', // redirect: '/index',
children: [ children: [
// 充值审核 // 充值审核
@ -45,21 +46,30 @@ const routes = [
path: 'rechargeAudit', path: 'rechargeAudit',
name: "rechargeAudit", name: "rechargeAudit",
component: () => import("../views/audit/gold/rechargeAudit.vue"), 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', path: 'refundAudit',
name: "refundAudit", name: "refundAudit",
component: () => import("../views/audit/gold/refundAudit.vue"), 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", name: "beanAudit",
component: () => import("../views/audit/bean/beanAudit.vue"), 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", name: "coinConsume",
component: () => import("../views/consume/gold/coinConsume.vue"), component: () => import("../views/consume/gold/coinConsume.vue"),
// redirect: '/coinConsume/add', // redirect: '/coinConsume/add',
meta: { permissionId: 6 },
meta: { permissionId: 19 },
children: [ children: [
// 金币新增消耗 // 金币新增消耗
{ {
path: 'add', path: 'add',
name: "addCoinConsume", name: "addCoinConsume",
component: () => import("../views/consume/gold/addCoinConsume.vue"), component: () => import("../views/consume/gold/addCoinConsume.vue"),
meta: { permissionId: 19 } // 对应"提交金币消耗"id=19
meta: { permissionId: 55 } // 对应"提交金币消耗"id=19
}, },
// 金币消耗明细详情 // 金币消耗明细详情
{ {
path: 'detail', path: 'detail',
name: "coinConsumeDetail", name: "coinConsumeDetail",
component: () => import("../views/consume/gold/coinConsumeDetail.vue"), 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', path: '/beanConsume',
name: "beanConsume", name: "beanConsume",
component: () => import("../views/consume/bean/beanConsume.vue"), component: () => import("../views/consume/bean/beanConsume.vue"),
meta: { permissionId: 42 },
meta: { permissionId: 20 },
children: [ children: [
// 金豆新增消耗 // 金豆新增消耗
{ {
path: 'add', path: 'add',
name: "addBeanConsume", name: "addBeanConsume",
component: () => import("../views/consume/bean/addBeanConsume.vue"), component: () => import("../views/consume/bean/addBeanConsume.vue"),
meta: { permissionId: 49 } // 对应"提交金豆消耗"id=49
meta: { permissionId: 57 } // 对应"提交金豆消耗"id=49
}, },
// 直播 // 直播
{ {
path: 'live', path: 'live',
name: "liveStream", name: "liveStream",
component: () => import("../views/consume/bean/liveStream.vue"), component: () => import("../views/consume/bean/liveStream.vue"),
meta: { permissionId: 50 } // 对应"直播"id=50
meta: { permissionId: 58 } // 对应"直播"id=50
}, },
// 铁粉 // 铁粉
{ {
path: 'fan', path: 'fan',
name: "dieHardFan", name: "dieHardFan",
component: () => import("../views/consume/bean/dieHardFan.vue"), component: () => import("../views/consume/bean/dieHardFan.vue"),
meta: { permissionId: 51 } // 对应"铁粉"id=51
meta: { permissionId: 59 } // 对应"铁粉"id=51
}, },
// 文章视频 // 文章视频
{ {
path: 'article', path: 'article',
name: "articleVideo", name: "articleVideo",
component: () => import("../views/consume/bean/articleVideo.vue"), 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', path: '/rate',
name: "rate", name: "rate",
component: () => import("../views/managerecharge/rate.vue"), 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', path: '/coinRecharge',
name: "coinRecharge", name: "coinRecharge",
component: () => import("../views/recharge/gold/coinRecharge.vue"), component: () => import("../views/recharge/gold/coinRecharge.vue"),
meta: { permissionId: 17 },
// redirect: '/coinRecharge/add', // redirect: '/coinRecharge/add',
children: [ children: [
// 金币新增充值 // 金币新增充值
@ -145,14 +156,14 @@ const routes = [
path: 'add', path: 'add',
name: "addCoinRecharge", name: "addCoinRecharge",
component: () => import("../views/recharge/gold/addCoinRecharge.vue"), component: () => import("../views/recharge/gold/addCoinRecharge.vue"),
meta: { permissionId: 17 } // 对应"提交金币充值"id=17
meta: { permissionId: 50 } // 对应"提交金币充值"id=17
}, },
// 金币充值明细详情 // 金币充值明细详情
{ {
path: 'detail', path: 'detail',
name: "coinRechargeDetail", name: "coinRechargeDetail",
component: () => import("../views/recharge/gold/coinRechargeDetail.vue"), component: () => import("../views/recharge/gold/coinRechargeDetail.vue"),
meta: { permissionId: 18 } // 对应"查看金币充值明细"id=18
meta: { permissionId: 51 } // 对应"查看金币充值明细"id=18
} }
] ]
}, },
@ -163,27 +174,28 @@ const routes = [
name: "beanRecharge", name: "beanRecharge",
component: () => import("../views/recharge/bean/beanRecharge.vue"), component: () => import("../views/recharge/bean/beanRecharge.vue"),
// redirect: '/coinRecharge/add', // redirect: '/coinRecharge/add',
meta: { permissionId: 18 },
children: [ children: [
// 金豆新增充值 // 金豆新增充值
{ {
path: 'add', path: 'add',
name: "addBeanRecharge", name: "addBeanRecharge",
component: () => import("../views/recharge/bean/addBeanRecharge.vue"), component: () => import("../views/recharge/bean/addBeanRecharge.vue"),
meta: { permissionId: 46 } // 对应"提交金豆充值"id=46
meta: { permissionId: 52 } // 对应"提交金豆充值"id=46
}, },
// 金豆系统充值 // 金豆系统充值
{ {
path: 'system', path: 'system',
name: "beanSystemRecharge", name: "beanSystemRecharge",
component: () => import("../views/recharge/bean/beanSystemRecharge.vue"), component: () => import("../views/recharge/bean/beanSystemRecharge.vue"),
meta: { permissionId: 47 } // 对应"查看金豆系统充值明细"id=47
meta: { permissionId: 53 } // 对应"查看金豆系统充值明细"id=47
}, },
// 金豆线上充值 // 金豆线上充值
{ {
path: 'online', path: 'online',
name: "beanOnlineRecharge", name: "beanOnlineRecharge",
component: () => import("../views/recharge/bean/beanOnlineRecharge.vue"), component: () => import("../views/recharge/bean/beanOnlineRecharge.vue"),
meta: { permissionId: 48 } // 对应"查看金豆线上充值明细"id=48
meta: { permissionId: 54 } // 对应"查看金豆线上充值明细"id=48
} }
] ]
}, },
@ -193,28 +205,21 @@ const routes = [
path: '/coinRefund', path: '/coinRefund',
name: "coinRefund", name: "coinRefund",
component: () => import("../views/refund/gold/coinRefund.vue"), component: () => import("../views/refund/gold/coinRefund.vue"),
// redirect: '/coinRefund/add',
meta: { permissionId: 7 },
meta: { permissionId: 9 },
children: [ children: [
// 金币新增退款 // 金币新增退款
{ {
path: 'add', path: 'add',
name: "addCoinRefund", name: "addCoinRefund",
component: () => import("../views/refund/gold/addCoinRefund.vue"), component: () => import("../views/refund/gold/addCoinRefund.vue"),
meta: { permissionId: 21 } // 对应"提交金币退款"id=21
meta: { permissionId: 61 }
}, },
// 金币退款明细详情 // 金币退款明细详情
{ {
path: 'detail', path: 'detail',
name: "coinRefundDetail", name: "coinRefundDetail",
component: () => import("../views/refund/gold/coinRefundDetail.vue"), 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', path: '/usergold',
name: "usergold", name: "usergold",
component: () => import("../views/usergold/gold/clientCount.vue"), component: () => import("../views/usergold/gold/clientCount.vue"),
// redirect: '/usergold/detail',
meta: { permissionId: 8 },
meta: { permissionId: 10 },
children: [ children: [
// 金币明细 // 金币明细
{ {
path: 'detail', path: 'detail',
name: "clientCountDetail", name: "clientCountDetail",
component: () => import("../views/usergold/gold/clientCountDetail.vue"), component: () => import("../views/usergold/gold/clientCountDetail.vue"),
meta: { permissionId: 23 } // 对应"查看金币明细"id=23
meta: { permissionId: 63 }
}, },
// 金币余额 // 金币余额
{ {
path: 'balance', path: 'balance',
name: "clientCountBalance", name: "clientCountBalance",
component: () => import("../views/usergold/gold/clientCountBalance.vue"), component: () => import("../views/usergold/gold/clientCountBalance.vue"),
meta: { permissionId: 24 } // 对应"查看金币余额"id=24
meta: { permissionId: 64 }
}, },
] ]
}, },
{ {
path: 'userbean',
path: '/userbean',
name: "userbean", name: "userbean",
component: () => import("../views/usergold/bean/userbean.vue"), component: () => import("../views/usergold/bean/userbean.vue"),
meta: { permissionId: 45 } meta: { permissionId: 45 }
@ -253,7 +257,21 @@ const routes = [
path: '/history', path: '/history',
name: "history", name: "history",
component: () => import("../views/history/history.vue"), 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', path: '/permissions',
name: "permissions", name: "permissions",
component: () => import("../views/permissions/permissions.vue"), component: () => import("../views/permissions/permissions.vue"),
meta: { permissionId: 9 },
meta: { permissionId: 11 },
children: [ children: [
// 用户权限 // 用户权限
{ {
path: 'userPermission', path: 'userPermission',
name: "userPermission", name: "userPermission",
component: () => import("../views/permissions/userPermission.vue"), component: () => import("../views/permissions/userPermission.vue"),
meta: { permissionId: 25 }
meta: { permissionId: 24 }
}, },
// 角色权限 // 角色权限
{ {
path: 'rolePermission', path: 'rolePermission',
name: "rolePermission", name: "rolePermission",
component: () => import("../views/permissions/rolePermission.vue"), component: () => import("../views/permissions/rolePermission.vue"),
meta: { permissionId: 30 }
},
meta: { permissionId: 25 }
}
] ]
},
}
] ]
}, },
{ {

7
src/utils/menuTreePermission.js

@ -4,7 +4,7 @@ export const permissionMapping = {
system:1, // 总系统 system:1, // 总系统
workbench: 2, // 工作台 workbench: 2, // 工作台
goldManage:3, // 金币管理 goldManage:3, // 金币管理
monerManage:4, // 现金管理
moneyManage:4, // 现金管理
// 模块,2级 // 模块,2级
financialAudit:5, // 财务审核 financialAudit:5, // 财务审核
@ -50,7 +50,7 @@ export const permissionMapping = {
refundWaitReject:41, // 退款审核驳回 refundWaitReject:41, // 退款审核驳回
beanWait:42, // 金豆审核待审核 beanWait:42, // 金豆审核待审核
beanWaitThough:43, // 金豆审核已通过
beanThough:43, // 金豆审核已通过
beanReject:44, // 金豆审核已驳回 beanReject:44, // 金豆审核已驳回
beanWaitShow:45, // 金豆审核待审核查看 beanWaitShow:45, // 金豆审核待审核查看
beanWaitThough:46, // 金豆审核通过 beanWaitThough:46, // 金豆审核通过
@ -83,8 +83,9 @@ export const permissionMapping = {
editUserInfo:67, // 编辑用户信息 editUserInfo:67, // 编辑用户信息
updateUserInfo:68, // 重置密码 updateUserInfo:68, // 重置密码
deleteUserInfo:69, // 删除用户信息 deleteUserInfo:69, // 删除用户信息
changeStatus:70, // 启用禁用用户
roleManageShow:70, // 查看角色信息
roleManageShow:73, // 查看角色信息
addRoleInfo:71, // 新增角色信息 addRoleInfo:71, // 新增角色信息
editRoleInfo:72, // 编辑角色信息 editRoleInfo:72, // 编辑角色信息
} }

9
src/utils/menuUtils.js

@ -42,10 +42,7 @@ export function findFirstThirdLevelMenu(menuList) {
export const getRoutePath = (menu) => { export const getRoutePath = (menu) => {
// 路由映射表:key为接口menuName,value为对应路由路径 // 路由映射表:key为接口menuName,value为对应路由路径
const routeMap = { const routeMap = {
'工作台展示': '/workbench',
'金币管理': '/goldManage',
'现金管理': '/moneyManage',
'工作台展示': '/workspace',
'金币审核': '/audit', '金币审核': '/audit',
'金豆审核': '/beanAudit', '金豆审核': '/beanAudit',
@ -64,9 +61,13 @@ export const getRoutePath = (menu) => {
// '金豆退款': '/beanRefund', // '金豆退款': '/beanRefund',
'历史数据查询': '/history', '历史数据查询': '/history',
'金币查询(新)': '/history/newHistory',
'金币查询(旧)': '/history/oldHistory',
'权限管理': '/permissions', '权限管理': '/permissions',
'用户管理': '/permissions/userPermission',
'角色管理': '/permissions/rolePermission',
'金币客户账户明细': '/usergold', '金币客户账户明细': '/usergold',

228
src/views/history/history.vue

@ -1,179 +1,71 @@
<template> <template>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="金币查询(新)" name="new"></el-tab-pane>
<el-tab-pane label="金币查询(旧)" name="old"></el-tab-pane>
</el-tabs>
<el-card>
<el-text size="large">姓名</el-text>
<el-input v-model="searchObj.name" placeholder="请输入姓名" style="width: 12vw;margin-right:1vw"
clearable></el-input>
<router-view></router-view>
</template>
<el-text size="large">精网号</el-text>
<el-input v-model="searchObj.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw"
clearable></el-input>
<script setup>
import {onMounted, ref, watch} from 'vue';
import {useRoute, useRouter} from 'vue-router';
import {storeToRefs} from "pinia";
import {useAdminStore} from "@/store/index.js";
import {hasMenuPermission, permissionMapping} from "@/utils/menuTreePermission.js";
<el-text size="large" style="width: 80px">更新时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" :default-time="defaultTime" range-separator=""
start-placeholder="开始时间" end-placeholder="结束时间" style="width: 25vw;margin-right:1vw" />
const router = useRouter();
const route = useRoute();
const adminStore = useAdminStore();
const {menuTree} = storeToRefs(adminStore);
<el-button type="success" @click="resetSearch">重置</el-button>
<el-button type="primary" v-if="activeName == 'new'" @click="get">查询</el-button>
<el-button type="primary" v-else-if="activeName == 'old'" @click="getOld">查询</el-button>
</el-card>
const activeTab = ref('');
const hasNew = ref(false);
const hasOld = ref(false);
//
const navigateTo = (name) => {
activeTab.value = name;
router.push({name});
};
<el-card style="margin-top:10px" v-show="tableData.length > 0">
<el-table :data="tableData" style="width: 82vw;height:60vh">
<el-table-column type="index" label="序号" width="100" header-align="center" align="center">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</el-table-column>
<el-table-column prop="name" label="客户姓名" width="180" show-overflow-tooltip />
<el-table-column prop="jwcode" label="精网号" width="180" header-align="center" align="center" />
<el-table-column prop="num" label="数量" width="180" header-align="center" align="center" />
<el-table-column prop="updateType" show-overflow-tooltip label="更新类型" width="180" align="center" />
<el-table-column v-if="activeName === 'new'" prop="freeGold" label="免费金币" width="180" align="center" />
<el-table-column v-if="activeName === 'new'" prop="permanentGold" label="永久金币" width="180" align="center" />
<el-table-column v-if="activeName === 'new'" prop="taskGold" label="任务金币" width="180" align="center" />
<el-table-column prop="operator" label="操作人" width="180" />
<el-table-column prop="createTime" label="更新时间" width="200" header-align="center" align="center" />
<el-table-column prop="remark" label="备注" show-overflow-tooltip width="200" align="center" />
</el-table>
<el-pagination background style="margin-top:20px" v-model:current-page="pagination.pageNum"
v-model:page-size="pagination.pageSize" layout="total, sizes, prev, pager, next, jumper"
:total="pagination.total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</el-card>
</template>
<script setup>
import { onMounted, ref } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js'
import moment from 'moment'
import { useAdminStore } from "@/store/index.js"
import { storeToRefs } from "pinia"
import dayjs from 'dayjs'
const adminStore = useAdminStore()
const { adminData, menuTree } = storeToRefs(adminStore)
import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js"
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1, 23, 59, 59),
]
const activeName = ref('new')
const handleClick = function (tab) {
activeName.value = tab.props.name
if (tab.props.name === 'new') {
resetSearch()
pagination.value.pageNum = 1
tableData.value = []
console.log('新的');
} else if (tab.props.name === 'old') {
resetSearch()
pagination.value.pageNum = 1
console.log('旧的');
tableData.value = []
}
}
const tableData = ref([])
const dateRange = ref([])
const searchObj = ref({
name: '',
jwcode: ''
})
const pagination = ref({
pageNum: 1,
pageSize: 50,
total: 0
})
//
const getOld = async function () {
if (findMenuById(menuTree.value, permissionMapping.History_Query)) {
try {
if ((searchObj.value.name || searchObj.value.jwcode) && activeName.value == 'old') {
const startTime = dateRange.value && dateRange.value[0] ? moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : ""
const endTime = dateRange.value && dateRange.value[1] ? moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : ""
const res = await API({
url: '/history/getOldHistoryRecord',
data: {
...searchObj.value,
startTime: startTime,
endTime: endTime,
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize,
}
})
if (res.code == 200) {
ElMessage.success('查询成功')
tableData.value = res.data.list
console.log('tableData.value', res.data.list);
pagination.value.total = res.data.total
}
} else {
ElMessage.error('请输入姓名或精网号')
return
}
} catch (e) {
ElMessage.error(e.message)
}
}
}
//
const get = async function () {
if (findMenuById(menuTree.value, permissionMapping.History_Query)) {
try {
if ((searchObj.value.name || searchObj.value.jwcode) && activeName.value == 'new') {
const startTime = dateRange.value && dateRange.value[0] ? moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : ""
const endTime = dateRange.value && dateRange.value[1] ? moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : ""
const res = await API({
url: '/history/getNewHistoryRecord',
data: {
...searchObj.value,
startTime: startTime,
endTime: endTime,
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize,
//
const initPermissions = () => {
if (!menuTree.value || !menuTree.value.length) return
hasNew.value = hasMenuPermission(menuTree.value, permissionMapping.newCoinSelect)
hasOld.value = hasMenuPermission(menuTree.value, permissionMapping.oldCoinSelect)
} }
})
if (res.code == 200) {
ElMessage.success('查询成功')
tableData.value = res.data.list
console.log('tableData.value', res.data.list)
pagination.value.total = res.data.total
//
const getDefaultAuditRoute = () => {
initPermissions()
if (hasNew.value) return 'newHistory'
if (hasOld.value) return 'oldHistory'
return 'newHistory'
};
//
watch(() => route.name, (newName) => {
initPermissions()
if (newName === 'newHistory' || newName === 'oldHistory') {
activeTab.value = newName;
} else if (newName === 'history') {
// 访 /history
const defaultRoute = getDefaultAuditRoute();
navigateTo(defaultRoute);
} }
});
//
onMounted(() => {
initPermissions()
console.log('============================',hasNew.value,hasOld.value)
if (route.name === 'history') {
const defaultRoute = getDefaultAuditRoute();
navigateTo(defaultRoute);
} else { } else {
ElMessage.error('请输入姓名或精网号')
return
}
} catch (e) {
ElMessage.error(e.message)
//
if (route.name === 'newHistory' || route.name === 'oldHistory') {
activeTab.value = route.name;
} }
} }
}
const resetSearch = function () {
searchObj.value = {
name: '',
jwcode: ''
}
dateRange.value = []
}
const handlePageSizeChange = function (val) {
pagination.value.pageSize = val
if (activeName.value == 'new') {
get()
} else if (activeName.value == 'old') {
getOld()
}
}
const handleCurrentChange = function (val) {
pagination.value.pageNum = val
if (activeName.value == 'new') {
get()
} else if (activeName.value == 'old') {
getOld()
}
}
</script>
<style scoped></style>
});
</script>
<style>
</style>

119
src/views/history/newHistory.vue

@ -0,0 +1,119 @@
<template>
<el-card>
<el-text size="large">姓名</el-text>
<el-input v-model="searchObj.name" placeholder="请输入姓名" style="width: 12vw;margin-right:1vw"
clearable></el-input>
<el-text size="large">精网号</el-text>
<el-input v-model="searchObj.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw"
clearable></el-input>
<el-text size="large" style="width: 80px">更新时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" :default-time="defaultTime" range-separator=""
start-placeholder="开始时间" end-placeholder="结束时间" style="width: 25vw;margin-right:1vw" />
<el-button type="success" @click="resetSearch">重置</el-button>
<el-button type="primary" @click="get">查询</el-button>
</el-card>
<el-card style="margin-top:10px" v-show="tableData.length > 0">
<el-table :data="tableData" style="width: 82vw;height:60vh">
<el-table-column type="index" label="序号" width="100" header-align="center" align="center">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</el-table-column>
<el-table-column prop="name" label="客户姓名" width="180" show-overflow-tooltip />
<el-table-column prop="jwcode" label="精网号" width="180" header-align="center" align="center" />
<el-table-column prop="num" label="数量" width="180" header-align="center" align="center" />
<el-table-column prop="updateType" show-overflow-tooltip label="更新类型" width="180" align="center" />
<el-table-column prop="freeGold" label="免费金币" width="180" align="center" />
<el-table-column prop="permanentGold" label="永久金币" width="180" align="center" />
<el-table-column prop="taskGold" label="任务金币" width="180" align="center" />
<el-table-column prop="operator" label="操作人" width="180" />
<el-table-column prop="createTime" label="更新时间" width="200" header-align="center" align="center" />
<el-table-column prop="remark" label="备注" show-overflow-tooltip width="200" align="center" />
</el-table>
<el-pagination background style="margin-top:20px" v-model:current-page="pagination.pageNum"
v-model:page-size="pagination.pageSize" layout="total, sizes, prev, pager, next, jumper"
:total="pagination.total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</el-card>
</template>
<script setup>
import { onMounted, ref } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js'
import moment from 'moment'
import { useAdminStore } from "@/store/index.js"
import { storeToRefs } from "pinia"
import dayjs from 'dayjs'
const adminStore = useAdminStore()
const { adminData, menuTree } = storeToRefs(adminStore)
import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js"
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1, 23, 59, 59),
]
const tableData = ref([])
const dateRange = ref([])
const searchObj = ref({
name: '',
jwcode: ''
})
const pagination = ref({
pageNum: 1,
pageSize: 50,
total: 0
})
//
const get = async function () {
try {
if (searchObj.value.name || searchObj.value.jwcode) {
const startTime = dateRange.value && dateRange.value[0] ? moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : ""
const endTime = dateRange.value && dateRange.value[1] ? moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : ""
const res = await API({
url: '/history/getNewHistoryRecord',
data: {
...searchObj.value,
startTime: startTime,
endTime: endTime,
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize,
}
})
if (res.code == 200) {
ElMessage.success('查询成功')
tableData.value = res.data.list
console.log('tableData.value', res.data.list)
pagination.value.total = res.data.total
}
} else {
ElMessage.error('请输入姓名或精网号')
return
}
} catch (e) {
ElMessage.error(e.message)
}
}
const resetSearch = function () {
searchObj.value = {
name: '',
jwcode: ''
}
dateRange.value = []
}
const handlePageSizeChange = function (val) {
pagination.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
pagination.value.pageNum = val
get()
}
</script>
<style scoped></style>

117
src/views/history/oldHistory.vue

@ -0,0 +1,117 @@
<template>
<el-card>
<el-text size="large">姓名</el-text>
<el-input v-model="searchObj.name" placeholder="请输入姓名" style="width: 12vw;margin-right:1vw"
clearable></el-input>
<el-text size="large">精网号</el-text>
<el-input v-model="searchObj.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw"
clearable></el-input>
<el-text size="large" style="width: 80px">更新时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" :default-time="defaultTime" range-separator=""
start-placeholder="开始时间" end-placeholder="结束时间" style="width: 25vw;margin-right:1vw" />
<el-button type="success" @click="resetSearch">重置</el-button>
<el-button type="primary" @click="getOld">查询</el-button>
</el-card>
<el-card style="margin-top:10px" v-show="tableData.length > 0">
<el-table :data="tableData" style="width: 82vw;height:60vh">
<el-table-column type="index" label="序号" width="100" header-align="center" align="center">
<template #default="scope">
{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
</template>
</el-table-column>
<el-table-column prop="name" label="客户姓名" width="180" show-overflow-tooltip />
<el-table-column prop="jwcode" label="精网号" width="180" header-align="center" align="center" />
<el-table-column prop="num" label="数量" width="180" header-align="center" align="center" />
<el-table-column prop="updateType" show-overflow-tooltip label="更新类型" width="180" align="center" />
<el-table-column prop="operator" label="操作人" width="180" />
<el-table-column prop="createTime" label="更新时间" width="200" header-align="center" align="center" />
<el-table-column prop="remark" label="备注" show-overflow-tooltip width="200" align="center" />
</el-table>
<el-pagination background style="margin-top:20px" v-model:current-page="pagination.pageNum"
v-model:page-size="pagination.pageSize" layout="total, sizes, prev, pager, next, jumper"
:total="pagination.total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</el-card>
</template>
<script setup>
import { onMounted, ref } from 'vue'
import { ElMessage } from 'element-plus'
import API from '@/util/http.js'
import moment from 'moment'
import { useAdminStore } from "@/store/index.js"
import { storeToRefs } from "pinia"
import dayjs from 'dayjs'
const adminStore = useAdminStore()
const { adminData, menuTree } = storeToRefs(adminStore)
import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js"
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1, 23, 59, 59),
]
const tableData = ref([])
const dateRange = ref([])
const searchObj = ref({
name: '',
jwcode: ''
})
const pagination = ref({
pageNum: 1,
pageSize: 50,
total: 0
})
//
const getOld = async function () {
try {
if (searchObj.value.name || searchObj.value.jwcode) {
const startTime = dateRange.value && dateRange.value[0] ? moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : ""
const endTime = dateRange.value && dateRange.value[1] ? moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : ""
const res = await API({
url: '/history/getOldHistoryRecord',
data: {
...searchObj.value,
startTime: startTime,
endTime: endTime,
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize,
}
})
if (res.code == 200) {
ElMessage.success('查询成功')
tableData.value = res.data.list
console.log('tableData.value', res.data.list);
pagination.value.total = res.data.total
}
} else {
ElMessage.error('请输入姓名或精网号')
return
}
} catch (e) {
ElMessage.error(e.message)
}
}
const resetSearch = function () {
searchObj.value = {
name: '',
jwcode: ''
}
dateRange.value = []
}
const handlePageSizeChange = function (val) {
pagination.value.pageSize = val
getOld()
}
const handleCurrentChange = function (val) {
pagination.value.pageNum = val
getOld()
}
</script>
<style scoped></style>

33
src/views/permissions/permissions.vue

@ -1,19 +1,5 @@
<template> <template>
<div class="father">
<el-button-group>
<el-button :type="activeTab === 'userPermission' ? 'primary' : 'default'" @click="navigateTo('userPermission')"
:disabled="!hasDetail">
用户管理
</el-button>
<el-button :type="activeTab === 'rolePermission' ? 'primary' : 'default'" @click="navigateTo('rolePermission')"
:disabled="!hasBalance">
角色管理
</el-button>
</el-button-group>
</div>
<div>
<router-view></router-view> <router-view></router-view>
</div>
</template> </template>
<script setup> <script setup>
@ -28,8 +14,8 @@ const adminStore = useAdminStore();
const { menuTree } = storeToRefs(adminStore); const { menuTree } = storeToRefs(adminStore);
const activeTab = ref(''); const activeTab = ref('');
const hasDetail = ref(false);
const hasBalance = ref(false);
const hasUser = ref(false);
const hasRole = ref(false);
// //
const navigateTo = (name) => { const navigateTo = (name) => {
activeTab.value = name; activeTab.value = name;
@ -41,15 +27,16 @@ const navigateTo = (name) => {
const initPermissions = () => { const initPermissions = () => {
if (!menuTree.value || !menuTree.value.length) return; if (!menuTree.value || !menuTree.value.length) return;
hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.View_Permission);
hasBalance.value = hasMenuPermission(menuTree.value, permissionMapping.View_Role);
hasUser.value = hasMenuPermission(menuTree.value, permissionMapping.userManage);
hasRole.value = hasMenuPermission(menuTree.value, permissionMapping.roleManage);
console.log('====================================', hasUser.value, hasRole.value)
}; };
// //
const getDefaultAuditRoute = () => { const getDefaultAuditRoute = () => {
initPermissions(); initPermissions();
if (hasDetail.value) return 'userPermission';
if (hasBalance.value) return 'rolePermission';
if (hasUser.value) return 'userPermission';
if (hasRole.value) return 'rolePermission';
return 'userPermission'; return 'userPermission';
}; };
@ -79,9 +66,3 @@ onMounted(() => {
} }
}); });
</script> </script>
<style>
.father{
width:82vw;
height:4vh;
}
</style>

25
src/views/permissions/rolePermission.vue

@ -39,18 +39,12 @@ const addRole = ref({
market: '' market: ''
}) })
const addRoleMarket = ref([]) const addRoleMarket = ref([])
const viewRole = ref([])
const getRolePermission = async function () {
const result = await request({
url: '/menu/tree',
data: {
"id": adminData.value.roleId
}
})
viewRole.value = collectIds(result.data)
console.log('result111', viewRole.value);
}
const getRoleList = async function (val) { const getRoleList = async function (val) {
if(!findMenuById(menuTree.value, permissionMapping.roleManageShow)){
ElMessage.error('无此权限')
return
}
try { try {
if (typeof val === 'number') { if (typeof val === 'number') {
getObj.value.pageNum = val getObj.value.pageNum = val
@ -178,6 +172,10 @@ function processTreeData(data) {
} }
const handleAddRole = async function () { const handleAddRole = async function () {
if(!findMenuById(menuTree.value, permissionMapping.addRoleInfo)){
ElMessage.error('无此权限')
return
}
try { try {
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
Ref.value.validate((valid) => { Ref.value.validate((valid) => {
@ -467,6 +465,10 @@ const permissionEditRoleInit = async function (row) {
// //
const permissionEditRole = async function () { const permissionEditRole = async function () {
if(!findMenuById(menuTree.value, permissionMapping.editRoleInfo)){
ElMessage.error('无此权限')
return
}
try { try {
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
Ref.value.validate((valid) => { Ref.value.validate((valid) => {
@ -573,7 +575,6 @@ const throttledHandleAddRole = _.throttle(handleAddRole, 5000, {
// //
onMounted(async function () { onMounted(async function () {
await getRoleList() await getRoleList()
await getRolePermission()
await getRoleArea() await getRoleArea()
}) })

64
src/views/permissions/userPermission.vue

@ -5,6 +5,12 @@ import { InfoFilled } from '@element-plus/icons-vue'
import _ from 'lodash' import _ from 'lodash'
import request from '@/util/http' import request from '@/util/http'
import API from '@/util/http' import API from '@/util/http'
import { useAdminStore } from "@/store/index.js"
import { storeToRefs } from "pinia"
import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
const adminStore = useAdminStore()
const { adminData, menuTree } = storeToRefs(adminStore)
// //
const tableData = ref([]) const tableData = ref([])
const total = ref(100) const total = ref(100)
@ -97,20 +103,6 @@ const addAdmin = ref({
machineId: '', machineId: '',
remark: '' remark: ''
}) })
//
const adminData = ref({})
// todo
const getAdminData = async function () {
try {
const result = await API({ url: '/admin/userinfo', data: {} })
adminData.value = result
// console.log('', result)
console.log('管理员用户信息', adminData.value)
} catch (error) {
console.log('请求失败', error)
}
}
// //
const permissionEditObj = ref({ const permissionEditObj = ref({
checkedKeys: [], checkedKeys: [],
@ -204,7 +196,6 @@ const getRoleArea = async function () {
console.log('请求失败', error) console.log('请求失败', error)
} }
} }
// //
const marketsTree = ref([]) const marketsTree = ref([])
const getArea = async function () { const getArea = async function () {
@ -275,6 +266,10 @@ const userAddInit = function () {
// //
const permissionAdd = async function () { const permissionAdd = async function () {
if (!findMenuById(menuTree.value, permissionMapping.addUserInfo)) {
ElMessage.error('无此权限')
return
}
try { try {
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
Ref.value.validate((valid) => { Ref.value.validate((valid) => {
@ -327,7 +322,6 @@ const Ref = ref(null)
// //
const permissionList = ref([]) const permissionList = ref([])
const getRoles = async function () { const getRoles = async function () {
try { try {
const res = await API({ url: '/role/selectAll' }) const res = await API({ url: '/role/selectAll' })
@ -341,8 +335,6 @@ const getRoles = async function () {
console.error('获取权限列表失败:', error) console.error('获取权限列表失败:', error)
} }
} }
// //
const openUserEditVisible = function () { const openUserEditVisible = function () {
userEditVisible.value = true userEditVisible.value = true
@ -504,6 +496,10 @@ const editAdminRules = {
}; };
// //
const permissionEdit = async function () { const permissionEdit = async function () {
if (!findMenuById(menuTree.value, permissionMapping.editUserInfo)) {
ElMessage.error('无此权限')
return
}
let { adminName: userName, roleName: oldRole, roleId: newRoleId } = permissionEditObj.value; let { adminName: userName, roleName: oldRole, roleId: newRoleId } = permissionEditObj.value;
if (oldRole == null) { if (oldRole == null) {
oldRole = '暂未分配角色' oldRole = '暂未分配角色'
@ -576,6 +572,10 @@ const del = function (row) {
} }
// //
const delConfirm = async function () { const delConfirm = async function () {
if (!findMenuById(menuTree.value, permissionMapping.deleteUserInfo)) {
ElMessage.error('无此权限')
return
}
try { try {
const result = await request({ const result = await request({
url: '/permission/deleteAdmin', url: '/permission/deleteAdmin',
@ -594,6 +594,10 @@ const delConfirm = async function () {
} }
// //
const editStatus = async function (row) { const editStatus = async function (row) {
if (!findMenuById(menuTree.value, permissionMapping.changeStatus)) {
ElMessage.error('无此权限')
return
}
const { id, account, targetStatus, ...restRow } = currentStatusRow.value const { id, account, targetStatus, ...restRow } = currentStatusRow.value
try { try {
@ -783,6 +787,10 @@ const resetPassword = function (row) {
// //
const confirmResetPassword = async function () { const confirmResetPassword = async function () {
if (!findMenuById(menuTree.value, permissionMapping.updateUserInfo)) {
ElMessage.error('无此权限')
return
}
console.log('adminData', adminData.value) console.log('adminData', adminData.value)
// markets // markets
if (typeof adminData.value.markets === 'string' && adminData.value.markets) { if (typeof adminData.value.markets === 'string' && adminData.value.markets) {
@ -883,16 +891,20 @@ const throttledPermissionEdit = _.throttle(permissionEdit, 5000, {
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, { const throttledPermissionAdd = _.throttle(permissionAdd, 5000, {
trailing: false trailing: false
}) })
const canAdd = findMenuById(menuTree.value, permissionMapping.addUserInfo)
const canEdit = findMenuById(menuTree.value, permissionMapping.editUserInfo)
const canReset = findMenuById(menuTree.value, permissionMapping.updateUserInfo)
const canDel = findMenuById(menuTree.value, permissionMapping.deleteUserInfo)
const change = findMenuById(menuTree.value, permissionMapping.changeStatus)
// //
onMounted(async function () { onMounted(async function () {
await getAdminData()
await getPermission() await getPermission()
await getArea() await getArea()
await getStore() await getStore()
await getRoles() await getRoles()
await getRoleArea() await getRoleArea()
})
console.log('看看权限', canAdd, canEdit, canReset, canDel, change)
})
</script> </script>
<template> <template>
@ -925,7 +937,7 @@ onMounted(async function () {
<el-card> <el-card>
<!-- 展示表单 --> <!-- 展示表单 -->
<div class="add-item"> <div class="add-item">
<el-button style="color: #048efb; border: 1px solid #048efb" @click="userAddInit()">新增用户</el-button>
<el-button style="color: #048efb; border: 1px solid #048efb" :disabled="!canAdd" @click="userAddInit()">新增用户</el-button>
</div> </div>
<div> <div>
@ -947,17 +959,17 @@ onMounted(async function () {
<el-table-column prop="remark" label="备注" /> <el-table-column prop="remark" label="备注" />
<el-table-column prop="operation" label="操作" width="280px"> <el-table-column prop="operation" label="操作" width="280px">
<template #default="scope"> <template #default="scope">
<el-button type="warning" text @click="resetPassword(scope.row)">
<el-button type="warning" text :disabled="!canReset" @click="resetPassword(scope.row)">
重置密码 重置密码
</el-button> </el-button>
<el-button type="primary" text @click="permissionEditInit(scope.row)" <el-button type="primary" text @click="permissionEditInit(scope.row)"
:disabled="scope.row.adminStatus === 0 || scope.row.account === adminData.account">
:disabled="!canEdit || scope.row.adminStatus === 0 || scope.row.account === adminData.account">
修改权限 修改权限
</el-button> </el-button>
<el-popconfirm title="确定将此用户删除吗?" @confirm="delConfirm"> <el-popconfirm title="确定将此用户删除吗?" @confirm="delConfirm">
<template #reference> <template #reference>
<el-button type="danger" text @click="del(scope.row)" <el-button type="danger" text @click="del(scope.row)"
:disabled="scope.row.adminStatus === 0 || scope.row.account === adminData.account">
:disabled="!canDel ||scope.row.adminStatus === 0 || scope.row.account === adminData.account">
删除 删除
</el-button> </el-button>
</template> </template>
@ -973,7 +985,7 @@ onMounted(async function () {
<el-table-column prop="adminStatus" label="状态"> <el-table-column prop="adminStatus" label="状态">
<template #default="scope"> <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"
:disabled="scope.row.account === adminData.account || statusLoading[scope.row.id]"
:disabled="!change || scope.row.account === adminData.account || statusLoading[scope.row.id]"
@change="(targetStatus) => showStatusConfirm(scope.row, targetStatus)" style=" @change="(targetStatus) => showStatusConfirm(scope.row, targetStatus)" style="
--el-switch-on-color: #13ce66; --el-switch-on-color: #13ce66;
--el-switch-off-color: #ff4949; --el-switch-off-color: #ff4949;

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

@ -111,6 +111,11 @@ const getRefund = async function () {
} }
// 退 // 退
const add = async function () { const add = async function () {
//
if (!findMenuById(menuTree.value, permissionMapping.addCoinRefund)) {
ElMessage.error('无此权限')
return
}
try { try {
if (addRefund.value.refundType === '商品退款') { if (addRefund.value.refundType === '商品退款') {
addRefund.value.type = 1 addRefund.value.type = 1

726
src/views/refund/gold/addNewCoinRefund.vue

@ -1,726 +0,0 @@
<script setup>
import {onMounted, reactive, ref, watch} from "vue";
import {ElMessage} from "element-plus";
import moment from "moment";
import request from "@/util/http.js";
import Cookies from 'js-cookie';
import {useAdminStore} from "@/store/index.js";
import {storeToRefs} from "pinia";
import {WarnTriangleFilled} from "@element-plus/icons-vue";
import dayjs from "dayjs";
const adminStore = useAdminStore();
const { adminData, menuTree } = storeToRefs(adminStore);
const addDisabled = ref(false);
const user = ref({
jwcode: null,
name: "",
market: "",
historySumGold: null,
historyPermanentGold: null,
historyFreeGold: null,
historyTaskGold: null,
rechargeNum: null,
consumeNum: null,
firstRecharge: "",
nowPermanentGold: null,
nowFreeJune: null,
nowTaskGold: null,
nowFreeDecember: null,
nowFreeGold: null,
nowSumGold: null
});
const addConsume = ref({
jwcode: null,
goodsName: "金币退款",
sumGold: null,
freeGold: null,
permanentGold: null,
taskGold: null,
remark: "",
refundModel: null,
adminId: adminData.value.id,
adminName: adminData.value.adminName
});
const Ref = ref(null);
const rules = reactive({
jwcode: [
{ required: true, message: "请输入精网号", trigger: "blur" },
],
remark: [
{ required: true, message: "请输入备注", trigger: "blur" },
],
permanentGold: [
{ required: true, message: "请输入永久金币数", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || !Number.isInteger(value) || value < 0) {
callback(new Error("永久金币必须为非负整数"));
} else {
callback();
}
},
trigger: "blur"
}
],
freeGold: [
{ required: true, message: "请输入免费金币数", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || !Number.isInteger(value) || value < 0) {
callback(new Error("免费金币必须为非负整数"));
} else {
callback();
}
},
trigger: "blur"
}
],
taskGold: [
{ required: true, message: "请输入任务金币数", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value === null || value === undefined || !Number.isInteger(value) || value < 0) {
callback(new Error("任务金币必须为非负整数"));
} else {
callback();
}
},
trigger: "blur"
}
],
sumGold: [
{
validator: (rule, value, callback) => {
if ((value || 0) <= 0) {
callback(new Error("三类金币总数必须大于0"));
} else {
callback();
}
},
trigger: "blur"
}
]
});
// watch
watch(
() => [addConsume.value.freeGold, addConsume.value.permanentGold, addConsume.value.taskGold],
([free, permanent, task]) => {
const sum = (parseInt(free) || 0) + (parseInt(permanent) || 0) + (parseInt(task) || 0);
addConsume.value.sumGold = sum;
},
{ deep: true }
);
// sumGold > 0
function validateInputToFreeGold() {
if (!user.value.jwcode) {
ElMessage.warning("请先查询用户信息");
resetForm()
return false;
}
const { freeGold, permanentGold, taskGold, sumGold } = addConsume.value;
if(freeGold > user.value.nowFreeGold){
ElMessage.warning("该用户免费金币不足,请重新输入!");
addConsume.value.freeGold = null;
return
}
return true;
}
// sumGold > 0
function validateInputToPermanentGold() {
if (!user.value.jwcode) {
ElMessage.warning("请先查询用户信息");
resetForm()
return false;
}
const { freeGold, permanentGold, taskGold, sumGold } = addConsume.value;
if(permanentGold > user.value.nowPermanentGold){
ElMessage.warning("该用户永久金币不足,请重新输入!");
addConsume.value.permanentGold = null;
return
}
return true;
}
// sumGold > 0
function validateInputToTaskGold() {
if (!user.value.jwcode) {
ElMessage.warning("请先查询用户信息");
resetForm()
return false;
}
const { freeGold, permanentGold, taskGold, sumGold } = addConsume.value;
if(taskGold > user.value.nowTaskGold){
ElMessage.warning("该用户任务金币不足,请重新输入!");
addConsume.value.taskGold = null;
return
}
return true;
}
// sumGold > 0
function validateInputTOSumGold() {
if (!user.value.jwcode) {
ElMessage.warning("请先查询用户信息");
resetForm()
return false;
}
const { freeGold, permanentGold, taskGold, sumGold } = addConsume.value;
if (sumGold <= 0) {
ElMessage.warning("三类金币总数必须大于0");
resetForm()
return false;
}
return true;
}
//
const ConsumeDialogVisible = ref(false);
//
const ConsumeDialogVisiblehandleClose = () => {
ConsumeDialogVisible.value = false;
//
resetForm()
user.value = {}
};
``
// 使cookie
const ConsumeDialogVisibleContinue = () => {
ConsumeDialogVisible.value = false;
add();
};
const ConsumeDialogVisibleCancel = () => {
ConsumeDialogVisible.value = false
resetForm()
user.value = {}
};
//
//
const FirstConsumeDialogVisible = ref(false);
//
const FirstConsumeDialogVisiblehandleClose = () => {
FirstConsumeDialogVisible.value = false;
//
resetForm()
user.value = {}
};
//
const FirstConsumeDialogVisibleContinue = () => {
FirstConsumeDialogVisible.value = false;
add();
};
const FirstConsumeDialogVisibleCancel = () => {
FirstConsumeDialogVisible.value = false
resetForm()
user.value = {}
};
//
const goods = ref([]);
// cookie key
const WriteCookies = ref(null)
// cookie value
const WriteCookiesTime = ref(null)
// cookie key
const ReadCookies = ref(null)
// cookie value
const ReadCookiesTime = ref(null)
//
const add = async function () {
addDisabled.value = true;
try {
const result = await request({
url: "/consume/addRefund",
data: {
jwcode: addConsume.value.jwcode,
adminId: adminData.value.id,
sumGold: addConsume.value.sumGold *100 ,
freeGold: addConsume.value.freeGold *100 ,
taskGold: addConsume.value.taskGold *100 ,
permanentGold: addConsume.value.permanentGold *100 ,
remark: addConsume.value.remark,
adminName: adminData.value.adminName
}
});
// jwcode
// jwcode:permanentGold:freeGold
WriteCookies.value = `coinRefund:${addConsume.value.jwcode}:${addConsume.value.goodsName}`
//value
WriteCookiesTime.value = dayjs().format("YYYY-MM-DD HH:mm:ss");
// cookies,jwcodekeyvaluejwcode1
Cookies.set(WriteCookies.value, WriteCookiesTime.value, {
expires:
1, path: '/'
});
addDisabled.value = false;
if (result.code === 200) {
ElMessage.success("添加成功");
resetForm();
} else {
ElMessage.error(result.msg || "添加失败");
}
} catch (err) {
console.error(err);
ElMessage.error("添加失败,请检查网络");
addDisabled.value = false;
}
};
//
function resetForm() {
Ref.value.resetFields();
addConsume.value.sumGold = null;
addConsume.value.freeGold = null;
addConsume.value.permanentGold = null;
addConsume.value.taskGold = null;
addConsume.value.sumGold = null;
addConsume.value.remark = "";
addConsume.value.jwcode = null;
user.value = {
jwcode: null,
name: "",
market: "",
historySumGold: null,
historyPermanentGold: null,
historyFreeGold: null,
historyTaskGold: null,
rechargeNum: null,
consumeNum: null,
firstRecharge: "",
nowPermanentGold: null,
nowFreeJune: null,
nowTaskGold: null,
nowFreeDecember: null,
nowFreeGold: null,
nowSumGold: null
};
}
//
const getGoods = async function () {
try {
const result = await request({ url: "https://api.homilychart.com/live_mall/api/product/all" });
goods.value = result.data.map(item => ({ id: item.id, label: item.name, value: item.name }));
} catch (err) {
console.error(err);
}
}
//
const addBefore = () => {
Ref.value.validate(async (valid) => {
// cookie
if (!valid) {
ElMessage({
type: 'error',
message: '请检查输入内容'
});
return;
}
// sumGold > 0
if (!validateInputTOSumGold()) return;
ReadCookies.value = `coinRefund:${addConsume.value.jwcode}:${addConsume.value.goodsName}`
// cookie
const cookie = Cookies.get(ReadCookies.value)
console.log("cookie++++++++++++++++++++++", cookie)
console.log("time", WriteCookiesTime.value)
//
ReadCookiesTime.value = moment(cookie).format('YYYY-MM-DD HH:mm:ss')
console.log("cookie========", cookie)
if (cookie) {
ConsumeDialogVisible.value = true;
} else {
FirstConsumeDialogVisible.value = true;
}
});
};
//
const getUser = async function (jwcode) {
if (!jwcode || !/^\d{1,9}$/.test(jwcode)) {
ElMessage.warning("精网号不能为空或格式不正确");
return;
}
try {
const result = await request({ url: "/user/selectUser", data: { jwcode } });
if (result.code === 200 && result.data) {
user.value = { ...result.data };
ElMessage.success("查询成功");
} else {
ElMessage.warning(result.msg || "用户不存在");
}
} catch (err) {
console.error(err);
ElMessage.error("查询失败,请检查网络或精网号");
}
};
onMounted(async function () {
await getGoods();
});
</script>
<template>
<div class="father1">
<div class="left">
<el-form :model="addConsume" ref="Ref" :rules="rules" style="min-width: 420px;" class="add-form"
label-width="auto" label-position="right">
<el-form-item prop="jwcode" label="精网号" style="margin-top: 50px">
<el-input v-model="addConsume.jwcode" style="width: 200px;" />
<el-button type="primary" @click="getUser(addConsume.jwcode)" style="margin-left: 20px">查询
</el-button>
</el-form-item>
<el-form-item prop="goodsName" label="商品名称" >
<el-input v-model="addConsume.goodsName" disabled style="width: 120px" />
</el-form-item>
<!-- 三类金币可编辑 -->
<el-form-item prop="permanentGold" label="永久金币">
<el-input v-model.number="addConsume.permanentGold" style="width: 120px" @input="validateInputToPermanentGold()"/>
<p>&nbsp;&nbsp;</p>
</el-form-item>
<el-form-item prop="freeGold" label="免费金币">
<el-input v-model.number="addConsume.freeGold" style="width: 120px" @input="validateInputToFreeGold()" />
<p>&nbsp;&nbsp;</p>
</el-form-item>
<el-form-item prop="taskGold" label="任务金币">
<el-input v-model.number="addConsume.taskGold" style="width: 120px" @input="validateInputToTaskGold()" />
<p>&nbsp;&nbsp;</p>
</el-form-item>
<el-form-item prop="sumGold" label="消耗金币总数">
<el-input v-model.number="addConsume.sumGold" style="width: 120px" disabled />
</el-form-item>
<el-form-item prop="remark" label="备注">
<el-input v-model="addConsume.remark" style="width: 250px" :rows="4" maxlength="100" show-word-limit
type="textarea" />
</el-form-item>
<el-button type="success" @click="resetForm()" style="margin-left: 200px;margin-top:10px">重置</el-button>
<el-button type="primary" :disabled="addDisabled" @click="addBefore" style="margin-top:10px"> 提交</el-button>
</el-form>
</div>
<div class="right">
<!-- 客户信息栏 -->
<el-card v-if="user.jwcode" style="width: 800px; float: right" class="customer-info">
<el-form :model="user" label-width="auto" style="max-width: 1000px" label-position="left">
<el-text size="large" style="margin-left: 20px">客户信息</el-text>
<!-- 第一行姓名 + 历史金币 -->
<el-row style="margin-top: 20px">
<el-col :span="9">
<el-form-item label="姓名">
<p>{{ user.name }}</p>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="当前金币总数" style="width: 500px">
<span style="color: #2fa1ff; margin-right: 5px" v-if="user.nowSumGold !== undefined">{{
user.nowSumGold
}}</span>
</el-form-item>
<!-- 金币详情独立显示 -->
<el-form-item style="margin-top: -23px"> <!-- 负边距减少间距 -->
<span style="color: #b1b1b1; margin-left: 0px" v-if="user.nowPermanentGold !== undefined">(永久金币:{{
user.nowPermanentGold
}};
免费金币:{{ user.nowFreeGold }};
任务金币:{{ user.nowTaskGold }})</span>
</el-form-item>
</el-col>
</el-row>
<!-- 第二行精网号 + 当前金币独立行 -->
<el-row>
<el-col :span="9">
<el-form-item label="精网号">
<p>{{ user.jwcode }}</p>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="消费次数">
<p style="color: #2fa1ff">{{ user.consumeNum }} </p>
</el-form-item>
<el-form-item style="margin-top: -23px"> <!-- 负边距减少间距 -->
<p style="font-size: small; color: #b1b1b1">(仅统计2025-01-01后的数据)</p>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行首次充值日期 + 充值次数 -->
<!-- <el-row >
<el-col :span="9">
<el-form-item label="首次充值日期">
<p v-if="user.firstRecharge">
{{ moment(user.firstRecharge).format('YYYY-MM-DD HH:mm:ss') }}
</p>
</el-form-item>
</el-col>
</el-row> -->
<!-- 第四行消费次数 + 所属门店 -->
<el-row>
<el-col :span="9">
<el-form-item label="所属门店">
<p>{{ user.market }}</p>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-dialog v-model="FirstConsumeDialogVisible" title="操作确认" :before-close="FirstConsumeDialogVisiblehandleClose"
:close-on-click-modal="false" width="480px">
<!-- 内容整体居中且收窄 -->
<div class="confirm-body">
<!-- 用户信息 -->
<div>
<div class="field-label">用户信息</div>
<el-input :model-value="user.jwcode + (user.name ? '' + user.name + '' : '')" disabled />
</div>
<!-- 活动名称 -->
<div class="field">
<div class="field-label">商品名称</div>
<el-input v-model="addConsume.goodsName" disabled />
</div>
<!--金币总数 -->
<div class="field">
<div class="field-label">金币总数</div>
<el-input v-model="addConsume.sumGold" disabled />
</div>
<!-- 金币详细信息同一行左右排列 -->
<el-row :gutter="20" class="coins-row">
<el-col :span="8">
<div class="field">
<div class="field-label">永久金币</div>
<el-input v-model="addConsume.permanentGold" disabled />
</div>
</el-col>
<el-col :span="8">
<div class="field">
<div class="field-label">免费金币</div>
<el-input v-model="addConsume.freeGold" disabled />
</div>
</el-col>
<el-col :span="8">
<div class="field">
<div class="field-label">任务金币</div>
<el-input v-model="addConsume.taskGold" disabled />
</div>
</el-col>
</el-row>
<div class="field">
<div class="field-label">备注</div>
<el-input v-model="addConsume.remark" disabled />
</div>
</div>
<!-- 底部按钮居中 -->
<template #footer>
<div class="dialog-footer-center">
<el-button @click="FirstConsumeDialogVisibleCancel"> </el-button>
<el-button type="primary" @click="FirstConsumeDialogVisibleContinue">确认退款</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="ConsumeDialogVisible" title="操作确认" :before-close="ConsumeDialogVisiblehandleClose"
:close-on-click-modal="false" width="480px">
<!-- 内容整体居中且收窄 -->
<div class="confirm-body">
<!-- 用户信息 -->
<div>
<div class="field-label">用户信息</div>
<el-input :model-value="user.jwcode + (user.name ? '' + user.name + '' : '')" disabled />
</div>
<!-- 活动名称 -->
<div class="field">
<div class="field-label">商品名称</div>
<el-input v-model="addConsume.goodsName" disabled />
</div>
<!--金币总数 -->
<div class="field">
<div class="field-label">金币总数</div>
<el-input v-model="addConsume.sumGold" disabled />
</div>
<!-- 金币详细信息同一行左右排列 -->
<el-row :gutter="20" class="coins-row">
<el-col :span="8">
<div class="field">
<div class="field-label">永久金币</div>
<el-input v-model="addConsume.permanentGold" disabled />
</div>
</el-col>
<el-col :span="8">
<div class="field">
<div class="field-label">免费金币</div>
<el-input v-model="addConsume.freeGold" disabled />
</div>
</el-col>
<el-col :span="8">
<div class="field">
<div class="field-label">任务金币</div>
<el-input v-model="addConsume.taskGold" disabled />
</div>
</el-col>
</el-row>
<!-- 风险提示 -->
<div style="display: flex; align-items: center; margin-top: 20px;">
<el-icon :size="24" color="#FFD700">
<WarnTriangleFilled />
</el-icon>
<p>重复购买风险提示</p>
</div>
<!-- 记录 + 虚线分隔 -->
<div>
<el-divider border-style="dashed" />
<p>检测到该用户近期有相似退款记录</p>
· {{ ReadCookiesTime }} 退款 {{ addConsume.goodsName }}(操作人: {{ adminData.adminName }})
</div>
<div style="margin-top: 10px">
<p>是否继续操作</p>
</div>
</div>
<!-- 底部按钮居中 -->
<template #footer>
<div class="dialog-footer-center">
<el-button @click="ConsumeDialogVisibleCancel"> </el-button>
<el-button type="primary" @click="ConsumeDialogVisibleContinue">确认退款</el-button>
</div>
</template>
</el-dialog>
</div>
</div>
</template>
<style scoped lang="scss">
p {
margin: 0px;
}
/* 上传图片的格式 */
.avatar-uploader .avatar {
width: 50px;
height: 50px;
display: block;
}
.add-form {
width: 400px;
float: left;
}
/* 标题居中 */
.el-dialog__header {
text-align: center;
}
.confirm-body {
width: 350px;
margin: 0 auto;
}
/* 字段块与标签样式 */
.field {
margin-bottom: 14px;
}
.field-label {
font-size: 14px;
color: #606266;
margin-bottom: 6px;
}
/* 金币行紧凑 */
.coins-row .field {
margin-bottom: 0;
}
/* 底部按钮居中 */
.dialog-footer-center {
display: flex;
justify-content: center;
gap: 12px;
}
.father1 {
width: 82vw;
height: 80vh;
display: flex;
.left {
width: 500px;
float: left;
display: flex;
}
.right {
flex: 1;
height: 50vh;
display: flex;
align-items: center;
.customer-info {
width: 300px;
margin-left: 20px;
display: flex;
justify-content: center;
align-items: center;
}
}
}
</style>

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

@ -45,8 +45,8 @@ const navigateTo = (name) => {
const initPermissions = () => { const initPermissions = () => {
if (!menuTree.value || !menuTree.value.length) return; if (!menuTree.value || !menuTree.value.length) return;
hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.Submit_Gold_Coin_Refund);
hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.View_Gold_Coin_Refund_Details);
hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.addCoinRefund);
hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.coinRefundDetail);
}; };
// //
@ -54,7 +54,7 @@ const getDefaultAuditRoute = () => {
initPermissions(); initPermissions();
if (hasDetail.value) return 'coinRefundDetail'; if (hasDetail.value) return 'coinRefundDetail';
if (hasAdd.value) return 'addCoinRefund'; if (hasAdd.value) return 'addCoinRefund';
return 'addCoinRefund';
return 'coinRefundDetail';
}; };
// //
@ -77,7 +77,7 @@ onMounted(() => {
navigateTo(defaultRoute); navigateTo(defaultRoute);
} else { } else {
// //
if (route.name === 'addCoinRefund' || route.name === 'coinRefundDetail') {
if (route.name === 'coinRefundDetail' || route.name === 'addCoinRefund') {
activeTab.value = route.name; activeTab.value = route.name;
} }
} }

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

@ -6,8 +6,13 @@ import moment from 'moment'
import API from '@/util/http.js' import API from '@/util/http.js'
import request from '@/util/http.js' import request from '@/util/http.js'
import { reverseMarketMapping } from "@/utils/marketMap.js"; import { reverseMarketMapping } from "@/utils/marketMap.js";
import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia";
import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
import dayjs from "dayjs"; import dayjs from "dayjs";
const adminStore = useAdminStore();
const { adminData, menuTree } = storeToRefs(adminStore);
const showEmployeeData = ref(false) const showEmployeeData = ref(false)
@ -48,18 +53,6 @@ const activeTimeRange = ref('')
const handleDatePickerChange = () => { const handleDatePickerChange = () => {
activeTimeRange.value = '' activeTimeRange.value = ''
} }
const adminData = ref({})
const getAdminData = async function () {
try {
const result = await API({ url: '/admin/userinfo', data: {} })
adminData.value = result
console.log('请求成功', result)
console.log('用户信息', adminData.value)
} catch (error) {
console.log('请求失败', error)
}
}
// //
const tableData = ref([]) const tableData = ref([])
// ====================================== // ======================================
@ -121,6 +114,10 @@ const getRefundTypes = async function () {
// ============================================================== // ==============================================================
// //
const getSelectBy = async function (val) { const getSelectBy = async function (val) {
if (!findMenuById(menuTree.value, permissionMapping.coinRefundDetail)) {
ElMessage.error('无此权限')
return
}
try { try {
// //
if (typeof val === 'number') { if (typeof val === 'number') {
@ -312,7 +309,7 @@ const getGoods = async function () {
// //
onMounted(async function () { onMounted(async function () {
await getAdminData()
console.log('=======',adminData.value)
await getSelectBy() await getSelectBy()
await getMarket() await getMarket()
await getRefundTypes() await getRefundTypes()

9
src/views/usergold/bean/userbean.vue

@ -74,7 +74,6 @@ const pagination = ref({
total: 0 total: 0
}) })
const get = async function () { const get = async function () {
if(findMenuById(menuTree.value, permissionMapping.View_Golden_Bean_Balance)){
try { try {
trim() trim()
if(searchObj.value.jwcode){ if(searchObj.value.jwcode){
@ -105,12 +104,9 @@ const get = async function () {
} catch (error) { } catch (error) {
console.log(error) console.log(error)
} }
}else{
ElMessage.error('无此权限')
}
} }
const getStats = async () => { const getStats = async () => {
if (findMenuById(menuTree.value, permissionMapping.View_Golden_Bean_Balance)) {
try { try {
const params = { const params = {
beanUser:{ beanUser:{
@ -131,10 +127,7 @@ const getStats = async () => {
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
} }
}else{
ElMessage.error('无此权限')
} }
}
const handleSortChange = (column) => { const handleSortChange = (column) => {
if (column.prop === 'beanNum') { if (column.prop === 'beanNum') {
searchObj.value.sortField = 'jinbi' searchObj.value.sortField = 'jinbi'

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

@ -51,8 +51,8 @@ const navigateTo = (name) => {
const initPermissions = () => { const initPermissions = () => {
if (!menuTree.value || !menuTree.value.length) return; if (!menuTree.value || !menuTree.value.length) return;
hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.View_Gold_Coin_Details);
hasBalance.value = hasMenuPermission(menuTree.value, permissionMapping.View_Gold_Coin_Balance);
hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.coinCustomerDetail);
hasBalance.value = hasMenuPermission(menuTree.value, permissionMapping.coinCustomerMoney);
}; };
// //

22
src/views/usergold/gold/clientCountBalance.vue

@ -1,5 +1,10 @@
<script setup> <script setup>
// //
import { useAdminStore } from "@/store/index.js"
import { storeToRefs } from "pinia"
import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
const adminStore = useAdminStore()
const { adminData, menuTree } = storeToRefs(adminStore)
import {onMounted, ref} from 'vue' import {onMounted, ref} from 'vue'
import {ElMessage} from 'element-plus' import {ElMessage} from 'element-plus'
import moment from 'moment' import moment from 'moment'
@ -11,19 +16,7 @@ const showEmployeeData = ref(false)
// //
//
const adminData = ref({})
const dialogVisible = ref(false) const dialogVisible = ref(false)
const getAdminData = async function () {
try {
const result = await API({url: '/admin/userinfo', data: {}})
adminData.value = result
// console.log('', result)
console.log('管理员用户信息', adminData.value)
} catch (error) {
console.log('请求失败', error)
}
}
// //
const isLoadingmarket = ref(false); const isLoadingmarket = ref(false);
@ -72,6 +65,10 @@ const sortOrder = ref('')
// =========================================================================== // ===========================================================================
// //
const get = async function (val) { const get = async function (val) {
if(!findMenuById(menuTree.value, permissionMapping.coinCustomerMoney)){
ElMessage.error('无此权限')
return
}
try { try {
// //
if (typeof val === 'number') { if (typeof val === 'number') {
@ -228,7 +225,6 @@ const handleSortChange = (column) => {
// //
onMounted(async function () { onMounted(async function () {
await getAdminData()
await get() await get()
await getMarket() await getMarket()
await getExportList() await getExportList()

53
src/views/usergold/gold/clientCountDetail.vue

@ -6,7 +6,11 @@ import moment from 'moment'
import API from '@/util/http.js' import API from '@/util/http.js'
import {reverseMarketMapping} from "../../../utils/marketMap.js"; import {reverseMarketMapping} from "../../../utils/marketMap.js";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useAdminStore } from "@/store/index.js"
import { storeToRefs } from "pinia"
import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
const adminStore = useAdminStore()
const { adminData, menuTree } = storeToRefs(adminStore)
// //
const showEmployeeData = ref(false) const showEmployeeData = ref(false)
@ -29,18 +33,6 @@ const totalTaskGold = ref(0)
const totalGoldTotal = ref(0) const totalGoldTotal = ref(0)
// //
const adminData = ref({})
const getAdminData = async function () {
try {
const result = await API({url: '/admin/userinfo', data: {}})
adminData.value = result
console.log('请求成功', result)
console.log('管理员用户信息', adminData.value)
} catch (error) {
console.log('请求失败', error)
}
}
// goldDetail jwcode // goldDetail jwcode
const trimJwCode = () => { const trimJwCode = () => {
if (goldDetail.value.jwcode) { if (goldDetail.value.jwcode) {
@ -128,6 +120,10 @@ const getObj = ref({
// =========================================================================== // ===========================================================================
// //
const get = async function (val) { const get = async function (val) {
if(!findMenuById(menuTree.value, permissionMapping.coinCustomerDetail)){
ElMessage.error('无此权限')
return
}
try { try {
// //
if (typeof val === 'number') { if (typeof val === 'number') {
@ -174,18 +170,6 @@ const get = async function (val) {
console.log('响应数据', result) console.log('响应数据', result)
tableData.value = result.data.list tableData.value = result.data.list
total.value = result.data.total total.value = result.data.total
//
// permanentGold.value = tableData.value.reduce((total, row) => {
// return total + (Number(row.permanentGold) || 0);
// }, 0);
// taskGold.value = tableData.value.reduce((total, row) => {
// return total + (Number(row.taskGold) || 0);
// }, 0);
//6+12
const totalResult = await API({ const totalResult = await API({
url: '/goldDetail/getTotal', url: '/goldDetail/getTotal',
method: 'post', method: 'post',
@ -278,28 +262,12 @@ const get7Days = function () {
search() search()
} }
// //
// const sumGoldTotal = computed(() => {
// return tableData.value.reduce((total, row) => {
// return total + (Number(row.sumGold) || 0);
// }, 0);
// });
// 6+12 // 6+12
const calculateFreeGold = (row) => { const calculateFreeGold = (row) => {
const freeJune = row.freeJune || 0; const freeJune = row.freeJune || 0;
const freeDecember = row.freeDecember || 0; const freeDecember = row.freeDecember || 0;
return (freeJune + freeDecember); return (freeJune + freeDecember);
};
//
// const totalFreeGold = computed(() => {
// return tableData.value.reduce((total, row) => {
// return total + calculateFreeGold(row);
// }, 0);
// });
}
// //
const sortField = ref('') const sortField = ref('')
const sortOrder = ref('') const sortOrder = ref('')
@ -355,7 +323,6 @@ const handleCurrentChange = function (val) {
// //
onMounted(async function () { onMounted(async function () {
await getAdminData()
await get() await get()
await getMarket() await getMarket()

Loading…
Cancel
Save