19 Commits

Author SHA1 Message Date
zhangrenyuan f077870a9a Merge branch 'milestone-20250815-金币优化' of http://39.101.133.168:8807/huangqizhen/gold-vue into milestone-20250815-金币优化 1 month ago
zhangrenyuan 25baeb30f9 fix form and page栏 重叠bug 1 month ago
ZhangYong 46db912d85 退款审核退款类型 1 month ago
lihui 49a59b31fc Merge branch 'refs/heads/lihui/feature-20250815155204-金币优化' into milestone-20250815-金币优化 1 month ago
lihui 62f10ae4d1 feat:备注必填 1 month ago
ZhangYong 9ce97b1fcb Merge branch 'zhangyong/feature-20250815160302-金币优化' into milestone-20250815-金币优化 1 month ago
ZhangYong 07b8d81311 退款明细 1 month ago
lihui 8b18f60d10 feat:备注必填 1 month ago
ZhangYong 2259f9fa83 Merge branch 'zhangyong/feature-20250815160302-金币优化' into milestone-20250815-金币优化 1 month ago
ZhangYong bde42ecde7 1 1 month ago
lihui 7ffb8bba59 Merge remote-tracking branch 'origin/milestone-20250815-金币优化' into milestone-20250815-金币优化 1 month ago
lihui e9be442639 feat:新需求,金币退款 1 month ago
ZhangYong 4c4e4b9f87 Merge branch 'zhangyong/feature-20250815160302-金币优化' into milestone-20250815-金币优化 1 month ago
ZhangYong d248184c6f 金币客户明细排序 1 month ago
lihui fef8f95557 Merge remote-tracking branch 'origin/milestone-20250815-金币优化' into milestone-20250815-金币优化 1 month ago
lhl 2b288ec2ad Merge branch 'lihuilin/feature-20250815155204-金币优化' into milestone-20250815-金币优化 1 month ago
lihui 3ccb108d9a fix:两个驳回 1 month ago
lhl f6bcb51eac 专业改样式八百年 1 month ago
ZhangYong 3a8be6a3d6 金豆文章样式 1 month ago
  1. 6
      src/router/index.js
  2. 2
      src/util/request.js
  3. 3
      src/utils/menuTreePermission.js
  4. 10
      src/views/audit/bean/beanAudit.vue
  5. 11
      src/views/audit/gold/refundAudit.vue
  6. 86
      src/views/consume/bean/addBeanConsume.vue
  7. 14
      src/views/consume/bean/articleVideo.vue
  8. 2
      src/views/consume/bean/dieHardFan.vue
  9. 5
      src/views/consume/bean/liveStream.vue
  10. 4
      src/views/consume/gold/coinConsumeDetail.vue
  11. 145
      src/views/home.vue
  12. 2
      src/views/recharge/bean/addBeanRecharge.vue
  13. 2
      src/views/recharge/bean/beanOnlineRecharge.vue
  14. 3
      src/views/recharge/bean/beanSystemRecharge.vue
  15. 726
      src/views/refund/gold/addNewCoinRefund.vue
  16. 11
      src/views/refund/gold/coinRefund.vue
  17. 8
      src/views/refund/gold/coinRefundDetail.vue
  18. 4
      src/views/usergold/bean/userbean.vue
  19. 2
      src/views/usergold/gold/clientCountBalance.vue
  20. 2
      src/views/usergold/gold/clientCountDetail.vue
  21. 6
      src/views/workspace/index.vue

6
src/router/index.js

@ -206,6 +206,12 @@ const routes = [
name: "coinRefundDetail",
component: () => import("../views/refund/gold/coinRefundDetail.vue"),
meta: {permissionId: 22} // 对应"查看金币退款明细"id=22
},
{
path: 'addRefund',
name: "addNewCoinRefund",
component: () => import("../views/refund/gold/addNewCoinRefund.vue"),
meta: {permissionId: 58}
}
]
},

2
src/util/request.js

