Browse Source

Merge remote-tracking branch 'origin/milestone-20250815-金币优化' into milestone-20250815-金币优化

youhua/chongzhi
lihui 2 months ago
parent
commit
bfc2b4087f
  1. 34
      src/views/audit/gold/rechargeAudit.vue
  2. 6
      src/views/audit/gold/refundAudit.vue
  3. 11
      src/views/consume/bean/addBeanConsume.vue
  4. 4
      src/views/consume/bean/articleVideo.vue
  5. 4
      src/views/consume/bean/dieHardFan.vue
  6. 4
      src/views/consume/bean/liveStream.vue
  7. 8
      src/views/consume/gold/addCoinConsume.vue
  8. 139
      src/views/consume/gold/coinConsumeDetail.vue
  9. 1
      src/views/permissions/rolePermission.vue
  10. 14
      src/views/permissions/userPermission.vue
  11. 7
      src/views/recharge/bean/addBeanRecharge.vue
  12. 119
      src/views/recharge/bean/beanOnlineRecharge.vue
  13. 10
      src/views/recharge/bean/beanSystemRecharge.vue
  14. 209
      src/views/recharge/gold/addCoinRecharge.vue
  15. 34
      src/views/recharge/gold/coinRechargeDetail.vue
  16. 9
      src/views/refund/gold/addCoinRefund.vue
  17. 51
      src/views/refund/gold/coinRefundDetail.vue
  18. 9
      src/views/usergold/gold/clientCountBalance.vue
  19. 53
      src/views/usergold/gold/clientCountDetail.vue
  20. 4
      src/views/workspace/index.vue

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

