Browse Source

Merge branch 'milestone-20250728-金币前端三期' into zhangrenyuan/feature-20250728113353-金币前端三期

zhangrenyuan/feature-20250728113353-金币前端三期
zhangrenyuan 19 hours ago
parent
commit
df11b972f0
  1. 25
      src/main.ts
  2. 17
      src/router/index.js
  3. 14
      src/util/request.js
  4. 42
      src/views/audit/gold/rechargeAudit.vue
  5. 38
      src/views/audit/gold/refundAudit.vue
  6. 14
      src/views/consume/bean/addBeanConsume.vue
  7. 16
      src/views/consume/gold/coinConsumeDetail.vue
  8. 21
      src/views/permissions/rolePermission.vue
  9. 27
      src/views/permissions/userPermission.vue
  10. 14
      src/views/recharge/addBeanRecharge.vue
  11. 34
      src/views/recharge/gold/addCoinRecharge.vue
  12. 21
      src/views/recharge/gold/coinRechargeDetail.vue
  13. 18
      src/views/refund/gold/coinRefundDetail.vue
  14. 53
      src/views/usergold/gold/clientCountBalance.vue
  15. 19
      src/views/usergold/gold/clientCountDetail.vue

25
src/main.ts

@ -12,16 +12,24 @@ import VxeUI from 'vxe-pc-ui'
import 'vxe-pc-ui/lib/style.css'
import VxeUITable from 'vxe-table'
import 'vxe-table/lib/style.css'
const a = createApp(App)
import { useAdminStore } from '../src/store'
// 修正导入路径
import { useAdminStore } from './store'
import request from "@/util/request";
const app = createApp(App)
const pinia = createPinia()
// 全局注册 ElementPlus 图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
a.component(key, component)
app.component(key, component)
}
const pinia = createPinia()
// 使用 ElementPlus 和路由器
a.use(ElementPlus, {
// 先注册组件再挂载
app.component('downloadExcel', JsonExcel)
app.config.globalProperties.$http = request
// 使用各种插件
app.use(ElementPlus, {
locale: zhCn
})
.use(router)
@ -30,9 +38,6 @@ a.use(ElementPlus, {
.use(pinia)
.mount('#app')
// 恢复localStorage数据
// 在 app 挂载之后再使用 store
const adminStore = useAdminStore()
adminStore.initFromLocalStorage()
// 注册 JsonExcel 组件
a.component('downloadExcel', JsonExcel)

17
src/router/index.js

@ -287,23 +287,6 @@ const router = createRouter({
routes
});
// 全局拦截器:token过期处理
axios.interceptors.response.use(
response => response,
error => {
if (error.response && error.response.status === 401) {
localStorage.removeItem('token');
router.push({
name: 'login',
query: {
machineId: localStorage.getItem('machineId'),
expired: true
}
});
}
return Promise.reject(error);
}
);
// 工具函数:从菜单树提取所有权限ID
const getAllPermissionIds = (menuTree) => {

14
src/util/request.js

@ -44,13 +44,13 @@ service.interceptors.response.use(
return response
},
error => {
// const { response } = error
// if (response && response.status === 401) {
// const machineId = localStorage.getItem('machineId')
// localStorage.removeItem('token')
// window.location.href = `/login?machineId=${machineId}`
// return Promise.resolve({ needsLogin: true })
// }
const { response } = error
if (response && response.status === 401) {
const machineId = localStorage.getItem('machineId')
localStorage.removeItem('token')
window.location.href = `#/login?machineId=${machineId}`
return Promise.resolve({ needsLogin: true })
}
return Promise.reject(error)
}
)

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

@ -2,27 +2,35 @@
<el-card style="margin-bottom: 0.5vh;margin-top: 0.5vh">
<el-col style="margin-bottom: 0.5vh">
<el-text size="large">精网号</el-text>
<el-input v-model="rechargeAudit.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw" clearable />
<el-input v-model="rechargeAudit.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw"
clearable/>
<el-text size="large">活动名称</el-text>
<el-select v-model="rechargeAudit.activity" placeholder="请选择活动名称" style="width: 12vw;margin-right:1vw" clearable>
<el-select v-model="rechargeAudit.activity" placeholder="请选择活动名称" style="width: 12vw;margin-right:1vw"
clearable>
<el-option v-for="item in activity" :key="item" :label="item" :value="item"/>
</el-select>
<el-text size="large">支付方式</el-text>
<el-select v-model="rechargeAudit.payModel" placeholder="请选择支付方式" style="width: 12vw;margin-right:1vw" clearable>
<el-select v-model="rechargeAudit.payModel" placeholder="请选择支付方式" style="width: 12vw;margin-right:1vw"
clearable>
<el-option v-for="item in payModel" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-text size="large">所属地区</el-text>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable style="width:12vw"
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable
style="width:12vw"
@change="handleMarketChange"/>
</el-col>
<el-col>
<el-text size="large">充值时间</el-text>
<el-text size="large">
{{ activeName === 'wait' ? '提交时间:' : '审核时间:' }}
</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" class="time-controls" style="margin-right:1vw;width:25vw"
@change="handleDatePickerChange" />
@change="handleDatePickerChange"
:default-time="defaultTime"/>
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
<el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
<el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
@ -36,7 +44,9 @@
<el-tab-pane label="已通过" name="pass"></el-tab-pane>
<el-tab-pane label="已驳回" name="reject"></el-tab-pane>
<div>
总条数{{ format3(stats.totalNum) }}&nbsp;&nbsp;&nbsp;&nbsp;
充值新币{{ format3(stats.permanentGolds) }}新币&nbsp;&nbsp;&nbsp;&nbsp;
总金币数{{ format3(stats.permanentGolds + stats.freeGolds + stats.taskGolds) }}金币&nbsp;&nbsp;&nbsp;&nbsp;
永久金币{{ format3(stats.permanentGolds) }}金币&nbsp;&nbsp;&nbsp;&nbsp;
免费金币{{ format3(stats.freeGolds) }}金币&nbsp;&nbsp;&nbsp;&nbsp;
@ -53,6 +63,8 @@
<el-table-column fixed="left" prop="jwcode" label="精网号" width="110px"/>
<el-table-column prop="market" label="所属地区" width="100px"/>
<el-table-column prop="activity" label="活动名称" width="100px" show-overflow-tooltip/>
<el-table-column prop="rateName" label="货币名称" width="110px"/>
<el-table-column prop="money" sortable="custom" label="充值金额" width="110px"/>
<el-table-column prop="money" label="充值金额" sortable="custom" width="110px">
<template #default="scope">{{ scope.row.permanentGold / 100 }}</template>
</el-table-column>
@ -85,7 +97,12 @@
</el-table-column>
<el-table-column prop="createTime" sortable="custom" label="提交时间" width="200px">
<template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
<!-- {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}-->
{{
activeName === 'wait'
? moment(scope.row.auditTime).format('YYYY-MM-DD HH:mm:ss')
: moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss')
}}
</template>
</el-table-column>
<el-table-column v-if="activeName !== 'wait'" prop="auditTime" label="审核时间" width="200px">
@ -103,7 +120,8 @@
</el-button>
</template>
</el-popconfirm>
<el-button :disabled="scope.row.auditStatus === 1 || scope.row.auditStatus === 2" type="primary" text @click="showRejectDialog(scope.row)">
<el-button :disabled="scope.row.auditStatus === 1 || scope.row.auditStatus === 2" type="primary" text
@click="showRejectDialog(scope.row)">
驳回
</el-button>
</div>
@ -121,7 +139,8 @@
<el-dialog v-model="rejectDialogVisible" title="驳回理由" width="500px">
<el-form>
<el-form-item label="驳回理由" required>
<el-input v-model="rejectReason" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200" show-word-limit />
<el-input v-model="rejectReason" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200"
show-word-limit/>
</el-form-item>
</el-form>
<template #footer>
@ -141,11 +160,16 @@ import API from '@/util/http.js'
import moment from 'moment'
import {useAdminStore} from "@/store/index.js";
import {storeToRefs} from "pinia";
const adminStore = useAdminStore();
const {adminData, menuTree} = storeToRefs(adminStore);
import {findMenuById, permissionMapping} from "@/utils/menuTreePermission.js"
import dayjs from "dayjs";
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1, 23, 59, 59),
]
const tableData = ref([])
//
const activeTimeRange = ref('')

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

@ -5,7 +5,8 @@
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width: 12vw;margin-right:1vw" clearable/>
<el-text size="large">商品名</el-text>
<el-select v-model="searchForm.goodsName" placeholder="请输入商品名" style="width: 12vw;margin-right:1vw" clearable>
<el-select v-model="searchForm.goodsName" placeholder="请输入商品名" style="width: 12vw;margin-right:1vw"
clearable>
<el-option v-for="item in refundGoodsOptions" :key="item" :label="item" :value="item"></el-option>
</el-select>
@ -16,13 +17,18 @@
</el-select>
<el-text size="large">所属地区</el-text>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable style="width:12vw"
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable
style="width:12vw"
@change="handleMarketChange"/>
</el-col>
<el-col>
<el-text size="large">提交时间</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="开始时间" class="time-controls"
end-placeholder="结束时间" style="margin-right:1vw;width:25vw" @change="handleDatePickerChange" />
<el-text size="large">
{{ activeName === 'wait' ? '提交时间:' : '审核时间:' }}
</el-text>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="开始时间"
class="time-controls"
end-placeholder="结束时间" style="margin-right:1vw;width:25vw" @change="handleDatePickerChange"
:default-time="defaultTime"/>
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
<el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
<el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
@ -86,7 +92,13 @@
<el-table-column v-if="checkTab !== 'pending'" prop="auditName" label="审核人" width="120"/>
<el-table-column prop="createTime" label="提交时间" width="180" sortable="custom">
<template #default="{ row }">
{{ moment(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
<!-- {{ moment(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}-->
{{
checkTab === 'pending'
? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss')
: moment(row.createTime).format('YYYY-MM-DD HH:mm:ss')
}}
</template>
</el-table-column>
<el-table-column v-if="checkTab !== 'pending'" prop="auditTime" label="审核时间" width="180" sortable="custom">
@ -113,7 +125,8 @@
</el-table-column>
</el-table>
<el-pagination class="pagination" 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"
layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</el-card>
@ -142,9 +155,13 @@ import { useAdminStore } from "@/store/index.js";
import {storeToRefs} from "pinia";
import {findMenuById, permissionMapping} from "@/utils/menuTreePermission.js"
import dayjs from "dayjs";
const adminStore = useAdminStore();
const {adminData, menuTree} = storeToRefs(adminStore);
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1, 23, 59, 59),
]
//
const activeTimeRange = ref('')
const scopeValue = ref(null) //
@ -177,6 +194,7 @@ const tableData = ref([])
const marketOptions = ref([])
const refundGoodsOptions = ref([])
const adminInfo = ref({})
//
const stats = ref({
totalNum: 0,
@ -284,7 +302,7 @@ const handleApprove = async (row) => {
try {
const params = {
orderCode: row.orderCode,
auditId: adminInfo.value.id,
auditId: adminData.value.id,
action: 1,// action1,2
rejectReason: ''
}
@ -312,7 +330,7 @@ const handleReject = async () => {
try {
const params = {
orderCode: scopeValue.value.orderCode,
auditId: adminInfo.value.id,
auditId: adminData.value.id,
action: 2,
rejectReason: rejectReason.value
}

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

@ -71,9 +71,12 @@ const rules = reactive({
}, trigger: 'blur'
}],
permanentBean: [
{ required: true, message: '请输入付费金豆数', trigger: 'blur' },
{ required: true, message: '请输入付费金豆数', trigger: 'change' },
{
validator: (rule, value, callback) => {
if(!value){
value = 0
}
//
if (!/^\d+$/.test(value)) {
callback(new Error('请输入非负整数'));
@ -92,9 +95,12 @@ const rules = reactive({
}
],
freeBean: [
{ required: true, message: '请输入免费金豆数', trigger: 'blur' },
{ required: true, message: '请输入免费金豆数', trigger: 'change' },
{
validator: (rule, value, callback) => {
if(!value){
value = 0
}
//
if (!/^\d+$/.test(value)) {
callback(new Error('请输入非负整数'));
@ -211,10 +217,10 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
<el-button type="primary" @click="getUser(consumeForm.jwcode)" style="margin-left: 20px">查询</el-button>
</el-form-item>
<el-form-item prop="permanentBean" label="付费金豆" label-position="left">
<el-input v-model="consumeForm.permanentBean" placeholder="不填默认为0" style="width: 100px" />
<el-input v-model="consumeForm.permanentBean" placeholder="0" style="width: 100px" />
</el-form-item>
<el-form-item prop="freeBean" label="免费金豆" label-position="left">
<el-input v-model="consumeForm.freeBean" placeholder="不填默认为0" style="width: 100px" />
<el-input v-model="consumeForm.freeBean" placeholder="0" style="width: 100px" />
</el-form-item>
<el-form-item prop="remark" label="备注" label-position="left">
<el-input v-model="consumeForm.remark" style="width: 300px" :rows="5" maxlength="100" show-word-limit

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

@ -633,10 +633,10 @@ const getMarket = async function () {
<el-col>
<el-card>
<div>
消耗总金额{{ format3(Math.abs(permanentGolds) / 100) }}新币&nbsp;&nbsp;&nbsp;&nbsp;
永久金币{{ format3(Math.abs(permanentGolds) / 100) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金币{{ format3(Math.abs(freeGolds) / 100) }}&nbsp;&nbsp;&nbsp;&nbsp;
任务金币{{ format3(Math.abs(taskGolds) / 100) }}
消耗新币{{ format3(Math.abs(permanentGolds) ) }}新币&nbsp;&nbsp;&nbsp;&nbsp;
永久金币{{ format3(Math.abs(permanentGolds) ) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金币{{ format3(Math.abs(freeGolds) ) }}&nbsp;&nbsp;&nbsp;&nbsp;
任务金币{{ format3(Math.abs(taskGolds) ) }}
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 576px; overflow-y: auto">
@ -672,24 +672,24 @@ const getMarket = async function () {
{{
(scope.row.taskGold +
scope.row.freeGold +
scope.row.permanentGold) / 100
scope.row.permanentGold)
}}
</template>
</el-table-column>
<el-table-column prop="permanentGold" label="永久金币" sortable="“custom”" width="110px">
<template #default="scope">
{{ scope.row.permanentGold / 100 }}
{{ scope.row.permanentGold}}
</template>
</el-table-column>
<el-table-column prop="freeGold" label="免费金币" sortable="“custom”" width="110px">
<template #default="scope">
{{ scope.row.freeGold / 100 }}
{{ scope.row.freeGold }}
</template>
</el-table-column>
<el-table-column prop="taskGold" label="任务金币" sortable="“custom”" width="110px">
<template #default="scope">
{{ scope.row.taskGold / 100 }}
{{ scope.row.taskGold }}
</template>
</el-table-column>

21
src/views/permissions/rolePermission.vue

@ -189,19 +189,13 @@ const getStore = async function () {
}
//
const openPermissionAddVisible = function () {
permissionAddVisible.value = true
getRoles()
getLists()
}
const closePermissionAddVisible = function () {
addRole.value = {
roleName: '',
parentId: null,
checkedKeys: [],
grade: '',
market: ''
}
permissionAddVisible.value = false
Ref.value.resetFields();
getRoleList()
@ -211,7 +205,10 @@ const closePermissionAddVisible = function () {
const permissionAddInit = function () {
openPermissionAddVisible()
}
const handleDialogClose = function(){
closePermissionAddVisible()
console.log('hhh');
}
// ref
const Ref = ref(null)
@ -388,9 +385,7 @@ const filterGoldenBeanMenus = (tree) => {
});
};
const handleMarketChange = () => {
getLists(); //
};
const treeRef = ref(null)
//
@ -759,7 +754,7 @@ onMounted(async function () {
</el-dialog>
<!-- 新增角色 -->
<el-dialog v-model="permissionAddVisible" title="新增角色" width="800px" :close-on-click-modal="false">
<el-dialog v-model="permissionAddVisible" title="新增角色" width="800px" :close-on-click-modal="false" @close="handleDialogClose ">
<template #footer>
<el-form ref="Ref" :rules="Rolerules" :model="addRole" label-width="auto"
style="max-width: 600px; align-items: center">
@ -774,7 +769,7 @@ onMounted(async function () {
</el-select>
</el-form-item>
<el-form-item prop="market" label="所属地区:" required>
<el-select v-model="addRole.market" placeholder="请选择所属地区" style="width: 220px" clearable @change="handleMarketChange" >
<el-select v-model="addRole.market" placeholder="请选择所属地区" style="width: 220px" clearable >
<el-option v-for="item in addRoleMarket" :key="item" :label="item" :value="item"/>
</el-select>
</el-form-item>

27
src/views/permissions/userPermission.vue

@ -8,7 +8,10 @@ import API from '@/util/http'
//
const tableData = ref([])
const total = ref(100)
const handleDialogClose = function(){
closeUserAddVisible()
console.log('hhh');
}
const propsAdduser = {
multiple: true, //
}
@ -246,30 +249,10 @@ const getStore = async function () {
//
const openUserAddVisible = function () {
userAddVisible.value = true
addAdmin.value = {
account: '',
name: '',
market: '',
permission: '',
postiton: '',
machineId: '',
machineIds: [''],
remark: ''
};
}
//
const closeUserAddVisible = function () {
addAdmin.value = {
account: '',
name: '',
market: '',
permission: '',
postiton: '',
machineId: '',
machineIds: [''],
remark: ''
};
userAddVisible.value = false;
//
Ref.value.resetFields();
@ -1009,7 +992,7 @@ onMounted(async function () {
</div>
<!-- 新增用户权限 -->
<el-dialog v-model="userAddVisible" title="新增用户权限" width="800px" :close-on-click-modal="false">
<el-dialog v-model="userAddVisible" title="新增用户权限" width="800px" :close-on-click-modal="false" @close="handleDialogClose">
<template #footer>
<!-- 居中显示 -->

14
src/views/recharge/addBeanRecharge.vue

@ -70,9 +70,12 @@ const rules = reactive({
}, trigger: 'blur'
}],
permanentBean: [
{ required: true, message: '请输入付费金豆数', trigger: 'blur' },
{ required: true, message: '请输入付费金豆数', trigger: 'change' },
{
validator: (rule, value, callback) => {
if(!value){
value = 0
}
//
if (!/^\d+$/.test(value)) {
callback(new Error('请输入非负整数'));
@ -91,9 +94,12 @@ const rules = reactive({
}
],
freeBean: [
{ required: true, message: '请输入免费金豆数', trigger: 'blur' },
{ required: true, message: '请输入免费金豆数', trigger: 'change' },
{
validator: (rule, value, callback) => {
if(!value){
value = 0
}
//
if (!/^\d+$/.test(value)) {
callback(new Error('请输入非负整数'));
@ -197,10 +203,10 @@ const throttledHandleAddFormt = _.throttle(handleAddForm, 5000, {
<el-button type="primary" @click="getUser(addForm.jwcode)" style="margin-left: 20px">查询</el-button>
</el-form-item>
<el-form-item prop="permanentBean" label="付费金豆" label-position="left">
<el-input v-model="addForm.permanentBean" placeholder="不填默认为0" style="width: 100px" />
<el-input v-model="addForm.permanentBean" placeholder="0" style="width: 100px" />
</el-form-item>
<el-form-item prop="freeBean" label="免费金豆" label-position="left">
<el-input v-model="addForm.freeBean" placeholder="不填默认为0" style="width: 100px" />
<el-input v-model="addForm.freeBean" placeholder="0" style="width: 100px" />
</el-form-item>
<el-form-item prop="remark" label="备注" label-position="left">
<el-input v-model="addForm.remark" style="width: 300px" :rows="5" maxlength="100" show-word-limit

34
src/views/recharge/gold/addCoinRecharge.vue

@ -63,9 +63,9 @@ const recharge = ref({
activity: '', // activity
voucher: '',
rechargeWay: '客服充值',
freeGold: "0",
freeGold: "",
money: null,
permanentGold: "0",
permanentGold: "",
rateName: null,
rateId: null,
payModel: '', // payModel
@ -83,6 +83,7 @@ const add = async function () {
if (formattedRecharge.permanentGold) {
formattedRecharge.permanentGold = Number(formattedRecharge.permanentGold) * 100;
}
if (formattedRecharge.freeGold) {
formattedRecharge.freeGold = Number(formattedRecharge.freeGold) * 100;
}
@ -115,9 +116,9 @@ const add = async function () {
recharge.value.market = adminData.value.market
recharge.value.voucher = ''
recharge.value.rechargeWay = '客服充值'
recharge.value.freeGold = '0'
recharge.value.freeGold = ''
recharge.value.money = null
recharge.value.permanentGold = '0'
recharge.value.permanentGold = ''
recharge.value.rateId = null
imageUrl.value = ''
recharge.value.rateName = null
@ -130,9 +131,14 @@ const add = async function () {
//
const addBefore = () => {
if(!recharge.value.permanentGold){
recharge.value.permanentGold ='0'
}
if(!recharge.value.freeGold){
recharge.value.freeGold ='0'
}
Ref.value.validate(async (valid) => {
if (valid) {
if (Number(recharge.value.permanentGold) === 0 && Number(recharge.value.freeGold) === 0) {
ElMessage({
type: 'error',
@ -197,9 +203,12 @@ const rules = reactive({
}],
activity: [{ required: true, message: '请选择活动名称', trigger: 'blur' }],
permanentGold: [
{ required: true, message: '请输入永久金币数', trigger: 'blur' },
{ required: true, message: '请输入永久金币数', trigger: 'change' },
{
validator: (rule, value, callback) => {
if(!value){
value = '0'
}
//
if (/[^0-9.]/.test(value)) {
callback(new Error('不能包含特殊符号或负数'));
@ -235,9 +244,12 @@ const rules = reactive({
}
],
freeGold: [
{ required: true, message: '请输入免费金币数', trigger: 'blur' },
{ required: true, message: '请输入免费金币数', trigger: 'change' },
{
validator: (rule, value, callback) => {
if(!value){
value = '0'
}
//
if (/[^0-9.]/.test(value)) {
callback(new Error('不能包含特殊符号或负数'));
@ -520,9 +532,9 @@ const deleteRecharge = function () {
market: adminData.value.market,
voucher: '',
rechargeWay: '客服充值',
freeGold: Number(),
freeGold: '',
money: null,
permanentGold: Number(),
permanentGold: '',
rateId: null
}
imageUrl.value = ''
@ -568,13 +580,13 @@ onMounted(() => {
<el-input v-model="recharge.activity" placeholder="请输入活动名称" style="width: 300px" />
</el-form-item>
<el-form-item prop="permanentGold" label="永久金币">
<el-input v-model="recharge.permanentGold" style="width: 100px" />
<el-input v-model="recharge.permanentGold" placeholder="0" style="width: 100px" />
<p></p>
</el-form-item>
<el-form-item prop="freeGold" label="免费金币">
<el-input v-model="recharge.freeGold" style="width: 100px" />
<el-input v-model="recharge.freeGold" placeholder="0" style="width: 100px" />
<p></p>
</el-form-item>
<!-- <el-form-item label="充值金额">

21
src/views/recharge/gold/coinRechargeDetail.vue

@ -367,11 +367,11 @@ const get = async function (val) {
tableData.value = tableData.value.map(item => ({
...item,
//
permanentGold: (Number(item.permanentGold) || 0) / 100,
permanentGold: (Number(item.permanentGold) || 0) ,
//
freeGold: (Number(item.freeGold) || 0) / 100,
freeGold: (Number(item.freeGold) || 0) ,
//
money: (Number(item.money) || 0) / 100
money: (Number(item.money) || 0)
}))
console.log('tableData', tableData.value)
//
@ -433,6 +433,7 @@ const getYesterday = function () {
get()
}
// 7
const get7Days = function () {
const today = dayjs()
@ -469,8 +470,8 @@ const handleSortChange = (column) => {
sortField.value = 'money'
} else if (column.prop === 'freeGold') {
sortField.value = 'freeGold'
} else if (column.prop === 'payTime') {
sortField.value = 'payTime'
} else if (column.prop === 'auditTime') {
sortField.value = 'auditTime'
} else if (column.prop === 'createTime') {
sortField.value = 'createTime'
} else if (column.prop === 'permanentGold') {
@ -651,9 +652,9 @@ const getTagText = (state) => {
<el-col>
<el-card>
<div>
充值金额{{ format3(permanentGolds / 100) }}新币&nbsp;&nbsp;&nbsp;&nbsp;
永久金币{{ format3(permanentGolds / 100) }}金币&nbsp;&nbsp;&nbsp;&nbsp;
免费金币{{ format3(freeGolds / 100) }}金币
充值新币{{ format3(permanentGolds) }}新币&nbsp;&nbsp;&nbsp;&nbsp;
永久金币{{ format3(permanentGolds) }}金币&nbsp;&nbsp;&nbsp;&nbsp;
免费金币{{ format3(freeGolds ) }}金币
</div>
<!-- 设置表格容器的高度和滚动样式 -->
@ -678,9 +679,9 @@ const getTagText = (state) => {
<el-table-column prop="payModel" label="支付方式" width="100px" />
<el-table-column prop="remark" label="备注" width="150px" show-overflow-tooltip />
<el-table-column prop="adminName" label="提交人" width="100px" />
<el-table-column prop="payTime" sortable label="充值时间" width="200px">
<el-table-column prop="auditTime" sortable label="充值时间" width="200px">
<template #default="scope">
{{ moment(scope.row.payTime).format('YYYY-MM-DD HH:mm:ss') }}
{{ moment(scope.row.auditTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
</el-table>

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

@ -180,13 +180,13 @@ const getSelectBy = async function (val) {
//
tableData.value = result.data.list
// 100
tableData.value = tableData.value.map(item => ({
...item,
sumGold: (Number(item.sumGold) || 0) / 100,
permanentGold: (Number(item.permanentGold) || 0) / 100,
freeGold: (Number(item.freeGold) || 0) / 100,
taskGold: (Number(item.taskGold) || 0) / 100
sumGold: (Number(item.sumGold) || 0) ,
permanentGold: (Number(item.permanentGold) || 0) ,
freeGold: (Number(item.freeGold) || 0) ,
taskGold: (Number(item.taskGold) || 0)
}))
console.log('tableData', tableData.value)
//
@ -569,10 +569,10 @@ const getMarket = async function () {
<el-col>
<el-card>
<div>
退款金币总数{{ format3(Math.abs(sumGolds) / 100) }}&nbsp;&nbsp;&nbsp;&nbsp;
永久金币{{ format3(Math.abs(permanentGolds) / 100) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金币{{ format3(Math.abs(freeGolds) / 100) }}&nbsp;&nbsp;&nbsp;&nbsp;
任务金币{{ format3(Math.abs(taskGolds) / 100) }}
退款金币总数{{ format3(Math.abs(sumGolds)) }}&nbsp;&nbsp;&nbsp;&nbsp;
永久金币{{ format3(Math.abs(permanentGolds) ) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金币{{ format3(Math.abs(freeGolds) ) }}&nbsp;&nbsp;&nbsp;&nbsp;
任务金币{{ format3(Math.abs(taskGolds) ) }}
</div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 520px; overflow-y: auto;margin-top:10px">

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

@ -137,7 +137,20 @@ const get = async function (val) {
// 0
total.value = 0
// ElMessage.warning('')
} else {
}
// , result.data.list
else if(resultGoldTotal.data===0){
//
tableData.value = []
// 0
permanentGold.value = 0
freeJuneGold.value = 0
freeDecemberGold.value = 0
taskGold.value = 0
goldtotal.value = 0
freeGold.value = 0
}
else {
//
console.log('总数据请求成功', result)
//
@ -428,28 +441,28 @@ const format3 = (num) => {
((scope.row.currentPermanentGold || 0) +
(scope.row.currentFreeJune || 0) +
(scope.row.currentFreeDecember || 0) +
(scope.row.currentTaskGold || 0)) / 100
(scope.row.currentTaskGold || 0))
}}</span>
</template>
</el-table-column>
<el-table-column prop="currentPermanentGold" label="永久金币" sortable="custom" width="110">
<template #default="scope">
<span>{{ (scope.row.currentPermanentGold || 0) / 100 }}</span>
<span>{{ (scope.row.currentPermanentGold || 0) }}</span>
</template>
</el-table-column>
<el-table-column prop="currentFreeJune" label="6月份到期免费金币" sortable="custom" width="110">
<template #default="scope">
<span>{{ (scope.row.currentFreeJune || 0) / 100 }}</span>
<span>{{ (scope.row.currentFreeJune || 0) }}</span>
</template>
</el-table-column>
<el-table-column prop="currentFreeDecember" label="12月份到期免费金币" sortable="custom" width="110">
<template #default="scope">
<span>{{ (scope.row.currentFreeDecember || 0) / 100 }}</span>
<span>{{ (scope.row.currentFreeDecember || 0) }}</span>
</template>
</el-table-column>
<el-table-column prop="currentTaskGold" label="任务金币" sortable="custom" width="130">
<template #default="scope">
<span>{{ (scope.row.currentTaskGold || 0) / 100 }}</span>
<span>{{ (scope.row.currentTaskGold || 0) }}</span>
</template>
</el-table-column>
@ -458,18 +471,18 @@ const format3 = (num) => {
<el-popover trigger="hover" placement="left" width="150">
<template #default>
<div>
<div>永久金币{{ (scope.row.sumPermanentGold || 0) / 100 }}</div>
<div>免费金币{{ ((scope.row.sumFreeJune || 0) + (scope.row.sumFreeDecember || 0)) / 100 }}</div>
<div>任务金币{{ (scope.row.sumTaskGold || 0) / 100 }}</div>
<div>永久金币{{ (scope.row.sumPermanentGold || 0) }}</div>
<div>免费金币{{ ((scope.row.sumFreeJune || 0) + (scope.row.sumFreeDecember || 0)) }}</div>
<div>任务金币{{ (scope.row.sumTaskGold || 0) }}</div>
</div>
</template>
<template #reference>
<span>
{{
(scope.row.sumPermanentGold || 0) / 100 +
(scope.row.sumFreeJune || 0) / 100 +
(scope.row.sumFreeDecember || 0) / 100 +
(scope.row.sumTaskGold || 0) / 100
(scope.row.sumPermanentGold || 0) +
(scope.row.sumFreeJune || 0) +
(scope.row.sumFreeDecember || 0) +
(scope.row.sumTaskGold || 0)
}}</span>
</template>
</el-popover>
@ -480,21 +493,21 @@ const format3 = (num) => {
<el-popover trigger="hover" placement="left" width="150">
<template #default>
<div>
<div>永久金币{{ (scope.row.sumConsumeGold || 0) / 100 }}</div>
<div>永久金币{{ (scope.row.sumConsumeGold || 0) }}</div>
<div>免费金币{{
((scope.row.sumConsumeJune || 0) + (scope.row.sumConsumeDecember || 0)) / 100
((scope.row.sumConsumeJune || 0) + (scope.row.sumConsumeDecember || 0))
}}
</div>
<div>任务金币{{ (scope.row.sumConsumeJune || 0) / 100 }}</div>
<div>任务金币{{ (scope.row.sumConsumeJune || 0) }}</div>
</div>
</template>
<template #reference>
<span>
{{
(scope.row.sumConsumeGold || 0) / 100 +
(scope.row.sumConsumeTaskGold || 0) / 100 +
(scope.row.sumConsumeJune || 0) / 100 +
(scope.row.sumConsumeDecember || 0) / 100
(scope.row.sumConsumeGold || 0) +
(scope.row.sumConsumeTaskGold || 0) +
(scope.row.sumConsumeJune || 0) +
(scope.row.sumConsumeDecember || 0)
}}</span>
</template>
</el-popover>

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

@ -203,6 +203,13 @@ const get = async function (val) {
totalFreeGold.value = data.freeGolds
totalTaskGold.value = data.taskGolds
totalGoldTotal.value = data.sumGolds
} else if (totalResult.code === 0) {
//
tableData.value = []
totalPermanentGold.value = 0
totalFreeGold.value = 0
totalTaskGold.value = 0
totalGoldTotal.value = 0
} else {
ElMessage.error('获取合计数据失败')
}
@ -216,9 +223,7 @@ const get = async function (val) {
//
const reset = function () {
goldDetail.value ={
}
goldDetail.value = {}
goldDetail.value.markets = []
selectedMarketPath.value = []
delete sortField.value
@ -594,23 +599,23 @@ const format3 = (num) => {
: scope.row.sumGold / 100
}}
</span> -->
<span>{{ (scope.row.sumGold || 0) / 100 }}</span>
<span>{{ (scope.row.sumGold || 0) }}</span>
</template>
</el-table-column>
<el-table-column prop="permanentGold" sortable="custom" label="永久金币" width="110">
<template #default="scope">
<span>{{ (scope.row.permanentGold || 0) / 100 }}</span>
<span>{{ (scope.row.permanentGold || 0) }}</span>
</template>
</el-table-column>
<el-table-column prop="freeGold" sortable="custom" label="免费金币" width="110">
<template #default="scope">
<span>{{ (calculateFreeGold(scope.row) || 0) / 100 }}</span>
<span>{{ (calculateFreeGold(scope.row) || 0) }}</span>
</template>
</el-table-column>
<el-table-column prop="taskGold" sortable="custom" label="任务金币" width="110">
<template #default="scope">
<span>{{ (scope.row.taskGold || 0) / 100 }}</span>
<span>{{ (scope.row.taskGold || 0) }}</span>
</template>
</el-table-column>
<el-table-column prop="adminName" label="提交人" width="110"/>

Loading…
Cancel
Save