@ -2,7 +2,7 @@ import axios from 'axios'
// 创建axios实例
const service = axios.create({
baseURL: import.meta.env.VITE_API_BASE,//.env.development
timeout: 10000,
timeout: 1000000,
headers: {
'Content-Type': 'application/json'
},

3
src/utils/menuTreePermission.js

@ -46,6 +46,9 @@ export const permissionMapping = {
Submit_Gold_Coin_Refund: 21, // 提交金币退款 // coinRefund页面
View_Gold_Coin_Refund_Details: 22, // 查看金币退款明细 // coinRefund页面
Submit_Gold_Coin_RefundS: 58, // 提交金币退款 // coinRefund页面
View_Gold_Coin_Details: 23, // 查看金币明细 //usergold页面
View_Gold_Coin_Balance: 24, // 查看金币余额 //usergold页面

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

@ -206,9 +206,13 @@ const get = async function () {
searchForm.value.createStartTime = ''
searchForm.value.createEndTime = ''
}
// if (searchForm.value.market === '' || searchForm.value.market === '') {
// searchForm.value.market = '';
// }
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,//

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

@ -1,5 +1,5 @@
<template>
<el-card style="margin-bottom: 0.5vh;width:82vw">
<el-card style="margin-bottom: 0.5vh;">
<el-col style="margin-bottom: 0.5vh">
<el-text size="large">精网号</el-text>
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw" clearable/>
@ -10,10 +10,10 @@
<el-option v-for="item in refundGoodsOptions" :key="item" :label="item" :value="item"></el-option>
</el-select>
<el-text size="large">退款方式</el-text>
<el-select v-model="searchForm.refundModel" placeholder="请选择" style="width: 12vw;margin-right:1vw" clearable>
<el-option label="全部退款" value="0"/>
<el-option label="部分退款" value="1"/>
<el-text size="large">退款类型</el-text>
<el-select v-model="searchForm.refundType" placeholder="请选择" style="width: 12vw;margin-right:1vw" clearable>
<el-option label="商品退款" value="商品退款"/>
<el-option label="金币退款" value="金币退款"/>
</el-select>
<el-text size="large">所属地区</el-text>
@ -122,7 +122,6 @@
</el-popconfirm>
<el-button :disabled="clicked || cancelClicked" type="primary" text @click="showRejectDialog(scope.row)">
驳回
驳回
</el-button>
</div>
</template>

86
src/views/consume/bean/addBeanConsume.vue

@ -223,9 +223,6 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
<el-input v-model="consumeForm.remark" style="width: 300px" :rows="5" maxlength="100" show-word-limit
type="textarea" />
</el-form-item>
<!-- <el-form-item prop="adminName" label="提交人">
<el-input style="width: 300px" :value="adminData.adminName" disabled placeholder="提交人姓名" />
</el-form-item> -->
<el-button @click="deleteConsumeForm" style="margin-left: 280px" type="success">重置</el-button>
<el-button type="primary" :disabled="addDisabled" @click="handleConsumeForm"> 提交 </el-button>
</el-form>
@ -233,57 +230,36 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
<div class="right">
<!-- 客户信息栏 -->
<el-card v-if="user.jwcode" class="customer-info">
<el-form :model="user" label-width="auto" label-position="left">
<el-text size="large" style="min-width: 600px;">客户信息</el-text>
<el-form :model="user" label-width="auto" label-position="left">
<el-text size="large" style="margin-left: 7vw">客户信息</el-text>
<!-- 第一行姓名 + 当前付费金豆 -->
<div style="margin-top: 0.5vw;display:flex;">
<p style="width:6vw;">姓名:</p>
<p style="color: #2fa1ff;width:6vw;">{{ user.name }}</p>
<p style="width:7vw;">当前付费金豆:</p>
<p v-if="!isNaN(Number(user.permanentBean))" style="color: #2fa1ff;">{{ Number(user.permanentBean) }}</p>
<!-- 如果不是有效的数字显示默认值 -->
<p v-else></p>
</div>
<!-- 第一行姓名 + 当前付费金豆 -->
<el-row style="margin-top: 20px">
<el-col :span="9">
<el-form-item label="姓名:">
<p style="color: #2fa1ff; margin-right: 5px">{{ user.name }}</p>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="当前付费金豆:">
<p style="color: #2fa1ff; margin-right: 5px" v-if="!isNaN(Number(user.permanentBean))">
{{ Number(user.permanentBean) }}
</p>
<!-- 如果不是有效的数字显示默认值 -->
<p v-else></p>
</el-form-item>
</el-col>
</el-row>
<!-- 第二行精网号 + 免费金豆 -->
<div style="display:flex;margin-top: 2vw;">
<p style="width:6vw;">精网号:</p>
<p style="color: #2fa1ff;width:6vw;">{{ user.jwcode }}</p>
<p style="width:7vw;">当前免费金豆:</p>
<p v-if="user.freeBean !== undefined" style="color: #2fa1ff;">{{ user.freeBean }}</p>
</div>
<!-- 第二行精网号 + 免费金豆 -->
<el-row>
<el-col :span="9">
<el-form-item label="精网号">
<p style="color: #2fa1ff; margin-right: 5px">{{ user.jwcode }}</p>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="当前免费金豆:">
<span style="color: #2fa1ff; margin-right: 5px" v-if="user.freeBean !== undefined">{{ user.freeBean }}
</span>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行消费次数 + 所属门店 -->
<el-row>
<el-col :span="9">
<el-form-item label="所属门店">
<p style="color: #2fa1ff">{{ user.market }}</p>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="消耗金豆总数">
<p style="color: #2fa1ff; margin-right: 5px" v-if="user.consumeSum != null">{{ user.consumeSum }}</p>
<p style="color: #2fa1ff; margin-right: 5px" v-else>{{ 0 }}</p>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 第三行消费次数 + 所属门店 -->
<div style="display:flex;margin-top: 2vw;">
<p style="width:6vw;">所属门店:</p>
<p style="color: #2fa1ff;width:6vw;">{{ user.market }}</p>
<p style="width:7vw;">消耗金豆总数:</p>
<p style="color: #2fa1ff;" v-if="user.consumeSum != null">{{ user.consumeSum }}</p>
<p style="color: #2fa1ff;" v-else>{{ 0 }}</p>
</div>
</el-form>
</el-card>
</div>
</div>
</template>
@ -306,12 +282,14 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
.right {
flex: 1;
display: flex;
margin-left: 10%;
.customer-info {
width: 35vw;
height:28vh;
float: right;
height: 28vh;
margin-top: 5vh;
display: flex;
justify-content: center;
}
}
}

14
src/views/consume/bean/articleVideo.vue

@ -468,17 +468,17 @@ const getTagText = (state) => {
<div style="display:flex">
<div style="width: 13vw; display:flex; align-items:center; justify-content: center;">
<el-text>精网号</el-text>
<el-input v-model="beanConsumeArticle.jwcode" style="width:8vw;" placeholder="请输入精网号" clearable />
<el-input v-model="beanConsumeArticle.jwcode" style="width:8vw;margin-left: 0.5vw;" placeholder="请输入精网号" clearable />
</div>
<div style="width: 13vw; display:flex; align-items:center; justify-content: center;">
<el-text>地区</el-text>
<el-select v-model="beanConsumeArticle.dept" style="width:8vw;" placeholder="请选择地区" clearable>
<el-select v-model="beanConsumeArticle.dept" style="width:8vw; margin-left: 0.5vw;" placeholder="请选择地区" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select>
</div>
<div style="width: 13vw; display:flex;align-items:center; justify-content: center;">
<el-text>类型</el-text>
<el-select v-model="beanConsumeArticle.payMode" style="width:8vw;" placeholder="请选择类型" clearable @change="handlePayModeChange">
<el-select v-model="beanConsumeArticle.payMode" style="width:8vw; margin-left: 0.5vw;" placeholder="请选择类型" clearable @change="handlePayModeChange">
<el-option label="打赏" value="0" />
<el-option label="付费购买" value="1" />
<el-option label="其他" value="2" />
@ -486,15 +486,15 @@ const getTagText = (state) => {
</div>
<div style="width: 15vw; display:flex; align-items:center; justify-content: center;">
<el-text>文章/视频ID:</el-text>
<el-input v-model="beanConsumeArticle.articleId" style="width:8vw;" placeholder="请输入文章/视频ID" clearable />
<el-input v-model="beanConsumeArticle.articleId" style="width:8vw; margin-left: 0.5vw;" placeholder="请输入文章/视频ID" clearable />
</div>
<div style="width: 16vw; display:flex; align-items:center; justify-content: center;">
<el-text>文章/视频标题</el-text>
<el-input v-model="beanConsumeArticle.articleName" style="width:9vw;" placeholder="请输入文章/视频标题" clearable />
<el-input v-model="beanConsumeArticle.articleName" style="width:9vw; margin-left: 0.5vw;" placeholder="请输入文章/视频标题" clearable />
</div>
<div style="width: 12vw; display:flex; align-items:center; justify-content: center;">
<el-text>作者</el-text>
<el-input v-model="beanConsumeArticle.author"style="width:8vw;" placeholder="请输入作者" clearable />
<el-input v-model="beanConsumeArticle.author"style="width:8vw; margin-left: 0.5vw;" placeholder="请输入作者" clearable />
</div>
</div>
</el-col>
@ -523,7 +523,7 @@ const getTagText = (state) => {
免费金豆数{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="55vh" @sort-change="handleSortChange">
<el-table :data="tableData" style="width: 82vw" height="57vh" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope">
<span>{{

2
src/views/consume/bean/dieHardFan.vue

@ -506,7 +506,7 @@ const getTagText = (state) => {
免费金豆数{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="55vh" @sort-change="handleSortChange">
<el-table :data="tableData" style="width: 82vw" height="57vh" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope">
<span>{{

5
src/views/consume/bean/liveStream.vue

@ -502,7 +502,7 @@ const getTagText = (state) => {
</script>
<template>
<el-card style="margin-bottom: 1vh;width:80vw;">
<el-card style="margin-bottom: 1vh;">
<div style="margin-bottom: 1vh;display: flex;">
<div style="width: 18vw;margin-right: 1vw;display: flex;align-items: center;">
<el-text>精网号</el-text>
@ -556,9 +556,8 @@ const getTagText = (state) => {
付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金豆数{{ format3(Math.abs(freeBean)) }}
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="55vh" @sort-change="handleSortChange">
<el-table :data="tableData" style="width: 82vw" height="56vh" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope">
<span>{{

4
src/views/consume/gold/coinConsumeDetail.vue

@ -613,8 +613,8 @@ const getMarket = async function () {
免费金币{{ format3(Math.abs(freeGolds)) }}&nbsp;&nbsp;&nbsp;&nbsp;
任务金币{{ format3(Math.abs(taskGolds)) }}
</div>
<div style="height: 55vh;">
<el-table :data="tableData" style="height: 95%" @sort-change="handleSortChange">
<div style="height: 58vh;">
<el-table :data="tableData" style="height: 57vh" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope">
<span>{{

145
src/views/home.vue

@ -1,13 +1,13 @@
<script setup>
//
import {computed, ref} from 'vue'
import {useRoute, useRouter} from 'vue-router'
import {ElMessage} from 'element-plus'
import { computed, ref } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import dmmn from '../assets/link.png'
import ChangePassword from '@/components/changePassword.vue'
import {useAdminStore} from '@/store'
import {storeToRefs} from 'pinia'
import {filterMenu, getRoutePath} from "@/utils/menuUtils.js";
import { useAdminStore } from '@/store'
import { storeToRefs } from 'pinia'
import { filterMenu, getRoutePath } from "@/utils/menuUtils.js";
//
const menuList = ref([])
@ -15,7 +15,7 @@ const menuList = ref([])
//
const adminStore = useAdminStore()
// adminData menuTree
const {adminData, menuTree} = storeToRefs(adminStore)
const { adminData, menuTree } = storeToRefs(adminStore)
// ,menuTree
menuList.value = filterMenu(menuTree.value)
@ -76,7 +76,7 @@ const openChangePassword = () => {
showPasswordDialog.value = true
}
//
function onPwdDialogClosed () {
function onPwdDialogClosed() {
// resetFields
pwdRef.value?.resetFields()
}
@ -93,57 +93,32 @@ function logout() {
</script>
<template>
<div class="common-layout">
<div>
<el-container>
<el-aside style="
width: 15%;
max-width: 20%;
position: fixed; /* 固定位置 */
top: 0;
left: 0;
height: 100vh; /* 高度占满视口 */
z-index: 100; /* 确保侧边栏在其他元素之上 */
">
<el-aside >
<div class="logo">
<img src="../assets/新logo.png" alt="logo" style="width: 80px; height: 80px"/>
<!-- <div style="font-size: 16px; font-weight: bold; color: black; text-align: center;" ><h1>海外金币管理系统</h1></div> -->
<img src="../assets/新logo.png" alt="logo" style="width: 9vh; height: 9vh" />
</div>
<el-card style="min-height: 90%;">
<el-menu
:router="true"
class="el-menu-vertical-demo"
:default-active="activeMenu"
>
<el-menu :router="true" :default-active="activeMenu" style="min-height: 80vh;border:none;">
<!-- 递归渲染菜单层级 -->
<template v-for="menu in menuList" :key="menu.id">
<!-- 有子菜单的父级菜单menuType=2 且存在children -->
<el-sub-menu
v-if="menu.children && menu.children.length > 0"
:index="menu.id.toString()"
>
<el-sub-menu v-if="menu.children && menu.children.length > 0" :index="menu.id.toString()">
<template #title>
<el-icon>
<Folder/>
<Folder />
</el-icon>
<span>{{ menu.menuName }}</span>
</template>
<!-- 子菜单 -->
<template v-for="child in menu.children" :key="child.id">
<!-- 子菜单为叶子节点无children -->
<el-menu-item
v-if="!child.children || child.children.length === 0"
:index="getRoutePath(child)"
>
<el-menu-item v-if="!child.children || child.children.length === 0" :index="getRoutePath(child)">
<span>{{ child.menuName }}</span>
</el-menu-item>
<!-- 子菜单有下级 -->
<el-sub-menu
v-else
:index="child.id.toString()"
>
<el-sub-menu v-else :index="child.id.toString()">
<template #title>
<span>{{ child.menuName }}</span>
</template>
@ -158,49 +133,31 @@ function logout() {
</el-sub-menu>
<!-- 无子菜单的一级菜单 -->
<el-menu-item
v-else
:index="getRoutePath(menu)"
>
<el-menu-item v-else :index="getRoutePath(menu)">
<el-icon>
<Folder/>
<Folder />
</el-icon>
<span>{{ menu.menuName }}</span>
</el-menu-item>
</template>
</el-menu>
</el-card>
</el-aside>
<el-container style="margin-left: 15%; min-width: 180px">
<!-- 修改 el-header 样式 -->
<el-header style="
position: fixed;
top: 0;
left: 15%;
right: 0;
z-index: 80;
background: white;
">
<el-container style="margin-left: 15vw;">
<el-header class="header">
<el-menu class="el-menu-demo" mode="horizontal" :ellipsis="false">
<el-sub-menu index="1" class="admin">
<el-sub-menu index="1">
<template #title>
<el-image :src="imgrule1" alt="错误" style="width: 50px; height: 50px"/>
<el-image :src="imgrule1" style="width: 50px; height: 50px" />
<span style="margin-left: 10px">{{ adminData.name }}</span>
</template>
<el-menu-item @click="message()">查看个人信息</el-menu-item>
<el-menu-item @click="openChangePassword">修改密码</el-menu-item>
<el-menu-item @click="logout">退出登录</el-menu-item>
</el-sub-menu>
</el-menu>
</el-header>
<el-main style="margin-top: 60px">
<!-- 60px el-header 的大致高度可根据实际情况调整 -->
<el-main style="margin-top: 6vh;height: auto;">
<router-view></router-view>
</el-main>
</el-container>
@ -223,68 +180,50 @@ function logout() {
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<div>
<el-button text @click="closeMessage()">关闭</el-button>
</div>
</template>
</el-dialog>
<!-- 自定义密码修改弹窗组件 -->
<el-dialog
v-model="showPasswordDialog"
:center="true"
width="470px"
@closed="onPwdDialogClosed"
>
<ChangePassword
ref="pwdRef"
@confirm="showPasswordDialog = false"
/>
<el-dialog v-model="showPasswordDialog" :center="true" width="470px" @closed="onPwdDialogClosed">
<ChangePassword ref="pwdRef" @confirm="showPasswordDialog = false" />
</el-dialog>
</div>
</template>
<style scoped>
.header {
position: fixed;
right: 0;
z-index: 80;
background: white;
height: 8vh;
}
.message-font {
font-size: 16px;
font-weight: bold;
}
.item {
margin-top: 20px;
margin-right: 40px;
}
.admin {
margin-left: auto;
}
.el-aside {
min-height: 100vh;
width: 200px;
width: 15vw;
position: fixed;
z-index: 100;
height: 90vh;
}
/* background-color: #BFD8D2; */
.logo {
margin: 20px 0px 20px 20px;
display: flex;
align-items: center;
justify-content: center;
height: 12vh;
}
.el-menu-demo {
border: none;
/* 去除边框 */
padding: 0;
/* 去除内边距 */
float: right;
/* 将菜单向右浮动 */
}
.el-menu-vertical-demo:not(.el-menu--collapse) {
width: 240px;
min-height: 400px;
border: none;
/* 去除边框 */
}
</style>
</style>

2
src/views/recharge/bean/addBeanRecharge.vue

@ -270,7 +270,7 @@ const handleAddForm = async () => {
float: left;
.customer-info {
width: 30vw;
width: 35vw;
height: 28vh;
margin-top: 5vh;
display: flex;

2
src/views/recharge/bean/beanOnlineRecharge.vue

@ -391,7 +391,7 @@ onMounted(async function () {
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div>
<el-table :data="tableData" style="width:80vw;" height="55vh" @sort-change="handleSortChange">
<el-table :data="tableData" style="width:80vw;" height="60vh" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope">
<span>{{

3
src/views/recharge/bean/beanSystemRecharge.vue

@ -373,7 +373,7 @@ onMounted(async function () {
免费金豆数{{ format3(freeBean) }}
</div>
<div>
<el-table :data="tableData" style="width: 82vw;height:55vh;" @sort-change="handleSortChange">
<el-table :data="tableData" style="width: 82vw;height:60vh;" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope">
<span>{{
@ -436,7 +436,6 @@ onMounted(async function () {
</template>
<style scoped>
.condition {
width: 82vw;
height: 6vw;
margin-bottom: 0.5vh;
display: flex;

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

@ -0,0 +1,726 @@
<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>

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

@ -11,6 +11,10 @@
@click="navigateTo('coinRefundDetail')" :disabled="!hasDetail">
金币退款明细
</el-button>
<el-button :type="activeTab === 'addNewCoinRefund' ? 'primary' : 'default'" @click="navigateTo('addNewCoinRefund')"
:disabled="!hasAdd">
金币退款
</el-button>
</el-button-group>
<!-- 渲染子路由组件 -->
</div>
@ -34,6 +38,7 @@ const { menuTree } = storeToRefs(adminStore);
const activeTab = ref('');
const hasAdd = ref(false);
const hasDetail = ref(false);
const hasNewAdd = ref(false);
//
const navigateTo = (name) => {
activeTab.value = name;
@ -47,6 +52,7 @@ const initPermissions = () => {
hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.Submit_Gold_Coin_Refund);
hasDetail.value = hasMenuPermission(menuTree.value, permissionMapping.View_Gold_Coin_Refund_Details);
hasNewAdd.value = hasMenuPermission(menuTree.value, permissionMapping.Submit_Gold_Coin_RefundS);
};
//
@ -54,13 +60,14 @@ const getDefaultAuditRoute = () => {
initPermissions();
if (hasAdd.value) return 'addCoinRefund';
if (hasDetail.value) return 'coinRefundDetail';
if(hasNewAdd.value) return 'addNewCoinRefund';
return 'addCoinRefund';
};
//
watch(() => route.name, (newName) => {
initPermissions()
if (newName === 'addCoinRefund' || newName === 'coinRefundDetail') {
if (newName === 'addCoinRefund' || newName === 'coinRefundDetail' || newName === 'addNewCoinRefund') {
activeTab.value = newName;
} else if (newName === 'coinRefund') {
// 访 /coinConsume
@ -77,7 +84,7 @@ onMounted(() => {
navigateTo(defaultRoute);
} else {
//
if (route.name === 'addCoinRefund' || route.name === 'coinRefundDetail') {
if (route.name === 'addCoinRefund' || route.name === 'coinRefundDetail' || route.name === 'addNewCoinRefund') {
activeTab.value = route.name;
}
}

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

@ -577,8 +577,8 @@ const getMarket = async function () {
任务金币{{ format3(Math.abs(taskGolds).toFixed(2)) }}
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 55vh; overflow-y: auto;">
<el-table :data="tableData" style="width: 82vw;height:55vh" @sort-change="handleSortChange">
<div style="height: 58vh; overflow-y: auto;">
<el-table :data="tableData" style="width: 82vw;" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope">
<span>{{
@ -594,12 +594,12 @@ const getMarket = async function () {
<el-table-column prop="goodsName" label="商品名称" width="110px" show-overflow-tooltip />
<el-table-column prop="refundType" label="退款类型" width="100px" />
<el-table-column prop="sumGold" label="退款金币总数" width="150px" sortable="custom" />
<el-table-column prop="refundModel" label="退款方式" width="110px">
<el-table-column prop="refundModel" label="退款方式" width="110px">
<template #default="scope">
{{ scope.row.refundModel === 0 ? '全部退款' : scope.row.refundModel === 1 ? '部分退款' : '' }}
</template>
</el-table-column>
<el-table-column prop="sumGold" label="退款金币总数" width="150px" sortable="custom" />
<el-table-column prop="permanentGold" label="永久金币" width="110px" sortable="custom" />
<el-table-column prop="freeGold" sortable="custom" label="免费金币" width="110px" />
<el-table-column prop="taskGold" sortable="custom" label="任务金币" width="110px" />

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

@ -196,8 +196,4 @@ onMounted(() => {
</script>
<style scoped>
/* .stats-card {
background-color: #EBEEF5;
padding: 5px;
} */
</style>

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

@ -449,7 +449,7 @@ const format3 = (num) => {
<span>{{ (scope.row.currentPermanentGold || 0) }}</span>
</template>
</el-table-column>
<el-table-column prop="currentFreeJune" label="6月份到期免费金币" sortable="custom" width="150">
<el-table-column prop="currentFreeJune" label="6月份到期免费金币" sortable="custom" width="170">
<template #default="scope">
<span>{{ (scope.row.currentFreeJune || 0) }}</span>
</template>

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

@ -312,7 +312,7 @@ const handleSortChange = (column) => {
} else if (column.prop === 'taskGold') {
sortField.value = 'task_gold'
} else if (column.prop === 'freeGold') {
sortField.value = 'free_gold'
sortField.value = 'freeGold'
} else if (column.prop === 'auditTime') {//creatTime
sortField.value = 'audit_time'
}

6
src/views/workspace/index.vue

@ -15,7 +15,7 @@
<div class="card-title">当前金币余量</div>
<div>
<span style="font-weight: bold">{{ currentGold / 100
}}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;较前一日
}}</span>&nbsp;&nbsp;&nbsp;&nbsp;较前一日
{{ dailyChange / 100 }}
<template v-if="dailyChange > 0">
<el-icon style="color:red">
@ -123,11 +123,11 @@
</el-tabs>
</div>
<div class="condition">
<div class="stats">合计&nbsp;&nbsp;
<div class="stats">
<div v-if="activeTab === 'consume'">合计{{ sumConsume / 100 }}</div>&nbsp;&nbsp;
永久金币: {{ activeTab === 'recharge' ? sumRechargePermanent / 100 : sumConsumePermanent / 100 }}&nbsp;&nbsp;
免费金币: {{ activeTab === 'recharge' ? sumRechargeFree / 100 : sumConsumeFree / 100 }}&nbsp;&nbsp;
任务金币: {{ activeTab === 'recharge' ? sumRechargeTask / 100 : sumConsumeTask / 100 }}&nbsp;&nbsp;
<div v-if="activeTab === 'consume'">合计 {{ sumConsume / 100 }}</div>
</div>
<div>
<el-button @click="getYes()" size="small" :type="activeTimeRange === 'yes' ? 'primary' : ''">昨天

Loading…
Cancel
Save