@ -54,7 +54,7 @@
<span>{{ scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize }}</span> <span>{{ scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" width="150px"/>
<el-table-column fixed="left" prop="name" label="姓名" width="150px" show-overflow-tooltip />
<el-table-column fixed="left" prop="jwcode" label="精网号" width="110px"/> <el-table-column fixed="left" prop="jwcode" label="精网号" width="110px"/>
<el-table-column prop="market" label="所属地区" width="100px"/> <el-table-column prop="market" label="所属地区" width="100px"/>
<el-table-column prop="activity" label="活动名称" width="100px" show-overflow-tooltip/> <el-table-column prop="activity" label="活动名称" width="100px" show-overflow-tooltip/>
@ -208,6 +208,10 @@ const getObj = ref({
}) })
// //
const payModel = [ const payModel = [
{
value: '银行转账',
label: '银行转账'
},
{ {
value: '现金', value: '现金',
label: '现金' label: '现金'
@ -221,9 +225,33 @@ const payModel = [
label: '刷卡' label: '刷卡'
}, },
{ {
value: '其他(各地区电子支付)',
label: '其他(各地区电子支付)'
value: 'Grabpay',
label: 'Grabpay'
},
{
value: 'Nets',
label: 'Nets'
},
{
value: 'PayPal',
label: 'PayPal'
},
{
value: 'Stripe-链接收款',
label: 'Stripe-链接收款'
}, },
{
value: 'Ipay88-链接收款',
label: 'Ipay88-链接收款'
},
{
value: 'PaymentAsia-链接收款',
label: 'PaymentAsia-链接收款'
},
{
value: '其他',
label: '其他'
}
] ]
// //
const stats = ref({ const stats = ref({

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

@ -51,7 +51,7 @@
<el-table :data="tableData" style="height:55vh" @sort-change="handleSortChange"> <el-table :data="tableData" style="height:55vh" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="60" /> <el-table-column type="index" label="序号" width="60" />
<el-table-column prop="name" label="姓名" width="120" />
<el-table-column prop="name" label="姓名" width="120" show-overflow-tooltip />
<el-table-column prop="jwcode" label="精网号" width="120" /> <el-table-column prop="jwcode" label="精网号" width="120" />
<el-table-column prop="market" label="所属地区" width="120" /> <el-table-column prop="market" label="所属地区" width="120" />
@ -84,12 +84,10 @@
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip /> <el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip />
<el-table-column prop="adminName" label="提交人" width="120" /> <el-table-column prop="adminName" label="提交人" width="120" />
<el-table-column v-if="checkTab === 'reject'" prop="rejectReason" label="驳回理由" width="150"
show-overflow-tooltip />
<el-table-column v-if="checkTab === 'reject'" prop="rejectReason" label="驳回理由" width="150" show-overflow-tooltip />
<el-table-column v-if="checkTab !== 'pending'" prop="auditName" label="审核人" width="120" /> <el-table-column v-if="checkTab !== 'pending'" prop="auditName" label="审核人" width="120" />
<el-table-column prop="createTime" label="提交时间" width="180" sortable="custom"> <el-table-column prop="createTime" label="提交时间" width="180" sortable="custom">
<template #default="{ row }"> <template #default="{ row }">
<!-- {{ moment(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}-->
{{ {{
checkTab === 'pending' checkTab === 'pending'
? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss') ? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss')

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

@ -230,8 +230,8 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
</el-form> </el-form>
<!-- 客户信息栏 --> <!-- 客户信息栏 -->
<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-card v-if="user.jwcode" class="customer-info">
<el-form :model="user" label-width="auto" label-position="left">
<el-text size="large" style="margin-left: 20px">客户信息</el-text> <el-text size="large" style="margin-left: 20px">客户信息</el-text>
<!-- 第一行姓名 + 当前付费金豆 --> <!-- 第一行姓名 + 当前付费金豆 -->
@ -282,8 +282,6 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
</el-row> </el-row>
</el-form> </el-form>
</el-card> </el-card>
</div> </div>
</template> </template>
<style scoped> <style scoped>
@ -294,7 +292,10 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
} }
.customer-info { .customer-info {
max-width: 60%;
width: 700px;
float: right;
margin-right: 300px;
margin-top: 50px;
} }
p { p {

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

@ -522,7 +522,7 @@ const getTagText = (state) => {
</template> </template>
</el-table-column> </el-table-column>
<!-- 固定姓名列 --> <!-- 固定姓名列 -->
<el-table-column prop="name" label="姓名" width="150px" fixed="left" />
<el-table-column prop="name" label="姓名" width="150px" fixed="left" show-overflow-tooltip />
<!-- 固定精网号列 --> <!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" /> <el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
<el-table-column prop="dept" label="地区" width="110px" /> <el-table-column prop="dept" label="地区" width="110px" />
@ -540,7 +540,7 @@ const getTagText = (state) => {
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" /> <el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
<el-table-column prop="articleId" label="文章/视频ID" width="150px" /> <el-table-column prop="articleId" label="文章/视频ID" width="150px" />
<el-table-column prop="articleName" label="文章/视频标题" width="150px" show-overflow-tooltip /> <el-table-column prop="articleName" label="文章/视频标题" width="150px" show-overflow-tooltip />
<el-table-column prop="author" label="作者" width="120px" />
<el-table-column prop="author" label="作者" width="120px" show-overflow-tooltip />
<el-table-column prop="consumeTime" label="付费时间" sortable="custom" width="180px"> <el-table-column prop="consumeTime" label="付费时间" sortable="custom" width="180px">
<template #default="scope"> <template #default="scope">
{{ formatTime(scope.row.consumeTime) }} {{ formatTime(scope.row.consumeTime) }}

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

@ -515,14 +515,14 @@ const getTagText = (state) => {
</template> </template>
</el-table-column> </el-table-column>
<!-- 固定姓名列 --> <!-- 固定姓名列 -->
<el-table-column prop="name" label="姓名" width="150px" fixed="left" />
<el-table-column prop="name" label="姓名" width="150px" fixed="left" show-overflow-tooltip />
<!-- 固定精网号列 --> <!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" /> <el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
<el-table-column prop="dept" label="地区" width="110px" /> <el-table-column prop="dept" label="地区" width="110px" />
<el-table-column prop="beanNum" label="金豆数量" sortable="custom" width="120px" /> <el-table-column prop="beanNum" label="金豆数量" sortable="custom" width="120px" />
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" /> <el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" />
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" /> <el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
<el-table-column prop="channel" label="频道" width="190px" />
<el-table-column prop="channel" label="频道" width="190px" show-overflow-tooltip />
<el-table-column prop="type" label="会员类型" width="120px"> <el-table-column prop="type" label="会员类型" width="120px">
<template #default="scope"> <template #default="scope">
{{consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型'}} {{consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型'}}

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

@ -562,7 +562,7 @@ const getTagText = (state) => {
</template> </template>
</el-table-column> </el-table-column>
<!-- 固定姓名列 --> <!-- 固定姓名列 -->
<el-table-column prop="name" label="姓名" width="150px" fixed="left" />
<el-table-column prop="name" label="姓名" width="150px" fixed="left" show-overflow-tooltip />
<!-- 固定精网号列 --> <!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" /> <el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
<el-table-column prop="dept" label="地区" width="110px" /> <el-table-column prop="dept" label="地区" width="110px" />
@ -576,7 +576,7 @@ const getTagText = (state) => {
</el-table-column> </el-table-column>
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" /> <el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" />
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" /> <el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
<el-table-column prop="liveChannel" label="频道" width="120px" />
<el-table-column prop="liveChannel" label="频道" width="120px" show-overflow-tooltip />
<el-table-column prop="liveName" label="直播间名称" width="160px" show-overflow-tooltip /> <el-table-column prop="liveName" label="直播间名称" width="160px" show-overflow-tooltip />
<el-table-column prop="consumeTime" label="消费时间" sortable="custom" width="180px" /> <el-table-column prop="consumeTime" label="消费时间" sortable="custom" width="180px" />
</el-table> </el-table>

8
src/views/consume/gold/addCoinConsume.vue

@ -763,9 +763,6 @@ p {
max-width: 50%; max-width: 50%;
float: left; float: left;
} }
</style>
<style>
/* 标题居中 */ /* 标题居中 */
.el-dialog__header { .el-dialog__header {
text-align: center; text-align: center;
@ -779,7 +776,10 @@ p {
margin-bottom: 14px; margin-bottom: 14px;
} }
.customer-info { .customer-info {
max-width: 60%;
width: 700px;
float: right;
margin-right: 200px;
margin-top: 100px;
} }

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

@ -1,10 +1,10 @@
<script setup> <script setup>
import {computed, onMounted, ref} from 'vue'
import {dayjs, ElMessage} from 'element-plus'
import { computed, onMounted, ref } from 'vue'
import { dayjs, ElMessage } from 'element-plus'
import request from '@/util/http.js' import request from '@/util/http.js'
import API from '@/util/http.js' import API from '@/util/http.js'
import moment from 'moment' import moment from 'moment'
import {reverseMarketMapping} from "@/utils/marketMap.js";
import { reverseMarketMapping } from "@/utils/marketMap.js";
// //
/* /*
@ -16,11 +16,11 @@ const trimJwCode = () => {
} }
} }
const format3 = (num) => { const format3 = (num) => {
if (!num) return '0';
const parts = Number(num).toFixed(2).split('.');
//
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return parts.join('.');
if (!num) return '0';
const parts = Number(num).toFixed(2).split('.');
//
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return parts.join('.');
} }
// //
const disabledDate = (time) => { const disabledDate = (time) => {
@ -219,7 +219,7 @@ const ConsumeSelectBy = async function (val) {
// //
// detail.value // detail.value
const detailWithoutSort = {...consumeUser.value,flag: showEmployeeData.value ? 0 : 1}
const detailWithoutSort = { ...consumeUser.value, flag: showEmployeeData.value ? 0 : 1 }
delete detailWithoutSort.sortField delete detailWithoutSort.sortField
delete detailWithoutSort.sortOrder delete detailWithoutSort.sortOrder
@ -402,22 +402,9 @@ const handleCurrentChange = function (val) {
getObj.value.pageNum = val getObj.value.pageNum = val
ConsumeSelectBy() ConsumeSelectBy()
} }
/*
====================计算属性=================================
*/
// //
const sumGold = computed(() => permanentGolds.value + freeGolds.value + taskGolds.value) const sumGold = computed(() => permanentGolds.value + freeGolds.value + taskGolds.value)
/*
====================监听=================================
*/
/*
====================挂载=================================
*/
onMounted(async function () { onMounted(async function () {
await getAdminData() await getAdminData()
await ConsumeSelectBy() await ConsumeSelectBy()
@ -442,7 +429,7 @@ const exportExcel = async function () {
} }
} }
const res = await API({url: '/export/exportConsume', data: params})
const res = await API({ url: '/export/exportConsume', data: params })
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功') ElMessage.success('导出成功')
} }
@ -463,7 +450,7 @@ const exportListLoading = ref(false)
const getExportList = async () => { const getExportList = async () => {
exportListLoading.value = true exportListLoading.value = true
try { try {
const result = await API({url: '/export/export'})
const result = await API({ url: '/export/export' })
if (result.code === 200) { if (result.code === 200) {
const filteredData = result.data.filter(item => { const filteredData = result.data.filter(item => {
return item.type === 4; //4 return item.type === 4; //4
@ -549,8 +536,8 @@ const getMarket = async function () {
return allChildren.map(child => { return allChildren.map(child => {
const grandchildren = child.children && child.children.length const grandchildren = child.children && child.children.length
? transformTree([child]) //
: null;
? transformTree([child]) //
: null;
return { return {
value: child.name, value: child.name,
@ -570,44 +557,33 @@ const getMarket = async function () {
</script> </script>
<template> <template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top:10px"> <el-card style="margin-bottom: 20px;margin-top:10px">
<el-row style="margin-bottom: 10px"> <el-row style="margin-bottom: 10px">
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">精网号</el-text> <el-text class="mx-1">精网号</el-text>
<el-input v-model="consumeUser.jwcode" placeholder="请输入精网号" style="width: 150px" clearable/>
<el-input v-model="consumeUser.jwcode" placeholder="请输入精网号" style="width: 150px" clearable />
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">商品名称</el-text> <el-text class="mx-1" size="large">商品名称</el-text>
<el-select v-model="consumeUser.goodsName" placeholder="请选择商品名称" style="width: 180px"
clearable>
<el-select v-model="consumeUser.goodsName" placeholder="请选择商品名称" style="width: 180px" clearable>
<!-- 修改 v-for 绑定逻辑 --> <!-- 修改 v-for 绑定逻辑 -->
<el-option v-for="(item, index) in goods" :key="index" :label="item" :value="item"/>
<el-option v-for="(item, index) in goods" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<el-text class="mx-1" size="large">所属地区</el-text> <el-text class="mx-1" size="large">所属地区</el-text>
<el-cascader
v-model="selectedMarketPath"
:options="market"
placeholder="请选择所属地区"
clearable
style="width:180px"
@change="handleMarketChange"
/>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable
style="width:180px" @change="handleMarketChange" />
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">消耗平台</el-text> <el-text class="mx-1" size="large">消耗平台</el-text>
<el-select v-model="consumeUser.payPlatform" placeholder="请选择消耗平台"
style="width: 180px"
clearable>
<el-option v-for="item in consumePlatform" :key="item.value" :label="item.label" :value="item.value"/>
<el-select v-model="consumeUser.payPlatform" placeholder="请选择消耗平台" style="width: 180px" clearable>
<el-option v-for="item in consumePlatform" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
@ -622,21 +598,17 @@ const getMarket = async function () {
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">消耗时间</el-text> <el-text class="mx-1" size="large">消耗时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间" <el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange"
:default-time="defaultTime" :disabled-date="disabledDate"/>
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange" :default-time="defaultTime"
:disabled-date="disabledDate" />
<el-button @click="getToday()" style="margin-left: 10px" <el-button @click="getToday()" style="margin-left: 10px"
:type="activeTimeRange === 'today' ? 'primary' : ''">
:type="activeTimeRange === 'today' ? 'primary' : ''">
</el-button> </el-button>
<el-button @click="getYesterday()" style="margin-left: 10px" <el-button @click="getYesterday()" style="margin-left: 10px"
:type="activeTimeRange === 'yesterday' ? 'primary' : ''">
:type="activeTimeRange === 'yesterday' ? 'primary' : ''">
</el-button> </el-button>
<el-button @click="get7Days()" style="margin-left: 10px" <el-button @click="get7Days()" style="margin-left: 10px"
:type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天
:type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天
</el-button> </el-button>
<!-- </div>
</el-col>
<el-col :span="3">
<div class="head-card-btn"> -->
<el-button type="success" @click="reset()">重置</el-button> <el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button> <el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出excel</el-button> <el-button type="primary" @click="exportExcel()">导出excel</el-button>
@ -645,16 +617,12 @@ const getMarket = async function () {
</el-col> </el-col>
</el-row> </el-row>
</el-card> </el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card> <el-card>
<div> <div>
消耗新币{{ 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) ) }}
消耗新币{{ 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>
<!-- 设置表格容器的高度和滚动样式 --> <!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 576px; overflow-y: auto"> <div style="height: 576px; overflow-y: auto">
@ -662,76 +630,63 @@ const getMarket = async function () {
<el-table-column type="index" label="序号" width="80px" fixed="left"> <el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- 固定姓名列 -->
<el-table-column prop="name" label="姓名" width="150px" fixed="left"/>
<!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left"/>
<el-table-column prop="market" label="所属地区" width="110px"/>
<el-table-column prop="goodsName" label="商品" width="160px" show-overflow-tooltip/>
<el-table-column prop="name" label="姓名" width="150px" fixed="left" show-overflow-tooltip />
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
<el-table-column prop="market" label="所属地区" width="110px" />
<el-table-column prop="goodsName" label="商品" width="160px" show-overflow-tooltip />
<el-table-column prop="payPlatform" label="消耗平台" width="120px"> <el-table-column prop="payPlatform" label="消耗平台" width="120px">
<template #default="scope"> <template #default="scope">
<!-- 使用非严格相等比较 -->
{{ scope.row.payPlatform }} {{ scope.row.payPlatform }}
<!-- <span scope.row.consumePlatform == 1">Homily Chart</span>-->
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column
prop="consumeType"
label="消费类型"
width="120px"
/> -->
<el-table-column prop="sumGold" label="消耗金币总数" width="120px"> <el-table-column prop="sumGold" label="消耗金币总数" width="120px">
<template #default="scope"> <template #default="scope">
{{ {{
(scope.row.taskGold + (scope.row.taskGold +
scope.row.freeGold +
scope.row.permanentGold)
scope.row.freeGold +
scope.row.permanentGold)
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="permanentGold" label="永久金币" sortable="“custom”" width="110px"> <el-table-column prop="permanentGold" label="永久金币" sortable="“custom”" width="110px">
<template #default="scope"> <template #default="scope">
{{ scope.row.permanentGold}}
{{ scope.row.permanentGold }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="freeGold" label="免费金币" sortable="“custom”" width="110px"> <el-table-column prop="freeGold" label="免费金币" sortable="“custom”" width="110px">
<template #default="scope"> <template #default="scope">
{{ scope.row.freeGold }}
{{ scope.row.freeGold }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="taskGold" label="任务金币" sortable="“custom”" width="110px"> <el-table-column prop="taskGold" label="任务金币" sortable="“custom”" width="110px">
<template #default="scope"> <template #default="scope">
{{ scope.row.taskGold }}
{{ scope.row.taskGold }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip/>
<el-table-column prop="adminName" label="提交人" width="110px"/>
<el-table-column prop="createTime" label="消耗时间" sortable="custom" width="180px"/>
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip />
<el-table-column prop="adminName" label="提交人" width="110px" />
<el-table-column prop="createTime" label="消耗时间" sortable="custom" width="180px" />
</el-table> </el-table>
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div class="pagination"> <div class="pagination">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" <el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出弹窗 --> <!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading"> <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态"> <el-table-column prop="state" label="状态">
<template #default="scope"> <template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'"> <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
@ -747,7 +702,7 @@ const getMarket = async function () {
<el-table-column label="操作"> <el-table-column label="操作">
<template #default="scope"> <template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)" <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
:disabled="scope.row.state !== 2">
下载 下载
</el-button> </el-button>
</template> </template>

1
src/views/permissions/rolePermission.vue

@ -13,7 +13,6 @@ import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js"
// ref // ref
const Ref = ref(null) const Ref = ref(null)
const roleData = ref([]) const roleData = ref([])
const total = ref(100)
const roleTotal = ref(100) const roleTotal = ref(100)
const treeRef = ref(null) const treeRef = ref(null)
const admin = ref({ const admin = ref({

14
src/views/permissions/userPermission.vue

@ -877,15 +877,10 @@ onMounted(async function () {
await getRoles() await getRoles()
await getRoleArea() await getRoleArea()
}) })
</script> </script>
<template> <template>
<div> <div>
<!--搜索菜单-->
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top:10px"> <el-card style="margin-bottom: 20px;margin-top:10px">
<div class="head-card"> <div class="head-card">
<div class="head-card-element"> <div class="head-card-element">
@ -917,11 +912,6 @@ onMounted(async function () {
</div> </div>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!--表格-->
<el-row>
<el-col>
<el-card> <el-card>
<!-- 展示表单 --> <!-- 展示表单 -->
<div class="add-item"> <div class="add-item">
@ -990,16 +980,12 @@ onMounted(async function () {
@current-change="handleCurrentChange"></el-pagination> @current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
</div> </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"> @close="handleDialogClose">
<template #footer> <template #footer>
<!-- 居中显示 -->
<el-form ref="Ref" :rules="addUserRules" :model="addAdmin" label-width="auto" <el-form ref="Ref" :rules="addUserRules" :model="addAdmin" label-width="auto"
style="max-width: 600px; align-items: center"> style="max-width: 600px; align-items: center">
<el-form-item prop="account" label="OA号:" required clearable> <el-form-item prop="account" label="OA号:" required clearable>

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

@ -211,7 +211,7 @@ const handleAddForm = async () => {
</el-form> </el-form>
<!-- 客户信息栏 --> <!-- 客户信息栏 -->
<el-card v-if="user.jwcode" style="width: 800px; float: right" class="customer-info">
<el-card v-if="user.jwcode" class="customer-info">
<el-form :model="user" label-width="auto" style="max-width: 1000px" label-position="left"> <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-text size="large" style="margin-left: 20px">客户信息</el-text>
@ -275,7 +275,10 @@ const handleAddForm = async () => {
} }
.customer-info { .customer-info {
max-width: 60%;
width: 700px;
float: right;
margin-right: 300px;
margin-top: 50px;
} }
p { p {

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

@ -1,8 +1,8 @@
<script setup> <script setup>
import {ref, onMounted, reactive, computed} from 'vue'
import { ref, onMounted, reactive, computed } from 'vue'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import {ElMessage, ElMessageBox} from 'element-plus'
import {AiFillRead} from 'vue-icons-plus/ai'
import { ElMessage, ElMessageBox } from 'element-plus'
import { AiFillRead } from 'vue-icons-plus/ai'
import axios from 'axios' import axios from 'axios'
import moment from 'moment' import moment from 'moment'
import API from '@/util/http.js' import API from '@/util/http.js'
@ -73,15 +73,15 @@ const getArea = async () => {
const getToday = () => { const getToday = () => {
const today = new Date() const today = new Date()
const startTime = new Date( const startTime = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate(),
today.getFullYear(),
today.getMonth(),
today.getDate(),
) )
const endTime = new Date( const endTime = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate(),
23, 59, 59
today.getFullYear(),
today.getMonth(),
today.getDate(),
23, 59, 59
) )
getTime.value = [startTime, endTime] getTime.value = [startTime, endTime]
activeTimeRange.value = 'today' activeTimeRange.value = 'today'
@ -92,15 +92,15 @@ const getYesterday = () => {
const yesterday = new Date() const yesterday = new Date()
yesterday.setDate(yesterday.getDate() - 1) yesterday.setDate(yesterday.getDate() - 1)
const startTime = new Date( const startTime = new Date(
yesterday.getFullYear(),
yesterday.getMonth(),
yesterday.getDate()
yesterday.getFullYear(),
yesterday.getMonth(),
yesterday.getDate()
) )
const endTime = new Date( const endTime = new Date(
yesterday.getFullYear(),
yesterday.getMonth(),
yesterday.getDate(),
23, 59, 59
yesterday.getFullYear(),
yesterday.getMonth(),
yesterday.getDate(),
23, 59, 59
) )
getTime.value = [startTime, endTime] getTime.value = [startTime, endTime]
activeTimeRange.value = 'yesterday' activeTimeRange.value = 'yesterday'
@ -111,15 +111,15 @@ const getYesterday = () => {
const get7Days = function () { const get7Days = function () {
const today = new Date() const today = new Date()
const startTime = new Date( const startTime = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() - 6
today.getFullYear(),
today.getMonth(),
today.getDate() - 6
) )
const endTime = new Date( const endTime = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate(),
23, 59, 59
today.getFullYear(),
today.getMonth(),
today.getDate(),
23, 59, 59
) )
getTime.value = [startTime, endTime] getTime.value = [startTime, endTime]
activeTimeRange.value = '7days' activeTimeRange.value = '7days'
@ -247,7 +247,7 @@ const exportExcel = async () => {
}, },
} }
try { try {
const res = await API({url: '/export/exportol', data: params})
const res = await API({ url: '/export/exportol', data: params })
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功') ElMessage.success('导出成功')
} else { } else {
@ -274,7 +274,7 @@ const exportListLoading = ref(false)
const getExportList = async () => { const getExportList = async () => {
exportListLoading.value = true exportListLoading.value = true
try { try {
const result = await API({url: '/export/export'})
const result = await API({ url: '/export/export' })
if (result.code === 200) { if (result.code === 200) {
const filteredData = result.data.filter(item => { const filteredData = result.data.filter(item => {
return item.type === 10; return item.type === 10;
@ -342,59 +342,53 @@ onMounted(async function () {
}) })
</script> </script>
<template> <template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top: 10px"> <el-card style="margin-bottom: 20px;margin-top: 10px">
<el-row style="margin-bottom: 10px"> <el-row style="margin-bottom: 10px">
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">精网号</el-text> <el-text class="mx-1" size="large">精网号</el-text>
<el-input v-model="selectData.jwcode" placeholder="请输入精网号" style="width: 150px" clearable/>
<el-input v-model="selectData.jwcode" placeholder="请输入精网号" style="width: 150px" clearable />
</div> </div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text> <el-text class="mx-1" size="large">所属地区</el-text>
<el-select v-model="selectData.market" placeholder="请选择所属地区" clearable style="width:150px"> <el-select v-model="selectData.market" placeholder="请选择所属地区" clearable style="width:150px">
<el-option v-for="item in market" :key="item" :label="item" :value="item"/>
<el-option v-for="item in market" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">订单号</el-text> <el-text class="mx-1" size="large">订单号</el-text>
<el-input v-model="selectData.orderNo" placeholder="请输入订单号" style="width: 150px"
clearable/>
<el-input v-model="selectData.orderNo" placeholder="请输入订单号" style="width: 150px" clearable />
</div> </div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">充值平台</el-text> <el-text class="mx-1" size="large">充值平台</el-text>
<el-select v-model="selectData.platform" placeholder="请选择充值平台" clearable
style="width:150px">
<el-option v-for="item in platform" :key="item.value" :label="item.label"
:value="item.value"/>
<el-select v-model="selectData.platform" placeholder="请选择充值平台" clearable style="width:150px">
<el-option v-for="item in platform" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">充值时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator=""
start-placeholder="起始时间" end-placeholder="结束时间" style="width: 350px"
@change="handleDatePickerChange" :default-time="defaultTime"/>
<el-text size="large">充值时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 350px" @change="handleDatePickerChange"
:default-time="defaultTime" />
<el-button @click="getToday()" style="margin-left: 10px" <el-button @click="getToday()" style="margin-left: 10px"
:type="activeTimeRange === 'today' ? 'primary' : ''">
:type="activeTimeRange === 'today' ? 'primary' : ''">
</el-button> </el-button>
<el-button @click="getYesterday()" style="margin-left: 10px" <el-button @click="getYesterday()" style="margin-left: 10px"
:type="activeTimeRange === 'yesterday' ? 'primary' : ''">
:type="activeTimeRange === 'yesterday' ? 'primary' : ''">
</el-button> </el-button>
<el-button @click="get7Days()" style="margin-left: 10px" <el-button @click="get7Days()" style="margin-left: 10px"
:type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天
:type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天
</el-button> </el-button>
<el-button type="success" @click="reset()">重置</el-button> <el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button> <el-button type="primary" @click="search()">查询</el-button>
@ -404,33 +398,26 @@ onMounted(async function () {
</el-col> </el-col>
</el-row> </el-row>
</el-card> </el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card> <el-card>
<div class="bean-info"> <div class="bean-info">
充值金豆数{{ format3(num) }}, 合计新币数{{ format3(money) }}
充值金豆数{{ format3(num) }}&nbsp;&nbsp;&nbsp;&nbsp;合计新币数{{ format3(money) }}
</div> </div>
<!-- 设置表格容器的高度和滚动样式 --> <!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 520px; overflow-y: auto;margin-top: 10px;"> <div style="height: 520px; overflow-y: auto;margin-top: 10px;">
<el-table :data="tableData" style="width: 100%" height="520px" @sort-change="handleSortChange"> <el-table :data="tableData" style="width: 100%" height="520px" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left"> <el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" min-width="120" show-overflow-tooltip/>
<el-table-column fixed="left" prop="jwcode" label="精网号" min-width="110px"/>
<el-table-column prop="market" label="所属地区" min-width="100px"/>
<el-table-column prop="orderNo" header-align="center" align="center" label="订单号"
min-width="210px"/>
<el-table-column prop="num" label="数量" sortable="custom" min-width="110px"/>
<el-table-column prop="money" label="金额" sortable="custom" min-width="150px"
show-overflow-tooltip/>
<el-table-column fixed="left" prop="name" label="姓名" min-width="120" show-overflow-tooltip />
<el-table-column fixed="left" prop="jwcode" label="精网号" min-width="110px" />
<el-table-column prop="market" label="所属地区" min-width="100px" />
<el-table-column prop="orderNo" header-align="center" align="center" label="订单号" min-width="210px" />
<el-table-column prop="num" label="数量" sortable="custom" min-width="110px" />
<el-table-column prop="money" label="金额" sortable="custom" min-width="150px" />
<el-table-column prop="platform" label="充值平台" min-width="150px" show-overflow-tooltip> <el-table-column prop="platform" label="充值平台" min-width="150px" show-overflow-tooltip>
<template #default=scope> <template #default=scope>
<span v-if="scope.row.platform == 1">PC</span> <span v-if="scope.row.platform == 1">PC</span>
@ -449,16 +436,14 @@ onMounted(async function () {
<!-- 分页 --> <!-- 分页 -->
<div class="pagination" style="margin-top: 20px"> <div class="pagination" style="margin-top: 20px">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" <el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handlePageSizeChange" @current-change="handleCurrentChange"></el-pagination>
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出弹窗 --> <!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%" class="custom-height-dialog"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%" class="custom-height-dialog">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading"> <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态"> <el-table-column prop="state" label="状态">
<template #default="scope"> <template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'"> <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
@ -474,7 +459,7 @@ onMounted(async function () {
<el-table-column label="操作"> <el-table-column label="操作">
<template #default="scope"> <template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)" <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
:disabled="scope.row.state !== 2">
下载 下载
</el-button> </el-button>
</template> </template>

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

@ -329,8 +329,6 @@ onMounted(async function () {
}) })
</script> </script>
<template> <template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top: 10px"> <el-card style="margin-bottom: 20px;margin-top: 10px">
<el-row style="margin-bottom: 10px"> <el-row style="margin-bottom: 10px">
<el-col :span="3"> <el-col :span="3">
@ -373,10 +371,6 @@ onMounted(async function () {
</el-row> </el-row>
</el-card> </el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card> <el-card>
<div class="bean-info"> <div class="bean-info">
<!-- 汉字用 <strong> 加粗动态数据用 <span> 包一层单独改色 --> <!-- 汉字用 <strong> 加粗动态数据用 <span> 包一层单独改色 -->
@ -394,7 +388,7 @@ onMounted(async function () {
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" min-width="100" />
<el-table-column fixed="left" prop="name" label="姓名" min-width="100" show-overflow-tooltip />
<el-table-column fixed="left" prop="jwcode" label="精网号" min-width="110px" /> <el-table-column fixed="left" prop="jwcode" label="精网号" min-width="110px" />
<el-table-column prop="market" label="所属地区" min-width="100px" /> <el-table-column prop="market" label="所属地区" min-width="100px" />
<el-table-column prop="permanentBean" label="付费金豆" sortable="custom" min-width="110px" /> <el-table-column prop="permanentBean" label="付费金豆" sortable="custom" min-width="110px" />
@ -415,8 +409,6 @@ onMounted(async function () {
@size-change="handlePageSizeChange" @current-change="handleCurrentChange"></el-pagination> @size-change="handlePageSizeChange" @current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出弹窗 --> <!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading"> <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">

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

@ -1,7 +1,7 @@
<script setup> <script setup>
import {onMounted, reactive, ref} from 'vue'
import {ElIcon, ElMessage, ElMessageBox} from 'element-plus'
import {Plus, WarnTriangleFilled} from '@element-plus/icons-vue'
import { onMounted, reactive, ref } from 'vue'
import { ElIcon, ElMessage, ElMessageBox } from 'element-plus'
import { Plus, WarnTriangleFilled } from '@element-plus/icons-vue'
import axios from 'axios' import axios from 'axios'
import API from '@/util/http.js' import API from '@/util/http.js'
import moment from 'moment' import moment from 'moment'
@ -82,7 +82,7 @@ const ReadCookiesTime = ref(null)
const add = async function () { const add = async function () {
try { try {
const formattedRecharge = {...recharge.value}
const formattedRecharge = { ...recharge.value }
// 100 // 100
if (formattedRecharge.permanentGold) { if (formattedRecharge.permanentGold) {
@ -108,7 +108,7 @@ const add = async function () {
//value //value
WriteCookiesTime.value = recharge.value.payTime WriteCookiesTime.value = recharge.value.payTime
// cookies,jwcodekeyvaluejwcode1 // cookies,jwcodekeyvaluejwcode1
Cookies.set(WriteCookies.value, WriteCookiesTime.value, {expires: 1, path: '/'});
Cookies.set(WriteCookies.value, WriteCookiesTime.value, { expires: 1, path: '/' });
// POST // POST
addDisabled.value = true addDisabled.value = true
const result = await API({ const result = await API({
@ -152,20 +152,20 @@ const RechargeDialogVisibleContinue = () => {
const RechargeDialogVisibleCancel = () => { const RechargeDialogVisibleCancel = () => {
RechargeDialogVisible.value = false RechargeDialogVisible.value = false
deleteRecharge()
user.value = {}
deleteRecharge()
user.value = {}
}; };
// //
const proceedWithRecharge = () => { const proceedWithRecharge = () => {
ElMessageBox.confirm('确认充值?') ElMessageBox.confirm('确认充值?')
.then(() => {
add();
console.log('充值成功');
})
.catch(() => {
console.log('取消充值');
});
.then(() => {
add();
console.log('充值成功');
})
.catch(() => {
console.log('取消充值');
});
}; };
// //
@ -263,9 +263,9 @@ const rules = reactive({
callback(); callback();
}, trigger: 'blur' }, trigger: 'blur'
}], }],
activity: [{required: true, message: '请选择活动名称', trigger: 'blur'}],
activity: [{ required: true, message: '请选择活动名称', trigger: 'blur' }],
permanentGold: [ permanentGold: [
{required: true, message: '请输入永久金币数', trigger: 'change'},
{ required: true, message: '请输入永久金币数', trigger: 'change' },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (!value) { if (!value) {
@ -306,7 +306,7 @@ const rules = reactive({
} }
], ],
freeGold: [ freeGold: [
{required: true, message: '请输入免费金币数', trigger: 'change'},
{ required: true, message: '请输入免费金币数', trigger: 'change' },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (!value) { if (!value) {
@ -353,7 +353,7 @@ const rules = reactive({
}], }],
money: [ money: [
{required: true, message: '请输入充值金额', trigger: 'blur'},
{ required: true, message: '请输入充值金额', trigger: 'blur' },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
// //
@ -390,8 +390,8 @@ const rules = reactive({
trigger: 'blur' trigger: 'blur'
} }
], ],
payModel: [{required: true, message: '请选择付款方式', trigger: 'blur'}],
payTime: [{required: true, message: '请选择交款时间', trigger: 'blur'}]
payModel: [{ required: true, message: '请选择付款方式', trigger: 'blur' }],
payTime: [{ required: true, message: '请选择交款时间', trigger: 'blur' }]
}); });
// //
@ -557,7 +557,7 @@ const handleAvatarSuccess = (response, file) => {
// //
const payModel = [ const payModel = [
{
{
value: '银行转账', value: '银行转账',
label: '银行转账' label: '银行转账'
}, },
@ -644,74 +644,49 @@ onMounted(() => {
<template> <template>
<div> <div>
<el-form :model="recharge" ref="Ref" :rules="rules" label-width="auto" label-position="right" <el-form :model="recharge" ref="Ref" :rules="rules" label-width="auto" label-position="right"
style="max-width: 600px" class="add-form">
style="max-width: 600px" class="add-form">
<el-form-item prop="jwcode" label="精网号"> <el-form-item prop="jwcode" label="精网号">
<el-input v-model="recharge.jwcode" style="width: 220px"/>
<el-input v-model="recharge.jwcode" style="width: 220px" />
<el-button type="primary" @click="getUser(recharge.jwcode)" style="margin-left: 20px">查询</el-button> <el-button type="primary" @click="getUser(recharge.jwcode)" style="margin-left: 20px">查询</el-button>
</el-form-item> </el-form-item>
<el-form-item prop="activity" label="活动名称"> <el-form-item prop="activity" label="活动名称">
<el-input v-model="recharge.activity" placeholder="请输入活动名称" style="width: 300px"/>
<el-input v-model="recharge.activity" placeholder="请输入活动名称" style="width: 300px" />
</el-form-item> </el-form-item>
<el-form-item prop="permanentGold" label="永久金币"> <el-form-item prop="permanentGold" label="永久金币">
<el-input v-model="recharge.permanentGold" placeholder="0" style="width: 100px"/>
<el-input v-model="recharge.permanentGold" placeholder="0" style="width: 100px" />
<p>&nbsp;</p> <p>&nbsp;</p>
</el-form-item> </el-form-item>
<el-form-item prop="freeGold" label="免费金币"> <el-form-item prop="freeGold" label="免费金币">
<el-input v-model="recharge.freeGold" placeholder="0" style="width: 100px"/>
<el-input v-model="recharge.freeGold" placeholder="0" style="width: 100px" />
<p>&nbsp;</p> <p>&nbsp;</p>
</el-form-item> </el-form-item>
<!-- <el-form-item label="充值金额">
<el-select
prop="moneys"
v-model="rateName"
placeholder="货币名称"
style="width: 95px; margin-right: 5px"
aria-required="true"
>
<el-option
v-for="item in rateName"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input prop="money" v-model="recharge.money" style="width: 200px" aria-required="true"/>
</el-form-item> -->
<el-form-item label="充值金额" required> <el-form-item label="充值金额" required>
<!-- 货币名称 -->
<el-form-item prop="rateName" style="display: inline-block; margin-left:0;"> <el-form-item prop="rateName" style="display: inline-block; margin-left:0;">
<el-select v-model="recharge.rateName" placeholder="货币名称" style="width: 100px"> <el-select v-model="recharge.rateName" placeholder="货币名称" style="width: 100px">
<el-option v-for="item in rateName" :key="item.value" :label="item.label" :value="item.value"/>
<el-option v-for="item in rateName" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 充值金额 -->
<el-form-item prop="money" style="display: inline-block; margin-left:10px;"> <el-form-item prop="money" style="display: inline-block; margin-left:10px;">
<el-input v-model="recharge.money" style="width: 190px"/>
<el-input v-model="recharge.money" style="width: 190px" />
</el-form-item> </el-form-item>
</el-form-item> </el-form-item>
<el-form-item prop="payModel" label="收款方式"> <el-form-item prop="payModel" label="收款方式">
<el-select v-model="recharge.payModel" placeholder="请选择" style="width: 300px"> <el-select v-model="recharge.payModel" placeholder="请选择" style="width: 300px">
<el-option v-for="item in payModel" :key="item.value" :label="item.label" :value="item.value"/>
<el-option v-for="item in payModel" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="payTime" label="交款时间"> <el-form-item prop="payTime" label="交款时间">
<!-- 修改 type 属性为 datetime 以支持时分秒选择 --> <!-- 修改 type 属性为 datetime 以支持时分秒选择 -->
<el-date-picker v-model="recharge.payTime" type="datetime" style="width: 300px"/>
<el-date-picker v-model="recharge.payTime" type="datetime" style="width: 300px" />
</el-form-item> </el-form-item>
<el-form-item prop="voucher" label="交款凭证" style="margin-bottom: 5px"> <el-form-item prop="voucher" label="交款凭证" style="margin-bottom: 5px">
<el-upload :http-request="customUpload" class="avatar-uploader" :show-file-list="false" <el-upload :http-request="customUpload" class="avatar-uploader" :show-file-list="false"
:before-upload="beforeAvatarUpload" style="width: 100px; height: 115px">
<img v-if="imageUrl" :src="imageUrl" class="avatar" style="width: 100px; height: 115px"/>
:before-upload="beforeAvatarUpload" style="width: 100px; height: 115px">
<img v-if="imageUrl" :src="imageUrl" class="avatar" style="width: 100px; height: 115px" />
<el-icon v-else class="avatar-uploader-icon" style="width: 100px; height: 100px"> <el-icon v-else class="avatar-uploader-icon" style="width: 100px; height: 100px">
<Plus/>
<Plus />
</el-icon> </el-icon>
</el-upload> </el-upload>
<p style="margin-left: 10px; color: rgb(177, 176, 176)"> <p style="margin-left: 10px; color: rgb(177, 176, 176)">
@ -720,15 +695,15 @@ onMounted(() => {
</el-form-item> </el-form-item>
<el-form-item prop="remark" label="备注"> <el-form-item prop="remark" label="备注">
<el-input v-model="recharge.remark" style="width: 300px" :rows="4" maxlength="100" show-word-limit <el-input v-model="recharge.remark" style="width: 300px" :rows="4" maxlength="100" show-word-limit
type="textarea"/>
type="textarea" />
</el-form-item> </el-form-item>
<el-button @click="deleteRecharge" style="margin-left: 280px" type="success">重置</el-button>
<el-button type="primary" :disabled="addDisabled" @click="addBefore"> 提交</el-button>
<el-button @click="deleteRecharge" style="margin-left: 220px;margin-top:20px" type="success">重置</el-button>
<el-button type="primary" style="margin-top:20px" :disabled="addDisabled" @click="addBefore"> 提交</el-button>
</el-form> </el-form>
<!-- 客户信息栏 --> <!-- 客户信息栏 -->
<el-card v-if="user.jwcode" style="width: 800px; float: right" class="customer-info">
<el-card v-if="user.jwcode" class="beautiful">
<el-form :model="user" label-width="auto" style="max-width: 1000px" label-position="left"> <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-text size="large" style="margin-left: 20px">客户信息</el-text>
@ -751,7 +726,7 @@ onMounted(() => {
</el-form-item> </el-form-item>
<el-form-item style="margin-top: -23px"> <el-form-item style="margin-top: -23px">
<span style="display: inline; white-space: nowrap; color: #b1b1b1" <span style="display: inline; white-space: nowrap; color: #b1b1b1"
v-if="user.historyPermanentGold !== undefined">(永久金币:{{
v-if="user.historyPermanentGold !== undefined">(永久金币:{{
user.historyPermanentGold / 100 user.historyPermanentGold / 100
}};免费金币:{{ }};免费金币:{{
(user.historyFreeGold) / 100 (user.historyFreeGold) / 100
@ -770,15 +745,15 @@ onMounted(() => {
<el-col :span="14"> <el-col :span="14">
<el-form-item label="当前金币总数" style="width: 500px"> <el-form-item label="当前金币总数" style="width: 500px">
<span style="color: #2fa1ff; margin-right: 5px" v-if="user.nowSumGold !== undefined">{{ <span style="color: #2fa1ff; margin-right: 5px" v-if="user.nowSumGold !== undefined">{{
user.nowSumGold
/ 100
}}</span>
user.nowSumGold
/ 100
}}</span>
</el-form-item> </el-form-item>
<!-- 金币详情独立显示 --> <!-- 金币详情独立显示 -->
<el-form-item style="margin-top: -23px"> <!-- 负边距减少间距 --> <el-form-item style="margin-top: -23px"> <!-- 负边距减少间距 -->
<span style="color: #b1b1b1; margin-left: 0px" v-if="user.nowPermanentGold !== undefined">(永久金币:{{ <span style="color: #b1b1b1; margin-left: 0px" v-if="user.nowPermanentGold !== undefined">(永久金币:{{
user.nowPermanentGold / 100
}};
user.nowPermanentGold / 100
}};
免费金币:{{ user.nowFreeGold / 100 }}; 免费金币:{{ user.nowFreeGold / 100 }};
任务金币:{{ user.nowTaskGold / 100 }})</span> 任务金币:{{ user.nowTaskGold / 100 }})</span>
</el-form-item> </el-form-item>
@ -817,50 +792,45 @@ onMounted(() => {
</el-form> </el-form>
</el-card> </el-card>
<el-dialog
v-model="RechargeDialogVisible"
title="操作确认"
:before-close="RechargeDialogVisiblehandleClose"
:close-on-click-modal="false"
width="480px"
>
<el-dialog v-model="RechargeDialogVisible" title="操作确认" :before-close="RechargeDialogVisiblehandleClose"
:close-on-click-modal="false" width="480px">
<!-- 内容整体居中且收窄 --> <!-- 内容整体居中且收窄 -->
<div class="confirm-body"> <div class="confirm-body">
<!-- 用户信息 --> <!-- 用户信息 -->
<div> <div>
<div class="field-label">用户信息</div> <div class="field-label">用户信息</div>
<el-input :model-value="user.jwcode + (user.name ? '' + user.name + '' : '')" disabled/>
<el-input :model-value="user.jwcode + (user.name ? '' + user.name + '' : '')" disabled />
</div> </div>
<!-- 活动名称 --> <!-- 活动名称 -->
<div class="field"> <div class="field">
<div class="field-label">活动名称</div> <div class="field-label">活动名称</div>
<el-input v-model="recharge.activity" disabled/>
<el-input v-model="recharge.activity" disabled />
</div> </div>
<!-- 金币信息同一行左右排列 --> <!-- 金币信息同一行左右排列 -->
<el-row :gutter="20" class="coins-row"> <el-row :gutter="20" class="coins-row">
<el-col :span="12"> <el-col :span="12">
<div class="field"> <div class="field">
<div class="field-label">永久金币</div> <div class="field-label">永久金币</div>
<el-input v-model="recharge.permanentGold" disabled/>
<el-input v-model="recharge.permanentGold" disabled />
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="field"> <div class="field">
<div class="field-label">免费金币</div> <div class="field-label">免费金币</div>
<el-input v-model="recharge.freeGold" disabled/>
<el-input v-model="recharge.freeGold" disabled />
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
<!-- 风险提示 --> <!-- 风险提示 -->
<div style="display: flex; align-items: center; margin-top: 20px;"> <div style="display: flex; align-items: center; margin-top: 20px;">
<el-icon :size="24" color="#FFD700"> <el-icon :size="24" color="#FFD700">
<WarnTriangleFilled/>
<WarnTriangleFilled />
</el-icon> </el-icon>
<p>重复充值风险提示</p> <p>重复充值风险提示</p>
</div> </div>
<!-- 记录 + 虚线分隔 --> <!-- 记录 + 虚线分隔 -->
<div> <div>
<el-divider border-style="dashed"/>
<el-divider border-style="dashed" />
<p>检测到该用户近期有相似充值记录</p> <p>检测到该用户近期有相似充值记录</p>
· {{ ReadCookiesTime }} 充值永久金币: {{ recharge.permanentGold }} · {{ ReadCookiesTime }} 充值永久金币: {{ recharge.permanentGold }}
免费金币: {{ recharge.freeGold }}(操作人{{ adminData.adminName }}) 免费金币: {{ recharge.freeGold }}(操作人{{ adminData.adminName }})
@ -909,78 +879,11 @@ p {
max-width: 50%; max-width: 50%;
float: left; float: left;
} }
</style>
<style>
.error-message {
color: red;
font-size: 8px;
}
.is-invalid .el-input__inner {
border-color: red;
}
.avatar-uploader .el-upload {
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 50px;
height: 50px;
text-align: center;
}
.customer-info {
max-width: 60%;
}
/* 标题居中 */
.el-dialog__header {
text-align: center;
}
.confirm-body {
width: 420px;
margin: 0 auto;
}
/* 字段块与标签样式 */
.field {
margin-top: 10px;
.beautiful {
width: 700px;
float: right;
margin-right: 300px;
margin-top: 150px;
} }
.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;
}
</style> </style>

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

@ -588,19 +588,17 @@ const getTagText = (state) => {
</script> </script>
<template> <template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top: 10px"> <el-card style="margin-bottom: 20px;margin-top: 10px">
<el-row style="margin-bottom: 10px"> <el-row style="margin-bottom: 10px">
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">精网号</el-text>
<el-text size="large">精网号</el-text>
<el-input v-model="rechargeUser.jwcode" placeholder="请输入精网号" style="width: 150px" clearable /> <el-input v-model="rechargeUser.jwcode" placeholder="请输入精网号" style="width: 150px" clearable />
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">活动名称</el-text>
<el-text size="large">活动名称</el-text>
<el-select v-model="rechargeUser.activity" placeholder="请选择活动名称" style="width: 180px" clearable> <el-select v-model="rechargeUser.activity" placeholder="请选择活动名称" style="width: 180px" clearable>
<el-option v-for="item in activity" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in activity" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
@ -608,14 +606,14 @@ const getTagText = (state) => {
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text>
<el-text size="large">所属地区</el-text>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable <el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable
style="width:180px" @change="handleMarketChange" /> style="width:180px" @change="handleMarketChange" />
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">充值方式</el-text>
<el-text size="large">充值方式</el-text>
<el-select v-model="rechargeUser.payPlatform" placeholder="请选择充值方式" style="width: 180px" clearable> <el-select v-model="rechargeUser.payPlatform" placeholder="请选择充值方式" style="width: 180px" clearable>
<el-option v-for="item in platform" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in platform" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
@ -630,7 +628,7 @@ const getTagText = (state) => {
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">充值时间</el-text>
<el-text size="large">充值时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间" <el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange" end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange"
:default-time="defaultTime" :disabled-date="disabledDate"/> :default-time="defaultTime" :disabled-date="disabledDate"/>
@ -651,10 +649,6 @@ const getTagText = (state) => {
</el-col> </el-col>
</el-row> </el-row>
</el-card> </el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card> <el-card>
<div> <div>
充值新币{{ format3(permanentGolds) }}新币&nbsp;&nbsp;&nbsp;&nbsp; 充值新币{{ format3(permanentGolds) }}新币&nbsp;&nbsp;&nbsp;&nbsp;
@ -672,7 +666,7 @@ const getTagText = (state) => {
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" width="150px" />
<el-table-column fixed="left" prop="name" label="姓名" width="150px" show-overflow-tooltip />
<el-table-column fixed="left" prop="jwcode" label="精网号" width="110px" /> <el-table-column fixed="left" prop="jwcode" label="精网号" width="110px" />
<el-table-column prop="market" label="所属地区" width="100px" /> <el-table-column prop="market" label="所属地区" width="100px" />
<el-table-column prop="activity" label="活动名称" width="110px" show-overflow-tooltip /> <el-table-column prop="activity" label="活动名称" width="110px" show-overflow-tooltip />
@ -680,7 +674,7 @@ const getTagText = (state) => {
<el-table-column prop="money" sortable="custom" label="充值金额" width="110px" /> <el-table-column prop="money" sortable="custom" label="充值金额" width="110px" />
<el-table-column prop="permanentGold" label="永久金币" sortable="custom" width="110px" /> <el-table-column prop="permanentGold" label="永久金币" sortable="custom" width="110px" />
<el-table-column prop="freeGold" label="免费金币" sortable="custom" width="110px" /> <el-table-column prop="freeGold" label="免费金币" sortable="custom" width="110px" />
<el-table-column prop="payPlatform" label="充值方式" width="100px" />
<el-table-column prop="payPlatform" label="充值方式" width="120px" />
<el-table-column prop="payModel" label="支付方式" width="100px" /> <el-table-column prop="payModel" label="支付方式" width="100px" />
<el-table-column prop="remark" label="备注" width="150px" show-overflow-tooltip /> <el-table-column prop="remark" label="备注" width="150px" show-overflow-tooltip />
<el-table-column prop="adminName" label="提交人" width="100px" /> <el-table-column prop="adminName" label="提交人" width="100px" />
@ -699,8 +693,6 @@ const getTagText = (state) => {
@current-change="handleCurrentChange"></el-pagination> @current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出弹窗 --> <!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading"> <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
@ -738,19 +730,7 @@ const getTagText = (state) => {
display: flex; display: flex;
} }
.status {
display: flex;
}
.head-card {
display: flex;
}
.head-card-element { .head-card-element {
margin-right: 20px; margin-right: 20px;
} }
.head-card-btn {
margin-left: auto;
}
</style> </style>

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

@ -506,7 +506,7 @@ onMounted(async function () {
</el-form> </el-form>
<!-- 客户信息栏 --> <!-- 客户信息栏 -->
<el-card v-if="user.jwcode" style="width: 800px; float: right" class="customer-info">
<el-card v-if="user.jwcode" class="beautiful">
<el-form :model="user" label-width="auto" style="max-width: 1000px" label-position="left"> <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-text size="large" style="margin-left: 20px">客户信息</el-text>
@ -635,4 +635,11 @@ p {
font-size: 13px; font-size: 13px;
transform: scale(1); transform: scale(1);
} }
.beautiful {
width: 700px;
float: right;
margin-right: 300px;
margin-top: 150px;
}
</style> </style>

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

@ -515,33 +515,31 @@ const getMarket = async function () {
</script> </script>
<template> <template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top:10px"> <el-card style="margin-bottom: 20px;margin-top:10px">
<el-row style="margin-bottom: 10px"> <el-row style="margin-bottom: 10px">
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">精网号</el-text>
<el-text>精网号</el-text>
<el-input v-model="refundUser.jwcode" placeholder="请输入精网号" style="width: 150px" clearable /> <el-input v-model="refundUser.jwcode" placeholder="请输入精网号" style="width: 150px" clearable />
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">商品名称</el-text>
<el-text>商品名称</el-text>
<el-select v-model="refundUser.goodsName" placeholder="请选择商品名称" style="width: 180px" clearable> <el-select v-model="refundUser.goodsName" placeholder="请选择商品名称" style="width: 180px" clearable>
<el-option v-for="item in goods" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in goods" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<el-text class="mx-1" size="large">所属地区</el-text>
<el-text size="large">所属地区</el-text>
<el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable <el-cascader v-model="selectedMarketPath" :options="market" placeholder="请选择所属地区" clearable
style="width:180px" @change="handleMarketChange" /> style="width:180px" @change="handleMarketChange" />
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">退款类型</el-text>
<el-text>退款类型</el-text>
<el-select v-model="refundUser.refundType" placeholder="请选择退款类型" style="width: 180px" clearable> <el-select v-model="refundUser.refundType" placeholder="请选择退款类型" style="width: 180px" clearable>
<!-- todo 这需要改--> <!-- todo 这需要改-->
<el-option v-for="item in refundType" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in refundType" :key="item.value" :label="item.label" :value="item.value" />
@ -557,7 +555,7 @@ const getMarket = async function () {
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">退款时间</el-text>
<el-text>退款时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间" <el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange" end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange"
:default-time="defaultTime" :disabled-date="disabledDate"/> :default-time="defaultTime" :disabled-date="disabledDate"/>
@ -579,10 +577,6 @@ const getMarket = async function () {
</el-col> </el-col>
</el-row> </el-row>
</el-card> </el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card> <el-card>
<div> <div>
退款金币总数{{ format3(Math.abs(sumGolds).toFixed(2)) }}&nbsp;&nbsp;&nbsp;&nbsp; 退款金币总数{{ format3(Math.abs(sumGolds).toFixed(2)) }}&nbsp;&nbsp;&nbsp;&nbsp;
@ -601,22 +595,12 @@ const getMarket = async function () {
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="姓名" fixed="left" width="130px" />
<el-table-column prop="name" label="姓名" fixed="left" width="130px" show-overflow-tooltip />
<el-table-column prop="jwcode" label="精网号" fixed="left" width="110px" /> <el-table-column prop="jwcode" label="精网号" fixed="left" width="110px" />
<el-table-column prop="market" label="所属地区" width="110px" /> <el-table-column prop="market" label="所属地区" width="110px" />
<el-table-column prop="goodsName" label="商品名称" width="110px" show-overflow-tooltip /> <el-table-column prop="goodsName" label="商品名称" width="110px" show-overflow-tooltip />
<el-table-column prop="refundType" label="退款类型" width="100px" /> <el-table-column prop="refundType" label="退款类型" width="100px" />
<!-- <el-table-column label="金额总数" width="110px">
<template #default="scope">
{{
scope.row.sumGold
}}
</template>
</el-table-column> -->
<el-table-column prop="sumGold" label="金额总数" width="110px" sortable="custom" /> <el-table-column prop="sumGold" label="金额总数" width="110px" sortable="custom" />
<el-table-column prop="refundModel" label="退款方式" width="110px"> <el-table-column prop="refundModel" label="退款方式" width="110px">
<template #default="scope"> <template #default="scope">
{{ scope.row.refundModel === 0 ? '全部退款' : scope.row.refundModel === 1 ? '部分退款' : '' }} {{ scope.row.refundModel === 0 ? '全部退款' : scope.row.refundModel === 1 ? '部分退款' : '' }}
@ -625,10 +609,8 @@ const getMarket = async function () {
<el-table-column prop="permanentGold" label="永久金币" width="110px" 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="freeGold" sortable="custom" label="免费金币" width="110px" />
<el-table-column prop="taskGold" sortable="custom" label="任务金币" width="110px" /> <el-table-column prop="taskGold" sortable="custom" label="任务金币" width="110px" />
<!-- 修改prop为taskGold -->
<el-table-column prop="remark" label="退款原因" width="160px" show-overflow-tooltip /> <el-table-column prop="remark" label="退款原因" width="160px" show-overflow-tooltip />
<el-table-column prop="adminName" label="提交人" width="100px" /> <el-table-column prop="adminName" label="提交人" width="100px" />
<el-table-column prop="createTime" sortable="custom" label="提交时间" width="180px"> <el-table-column prop="createTime" sortable="custom" label="提交时间" width="180px">
<template #default="scope"> <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') }}
@ -638,14 +620,12 @@ const getMarket = async function () {
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div class="pagination" style="margin-top: 20px">
<div class="pagination" style="margin-top: 20px;display: flex;">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" <el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange" @jump="checkPageNumber"></el-pagination> @current-change="handleCurrentChange" @jump="checkPageNumber"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出弹窗 --> <!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
@ -681,24 +661,7 @@ const getMarket = async function () {
</template> </template>
<style scoped> <style scoped>
.status {
display: flex;
}
.head-card {
display: flex;
}
.head-card-element { .head-card-element {
margin-right: 20px; margin-right: 20px;
} }
.head-card-btn {
margin-left: auto;
}
.pagination {
display: flex;
margin-top: 20px;
}
</style> </style>

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

@ -44,7 +44,6 @@ const freeJuneGold = ref(0) // 修改为 currentFreeJune 对应字段
const freeDecemberGold = ref(0) // currentFreeDecember const freeDecemberGold = ref(0) // currentFreeDecember
const taskGold = ref(0) // currentTaskGold const taskGold = ref(0) // currentTaskGold
const freeGold = ref(0) // const freeGold = ref(0) //
// //
const tableCountData = ref([]) const tableCountData = ref([])
const userInfo = ref({}) const userInfo = ref({})
@ -85,10 +84,8 @@ const get = async function (val) {
console.log('搜索参数', getObj.value) console.log('搜索参数', getObj.value)
// POST // POST
const requestData = {...getObj.value, user: {...user.value}};// const requestData = {...getObj.value, user: {...user.value}};//
console.log('最终请求参数', JSON.stringify(requestData, null, 2)); // console.log('最终请求参数', JSON.stringify(requestData, null, 2)); //
//console.log('', requestData); //console.log('', requestData);
// markets'''' // markets''''
if (user.value.markets.includes('9') || user.value.markets.includes('9999')) { if (user.value.markets.includes('9') || user.value.markets.includes('9999')) {
@ -138,7 +135,6 @@ const get = async function (val) {
// // // //
// const goldtotal = ref(0) // const goldtotal = ref(0)
// 0 // 0
total.value = 0 total.value = 0
// ElMessage.warning('') // ElMessage.warning('')
@ -414,7 +410,6 @@ const format3 = (num) => {
</div> </div>
<el-button type="primary" @click="search()">查询</el-button> <el-button type="primary" @click="search()">查询</el-button>
<el-button @click="reset" type="success">重置</el-button> <el-button @click="reset" type="success">重置</el-button>
<el-button type="primary" @click="exportExcel()">导出Excel</el-button> <el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button> <el-button type="primary" @click="openExportList">查看导出列表</el-button>
</div> </div>
@ -475,7 +470,6 @@ const format3 = (num) => {
<span>{{ (scope.row.currentTaskGold || 0) }}</span> <span>{{ (scope.row.currentTaskGold || 0) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column prop="rcoin" label="历史金币总额" width="150"> <!-- <el-table-column prop="rcoin" label="历史金币总额" width="150">
<template #default="scope"> <template #default="scope">
<el-popover trigger="hover" placement="left" width="150"> <el-popover trigger="hover" placement="left" width="150">
@ -522,11 +516,9 @@ const format3 = (num) => {
</template> </template>
</el-popover> </el-popover>
</template> </template>
</el-table-column>--> </el-table-column>-->
</el-table> </el-table>
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div class="pagination" style="margin-top: 20px"> <div class="pagination" style="margin-top: 20px">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" <el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
@ -537,7 +529,6 @@ const format3 = (num) => {
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading"> <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/> <el-table-column prop="fileName" label="文件名"/>

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

@ -494,9 +494,6 @@ const format3 = (num) => {
</script> </script>
<template> <template>
<div> <div>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top: 10px;"> <el-card style="margin-bottom: 20px;margin-top: 10px;">
<el-row style="margin-bottom: 10px"> <el-row style="margin-bottom: 10px">
<el-col :span="5"> <el-col :span="5">
@ -563,10 +560,6 @@ const format3 = (num) => {
<el-button type="primary" @click="openExportList">查看导出列表</el-button> <el-button type="primary" @click="openExportList">查看导出列表</el-button>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card> <el-card>
<div> <div>
金币总数{{ format3(totalGoldTotal || 0) }}&nbsp;&nbsp;&nbsp;&nbsp; 金币总数{{ format3(totalGoldTotal || 0) }}&nbsp;&nbsp;&nbsp;&nbsp;
@ -583,13 +576,10 @@ const format3 = (num) => {
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" width="150"/>
<el-table-column fixed="left" prop="name" label="姓名" width="150" show-overflow-tooltip />
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120"/> <el-table-column fixed="left" prop="jwcode" label="精网号" width="120"/>
<el-table-column prop="market" label="所属地区" width="120"/> <el-table-column prop="market" label="所属地区" width="120"/>
<el-table-column prop="payPlatform" label="平台信息" width="140">
</el-table-column>
<el-table-column prop="payPlatform" label="平台信息" width="140" />
<el-table-column prop="type" label="更新类型" width="110"> <el-table-column prop="type" label="更新类型" width="110">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.type === 0">充值</span> <span v-if="scope.row.type === 0">充值</span>
@ -601,14 +591,6 @@ const format3 = (num) => {
<el-table-column prop="sumGold" sortable="custom" label="金币数量" width="110"> <el-table-column prop="sumGold" sortable="custom" label="金币数量" width="110">
<template #default="scope"> <template #default="scope">
<!-- <span>
{{
scope.row.type === 1 //
? - scope.row.sumGold / 100
: scope.row.sumGold / 100
}}
</span> -->
<span>{{ (scope.row.sumGold || 0) }}</span> <span>{{ (scope.row.sumGold || 0) }}</span>
</template> </template>
</el-table-column> </el-table-column>
@ -640,15 +622,13 @@ const format3 = (num) => {
</div> </div>
<!-- 此处分页 --> <!-- 此处分页 -->
<div class="pagination" style="margin-top: 20px">
<div class="pagination" style="margin-top: 20px;display: flex;">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" <el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="total" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handlePageSizeChange" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination> @current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出列表弹窗 --> <!-- 导出列表弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
@ -685,35 +665,8 @@ const format3 = (num) => {
</template> </template>
<style scoped> <style scoped>
.pagination {
display: flex;
}
.status {
display: flex;
}
.head-card {
display: flex;
}
.info-panel-header {
font-weight: bold;
margin-bottom: 10px;
}
.dialog-footer { .dialog-footer {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
} }
.export-status {
margin-top: 15px;
text-align: center;
color: #666;
}
.el-progress-bar__inner {
transition: width 0.5s ease;
}
</style> </style>

4
src/views/workspace/index.vue

@ -129,8 +129,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row style="margin-top: 20px">
<el-card>
<el-card style="margin-top: 20px">
<el-row> <el-row>
<el-col> <el-col>
<el-tabs v-model="activeTab" @tab-change="handleTabChange"> <el-tabs v-model="activeTab" @tab-change="handleTabChange">
@ -196,7 +195,6 @@
</el-col> </el-col>
</el-row> </el-row>
</el-card> </el-card>
</el-row>
</template> </template>
<script setup> <script setup>

Loading…
Cancel
Save