Browse Source

拉代码

zhangrenyuan/feature-20250728113353-金币前端三期
ZhangYong 2 weeks ago
parent
commit
3ed3962eea
  1. 6
      .env.development
  2. 79
      src/views/audit/gold/rechargeAudit.vue
  3. 92
      src/views/audit/gold/refundAudit.vue
  4. 39
      src/views/consume/bean/articleVideo.vue
  5. 35
      src/views/consume/bean/dieHardFan.vue
  6. 58
      src/views/consume/bean/liveStream.vue
  7. 19
      src/views/consume/gold/coinConsumeDetail.vue
  8. 1671
      src/views/permissions/permission.vue
  9. 41
      src/views/permissions/rolePermission.vue
  10. 20
      src/views/permissions/userPermission.vue
  11. 8
      src/views/recharge/gold/coinRechargeDetail.vue
  12. 9
      src/views/refund/gold/coinRefundDetail.vue
  13. 66
      src/views/usergold/gold/clientCountBalance.vue
  14. 13
      src/views/usergold/gold/clientCountDetail.vue
  15. 12
      src/views/workspace/index.vue

6
.env.development

@ -1,6 +1,6 @@
# VITE_API_BASE='https://hwjb.homilychart.com/dev/admin'
# 测试环境
VITE_API_BASE='http://18.143.76.3:10704/'
# VITE_API_BASE='http://18.143.76.3:10704/'
# VITE_API_BASE='http://192.168.9.52:10705/'
VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload
# VITE_API_BASE='http://192.168.9.28:8081/'
@ -9,5 +9,5 @@ VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload
# VITE_API_BASE='http://192.168.5.92:8081/'
# zhangyong
# VITE_API_BASE='http://192.168.3.83:8081/'
# 李慧琳
# VITE_API_BASE='http://localhost:10704/'
# 本地
VITE_API_BASE='http://localhost:8081/'

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

@ -24,14 +24,11 @@
<el-text class="mx-1" size="large">所属地区</el-text>
<el-cascader
v-model="selectedMarketPath"
:options="markets"
:options="market"
placeholder="请选择所属地区"
clearable
collapse-tags
collapse-tags-tooltip
style="width:180px"
@change="handleMarketChange"
:props="props"
/>
</el-col>
</el-row>
@ -93,11 +90,7 @@
</el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" width="150px"/>
<el-table-column fixed="left" prop="jwcode" label="精网号" width="110px"/>
<el-table-column prop="market" label="所属地区" width="100px">
<template #default="scope">
{{ scope.row.market || "----" }}
</template>
</el-table-column>
<el-table-column prop="market" label="所属地区" width="100px"/>
<el-table-column prop="activity" label="活动名称" width="100px" show-overflow-tooltip/>
<el-table-column prop="money" label="充值金额" sortable="custom" width="110px">
<template #default="scope">{{ scope.row.permanentGold / 100 }}</template>
@ -189,7 +182,6 @@
<script setup>
import {onMounted, reactive, ref} from 'vue'
import {marketMapping, reverseMarketMapping} from '@/utils/marketMap.js'
import {ElMessage} from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
@ -230,7 +222,7 @@ const rechargeAudit = ref({
payModel: "", //
startTime: "", //
endTime: "", //
markets: [], //
market: "", //
auditStatus: "0",
})
@ -245,7 +237,7 @@ const total = ref(50)
const getTime = ref([])
const activity = ref([])
//
const markets = ref([])
const market = ref("")
//
const rejectDialogVisible = ref(false)
//
@ -385,7 +377,7 @@ const resetSearch = function () {
payModel: "",
startTime: "",
endTime: "",
markets: [],
market: "",
auditStatus: rechargeAudit.value.auditStatus,
}
@ -621,61 +613,14 @@ const previewImage = (imageUrl) => {
};
//
const selectedMarketPath = ref([])
//
const selectedMarketPath = ref("")
const handleMarketChange = (value) => {
if (Array.isArray(value) && value.length > 0) {
const ids = new Set();
value.forEach(path => {
const lastName = path[path.length - 1];
const id = reverseMarketMapping[lastName];
if (id) ids.add(Number(id));
});
//
const getAllLeafNames = (nodes) => {
const leafNames = [];
const traverse = (node, parentName = null) => {
if (!node.children || node.children.length === 0) {
leafNames.push({name: node.label, parent: parentName});
} else {
node.children.forEach(child => traverse(child, node.label));
}
};
nodes.forEach(node => traverse(node));
return leafNames;
};
const leafNameMap = getAllLeafNames(markets.value); //
//
const parentToChildren = {};
leafNameMap.forEach(({name, parent}) => {
if (!parentToChildren[parent]) parentToChildren[parent] = [];
parentToChildren[parent].push(name);
});
//
const selectedLeafNames = value.map(path => path[path.length - 1]);
// parent parent
Object.entries(parentToChildren).forEach(([parent, children]) => {
const allChildrenSelected = children.every(child => selectedLeafNames.includes(child));
if (allChildrenSelected && reverseMarketMapping[parent]) {
ids.add(Number(reverseMarketMapping[parent]));
}
});
rechargeAudit.value.markets = Array.from(ids);
if (value && value.length > 0) {
rechargeAudit.value.market = value[value.length - 1]
} else {
rechargeAudit.value.markets = [];
rechargeAudit.value.market = ''
}
console.log('最终映射后的 market IDs:', rechargeAudit.value.markets);
};
}
const props = {multiple: true}
//
@ -707,8 +652,8 @@ const getMarket = async function () {
});
};
//
markets.value = transformTree(result.data)
console.log('转换后的地区树==============', markets.value)
market.value = transformTree(result.data)
console.log('转换后的地区树==============', market.value)
} catch (error) {
console.log('请求失败', error)
}

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

@ -25,14 +25,11 @@
<el-text class="mx-1" size="large">所属地区</el-text>
<el-cascader
v-model="selectedMarketPath"
:options="markets"
:options="market"
placeholder="请选择所属地区"
clearable
collapse-tags
collapse-tags-tooltip
style="width:180px"
@change="handleMarketChange"
:props="props"
/>
</el-col>
</el-row>
@ -83,11 +80,8 @@
<el-table-column type="index" label="序号" width="60"/>
<el-table-column prop="name" label="姓名" width="120"/>
<el-table-column prop="jwcode" label="精网号" width="120"/>
<el-table-column prop="market" label="所属地区" width="120">
<template #default="scope">
{{ marketMapping[scope.row.market] || scope.row.market }}
</template>
</el-table-column>
<el-table-column prop="market" label="所属地区" width="120"/>
<el-table-column prop="refundType" label="退款类型" width="120"/>
<el-table-column prop="refundModel" label="退款方式" width="120">
<template #default="{ row }">
@ -175,7 +169,11 @@ import {onMounted, reactive, ref} from 'vue'
import {ElMessage} from 'element-plus'
import API from '@/util/http.js'
import moment from 'moment'
import {marketMapping, reverseMarketMapping} from "@/utils/marketMap.js";
import {useAdminStore} from "@/store/index.js";
import {storeToRefs} from "pinia";
import {findMenuById, permissionMapping} from "@/utils/menuTreePermission.js"
import dayjs from "dayjs";
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1,23 , 59, 59),
@ -201,7 +199,7 @@ const searchForm = ref({
jwcode: '',
refundModel: '',
goodsName: '',
markets: [],
market: "",
startTime: '',
endTime: '',
auditStatus: '0'
@ -292,7 +290,7 @@ const showRejectDialog = (row) => {
rejectDialogVisible.value = true
}
//
const markets = ref([])
const market = ref("")
//
const getRefundGoods = async () => {
@ -336,11 +334,6 @@ const get = async function (val) {
}
}
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 {menuTree} = storeToRefs(adminStore);
@ -438,7 +431,7 @@ const resetSearch = function () {
jwcode: '',
refundType: '',
goodsName: '',
markets: [],
market: "",
startTime: '',
endTime: '',
sortField: '',
@ -552,63 +545,14 @@ const adminReject = async function () {
}
//
const selectedMarketPath = ref([])
//
const selectedMarketPath = ref("")
const handleMarketChange = (value) => {
if (Array.isArray(value) && value.length > 0) {
const ids = new Set();
value.forEach(path => {
const lastName = path[path.length - 1];
const id = reverseMarketMapping[lastName];
if (id) ids.add(Number(id));
});
//
const getAllLeafNames = (nodes) => {
const leafNames = [];
const traverse = (node, parentName = null) => {
if (!node.children || node.children.length === 0) {
leafNames.push({name: node.label, parent: parentName});
} else {
node.children.forEach(child => traverse(child, node.label));
}
};
nodes.forEach(node => traverse(node));
return leafNames;
};
const leafNameMap = getAllLeafNames(markets.value); //
//
const parentToChildren = {};
leafNameMap.forEach(({name, parent}) => {
if (!parentToChildren[parent]) parentToChildren[parent] = [];
parentToChildren[parent].push(name);
});
//
const selectedLeafNames = value.map(path => path[path.length - 1]);
// parent parent
Object.entries(parentToChildren).forEach(([parent, children]) => {
const allChildrenSelected = children.every(child => selectedLeafNames.includes(child));
if (allChildrenSelected && reverseMarketMapping[parent]) {
ids.add(Number(reverseMarketMapping[parent]));
}
});
searchForm.value.markets = Array.from(ids);
if (value && value.length > 0) {
searchForm.value.market = value[value.length - 1]
} else {
searchForm.value.markets = [];
searchForm.value.market = ''
}
console.log('最终映射后的 market IDs:', searchForm.value.markets);
};
const props = {multiple: true}
}
//
const getMarket = async function () {
try {
@ -638,8 +582,8 @@ const getMarket = async function () {
});
};
//
markets.value = transformTree(result.data)
console.log('转换后的地区树==============', markets.value)
market.value = transformTree(result.data)
console.log('转换后的地区树==============', market.value)
} catch (error) {
console.log('请求失败', error)
}

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

@ -100,13 +100,13 @@ const getDept = async function () {
}
}
//
const filterChannel = (query) => {
if (query) {
return channels.value.filter(item => item.toLowerCase().includes(query.toLowerCase()));
}
return channels.value;
};
// //
// const filterChannel = (query) => {
// if (query) {
// return channels.value.filter(item => item.toLowerCase().includes(query.toLowerCase()));
// }
// return channels.value;
// };
//
const sortField = ref('')
@ -355,23 +355,14 @@ onMounted(async function () {
const exportExcel = async function () {
const params = { //
beanConsumeArticle: {
...beanConsumeArticle.value,
jwcode: beanConsumeArticle.value.jwcode ? String(beanConsumeArticle.value.jwcode) : '',
dept: beanConsumeArticle.value.dept || '',
type: beanConsumeArticle.value.type || '',
articleId: beanConsumeArticle.value.articleId || '',
articleName: beanConsumeArticle.value.articleName || '',
author: beanConsumeArticle.value.author || '',
beanNum: beanConsumeArticle.value.beanNum || '',
buyBean: beanConsumeArticle.value.buyBean || '',
freeBean: beanConsumeArticle.value.freeBean || '',
consumeTime: beanConsumeArticle.value.consumeTime || '',
sortField: sortField.value || 'consumeTime',
sortOrder: sortOrder.value || 'desc'
}
...getObj.value,
"beanConsumeArticle": {
...beanConsumeArticle.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
},
}
const res = await API({ url: '/export/exportConsume', data: params })
const res = await API({ url: '/export/exportArticle', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
}
@ -395,7 +386,7 @@ const getExportList = async () => {
const result = await API({ url: '/export/export' })
if (result.code === 200) {
const filteredData = result.data.filter(item => {
// return item.type === 4; //4 // todo type
return item.type === 8; //4 // todo type 8/
});
exportList.value = filteredData
} else {

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

@ -54,13 +54,13 @@ const getChannel = async function () {
})
}
}
//
const filterChannel = (query) => {
if (query) {
return channels.value.filter(item => item.toLowerCase().includes(query.toLowerCase()));
}
return channels.value;
};
// //
// const filterChannel = (query) => {
// if (query) {
// return channels.value.filter(item => item.toLowerCase().includes(query.toLowerCase()));
// }
// return channels.value;
// };
//
const consumeTypes = ref([
@ -363,18 +363,14 @@ onMounted(async function () {
const exportExcel = async function () {
const params = { //
beanConsumeFan: {
... beanConsumeFan.value,
jwcode: beanConsumeFan.value.jwcode ? String(beanConsumeFan.value.jwcode) : '',
dept: beanConsumeFan.value.dept || '',
channel: beanConsumeFan.value.channel || '',
startTime: beanConsumeFan.value.startTime || '',
endTime: beanConsumeFan.value.endTime || '',
sortField: beanConsumeFan.value.sortField || 'consumeTime',
sortOrder: beanConsumeFan.value.sortOrder || 'desc'
}
...getObj.value,
"beanConsumeFan": {
...beanConsumeFan.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
},
}
const res = await API({ url: '/export/exportConsume', data: params })
const res = await API({ url: '/export/exportFan', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
}
@ -398,7 +394,7 @@ const getExportList = async () => {
const result = await API({ url: '/export/export' })
if (result.code === 200) {
const filteredData = result.data.filter(item => {
return item.type === 4; //4 // todo type
return item.type === 7; //4 // todo type 7
});
exportList.value = filteredData
} else {
@ -484,7 +480,6 @@ const getTagText = (state) => {
filterable
allow-create
default-first-option
:filter-method="filterChannel"
>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
</el-select>

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

@ -372,25 +372,38 @@ onMounted(async function () {
const exportExcel = async function () {
console.log('1')
const params = {
beanConsumeLive: {
...beanConsumeLive.value,
jwcode: beanConsumeLive.value.jwcode ? String(beanConsumeLive.value.jwcode) : '',
dept: beanConsumeLive.value.dept || '',
type: beanConsumeLive.value.type || '',
gift: beanConsumeLive.value.gift || '',
beanNum: beanConsumeLive.value.beanNum || '',
liveChannel: beanConsumeLive.value.liveChannel || '',
liveName: beanConsumeLive.value.liveName || '',
startTime: beanConsumeLive.value.startTime || '',
endTime: beanConsumeLive.value.endTime || '',
sortField: sortField.value || 'consumeTime',
sortOrder: sortOrder.value || 'desc'
...getObj.value,
"beanConsumeLive": {
...beanConsumeLive.value,
jwcode: beanConsumeLive.value.jwcode ? String(beanConsumeLive.value.jwcode) : '',
dept: beanConsumeLive.value.dept || '',
type: beanConsumeLive.value.type || '',
gift: beanConsumeLive.value.gift || '',
liveChannel: beanConsumeLive.value.liveChannel || '',
liveName: beanConsumeLive.value.liveName || '',
startTime: beanConsumeLive.value.startTime || '',
endTime: beanConsumeLive.value.endTime || '',
sortField: sortField.value || 'consumeTime',
sortOrder: sortOrder.value || 'desc'
}
}
}
const res = await API({ url: '/export/exportConsume', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
// 便
console.log('导出请求参数:', params);
try {
console.log('2')
const res = await API({ url: '/export/exportLive', data: params });
console.log('导出请求响应:', res);
if (res.code === 200) {
ElMessage.success('导出成功');
} else {
ElMessage.error(res.message || '导出失败,请稍后重试');
}
} catch (error) {
console.error('导出请求出错:', error);
ElMessage.error('导出失败,请稍后重试');
}
}
const exportListVisible = ref(false)
@ -405,6 +418,7 @@ const openExportList = () => {
const exportList = ref([])
//
const exportListLoading = ref(false)
//
const getExportList = async () => {
exportListLoading.value = true
@ -412,7 +426,7 @@ const getExportList = async () => {
const result = await API({ url: '/export/export' })
if (result.code === 200) {
const filteredData = result.data.filter(item => {
return item.type === 4; //4 // todo type
return item.type === 6; //4 // todo type 6
});
exportList.value = filteredData
} else {
@ -564,13 +578,13 @@ const getTagText = (state) => {
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 576px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="576px" @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">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template>
</el-table-column>
</el-table-column> -->
<!-- 固定姓名列 -->
<el-table-column prop="name" label="姓名" width="150px" fixed="left" />
<!-- 固定精网号列 -->
@ -608,9 +622,9 @@ const getTagText = (state) => {
</el-tag>
</template>
</el-table-column>
<el-table-column prop="consumeTime" label="创建时间">
<el-table-column prop="createTime" label="创建时间">
<template #default="scope">
{{ moment(scope.row.consumeTime).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 label="操作">

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

@ -4,7 +4,7 @@ import {dayjs, ElMessage} from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
import moment from 'moment'
import {marketMapping, reverseMarketMapping} from "@/utils/marketMap.js";
import {reverseMarketMapping} from "@/utils/marketMap.js";
//
/*
@ -15,7 +15,7 @@ import {marketMapping, reverseMarketMapping} from "@/utils/marketMap.js";
const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : ''
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1,23 , 59, 59),
new Date(2000, 2, 1, 23, 59, 59),
]
/*
====================数据=================================
@ -115,7 +115,7 @@ const goods = ref([])
const totalGoldSearch = ref({
jwcode: null,
payPlatform: "",
market:"" ,
market: "",
startTime: "",
endTime: "",
goodsName: ""
@ -292,7 +292,7 @@ const reset = function () {
const getToday = function () {
const today = dayjs()
const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss')
const endTime =today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
getTime.value = [startTime, endTime]
console.log('getTime', getTime.value)
activeTimeRange.value = 'today' //
@ -579,7 +579,8 @@ const getMarket = async function () {
<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: 400px" @change="handleDatePickerChange" :default-time="defaultTime"/>
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange"
:default-time="defaultTime"/>
<el-button @click="getToday()" style="margin-left: 10px"
:type="activeTimeRange === 'today' ? 'primary' : ''">
</el-button>
@ -625,11 +626,7 @@ const getMarket = async function () {
<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">
<template #default="scope">
{{ marketMapping[scope.row.market] || scope.row.market }}
</template>
</el-table-column>
<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">
<template #default="scope">
@ -689,7 +686,7 @@ const getMarket = async function () {
<!-- 导出弹窗 -->
<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="state" label="状态">
<template #default="scope">

1671
src/views/permissions/permission.vue
File diff suppressed because it is too large
View File

41
src/views/permissions/rolePermission.vue

@ -317,10 +317,20 @@ const getLists = async function () {
data: {id: roleId}
})
data.value = res.data
data.value = data.value.filter(item => item.id !== 9);
let originalData = res.data.filter(item => item.id !== 9); //
// data.value = data.value.filter(item => item.id !== 9);
console.log('看看data', data.value)
console.log('parentID:', addRole.value.parentId, 'roleId:', roleId)
//
if (addRole.value.market !== '总部') {
//
originalData = filterGoldenBeanMenus(originalData);
}
data.value = originalData; //
if (addRole.value.parentId && addRole.value.parentId !== 2) {
const result = await API({
url: '/general/roleMarket',
@ -353,6 +363,33 @@ const getLists = async function () {
console.log('请求失败', error)
}
}
//
const goldenBeanMenuIds = new Set([
43, 55, 54, // ->
41, 47, 46, 48, // ->
42, 50, 49, 52, 51, // ->
45, 53 // ->
]);
const filterGoldenBeanMenus = (tree) => {
return tree
.filter(item => {
//
if (goldenBeanMenuIds.has(item.id)) {
return false;
}
//
if (item.children && item.children.length > 0) {
item.children = filterGoldenBeanMenus(item.children);
}
return true;
});
};
const handleMarketChange = () => {
getLists(); //
};
const treeRef = ref(null)
//
const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => {
@ -734,7 +771,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: 240px" clearable>
<el-select v-model="addRole.market" placeholder="请选择所属地区" style="width: 240px" clearable @change="handleMarketChange" >
<el-option v-for="item in addRoleMarket" :key="item" :label="item" :value="item"/>
</el-select>
</el-form-item>

20
src/views/permissions/userPermission.vue

@ -697,11 +697,12 @@ const handleMarketChangeEditUser = (value) => {
}
};
//
const addUserProps ={
multiple: true,
}
/*// 计算属性控制级联选择器的选项禁用状态
const addUserProps = computed(() => {
// addAdmin.market
//
const hasHeadquarters = addAdmin.value.market.includes('总部');
return {
@ -712,11 +713,14 @@ const addUserProps = computed(() => {
}
};
});
});*/
//
const editUserProps = {
multiple: true,
}
/*// 计算属性控制级联选择器的选项禁用状态
const editUserProps = computed(() => {
// addAdmin.market
//
const hasHeadquarters = permissionEditObj.value.market.includes('总部');
return {
@ -727,7 +731,7 @@ const editUserProps = computed(() => {
}
};
});
});*/
const selectParentNodes = (treeData, nodeId, checkedKeys) => {
if (!Array.isArray(treeData)) return false;

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

@ -3,7 +3,7 @@ import {onMounted, ref} from 'vue'
import {ElMessage} from 'element-plus'
import moment from 'moment'
import API from '@/util/http.js'
import {marketMapping, reverseMarketMapping} from '@/utils/marketMap.js';
import {reverseMarketMapping} from '@/utils/marketMap.js';
import dayjs from "dayjs";
//
const adminData = ref({})
@ -648,11 +648,7 @@ const getTagText = (state) => {
</el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" width="150px"/>
<el-table-column fixed="left" prop="jwcode" label="精网号" width="110px"/>
<el-table-column prop="market" label="所属地区" width="100px">
<template #default="scope">
<span>{{ marketMapping[scope.row.market] || scope.row.market }}</span>
</template>
</el-table-column>
<el-table-column prop="market" label="所属地区" width="100px"/>
<el-table-column prop="activity" label="活动名称" width="110px" show-overflow-tooltip/>
<el-table-column prop="rateName" label="货币名称" width="110px"/>
<el-table-column prop="money" sortable="custom" label="充值金额" width="110px"/>

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

@ -5,7 +5,8 @@ import {ElMessage} from 'element-plus'
import moment from 'moment'
import API from '@/util/http.js'
import request from '@/util/http.js'
import {marketMapping, reverseMarketMapping} from "@/utils/marketMap.js";
import {reverseMarketMapping} from "@/utils/marketMap.js";
const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1,23 , 59, 59),
@ -647,11 +648,7 @@ const getMarket = async function () {
fixed="left"
width="110px"
/>
<el-table-column prop="market" label="所属地区" width="110px">
<template #default="scope">
{{ marketMapping[scope.row.market] || scope.row.market }}
</template>
</el-table-column>
<el-table-column prop="market" label="所属地区" width="110px"/>
<el-table-column prop="goodsName" label="商品名称" width="110px" show-overflow-tooltip/>
<el-table-column prop="refundType" label="退款类型" width="100px"/>

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

@ -1,13 +1,10 @@
<script setup>
//
import { ref, onMounted, reactive, computed, watch } from 'vue'
import ElementPlus from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import {onMounted, ref} from 'vue'
import {ElMessage} from 'element-plus'
import moment from 'moment'
import { ta } from 'element-plus/es/locales.mjs'
import API from '@/util/http.js'
import { marketMapping, reverseMarketMapping } from "@/utils/marketMap.js";
import {reverseMarketMapping} from "@/utils/marketMap.js";
//
//
@ -15,7 +12,7 @@ const adminData = ref({})
const dialogVisible = ref(false)
const getAdminData = async function () {
try {
const result = await API({ url: '/admin/userinfo', data: {} })
const result = await API({url: '/admin/userinfo', data: {}})
adminData.value = result
// console.log('', result)
console.log('管理员用户信息', adminData.value)
@ -85,7 +82,7 @@ const get = async function (val) {
// POST
const requestData = { ...getObj.value, user: { ...user.value } };//
const requestData = {...getObj.value, user: {...user.value}};//
console.log('最终请求参数', JSON.stringify(requestData, null, 2)); //
//console.log('', requestData);
@ -93,7 +90,7 @@ const get = async function (val) {
const result = await API({
url: '/goldDetail/getGold',
method: 'post',
data: { ...getObj.value, user: { ...user.value } }
data: {...getObj.value, user: {...user.value}}
})
console.log('响应数据', result)
tableData.value = result.data.list
@ -167,7 +164,7 @@ const search = function () {
}
//
const reset = function () {
user.value = { market: "" }
user.value = {market: ""}
sortField.value = ''
sortOrder.value = ''
get()
@ -220,7 +217,7 @@ const exportExcel = async function () {
market: user.value.market || ""
}
}
const res = await API({ url: '/goldDetail/exportGold', data: params })
const res = await API({url: '/goldDetail/exportGold', data: params})
if (res.code === 200) {
ElMessage.success('导出成功')
}
@ -242,7 +239,7 @@ const exportListLoading = ref(false)
const getExportList = async () => {
exportListLoading.value = true
try {
const result = await API({ url: '/export/export' })
const result = await API({url: '/export/export'})
if (result.code === 200) {
const filteredData = result.data.filter(item => {
return item.type === 1; //type0
@ -327,8 +324,8 @@ const getMarket = async function () {
return allChildren.map(child => {
const grandchildren = child.children && child.children.length
? transformTree([child]) //
: null;
? transformTree([child]) //
: null;
return {
value: child.name,
@ -354,7 +351,7 @@ const getMarket = async function () {
<div class="head-card">
<div class="head-card-element">
<el-text class="mx-1" size="large">精网号</el-text>
<el-input v-model="user.jwcode" style="width: 160px" placeholder="请输入精网号" clearable />
<el-input v-model="user.jwcode" style="width: 160px" placeholder="请输入精网号" clearable/>
</div>
<div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text>
@ -389,29 +386,25 @@ const getMarket = async function () {
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 626px; overflow-y: auto">
<el-table :data="tableData" @cellClick="cellClick" style="width: 100%" height="626px"
@sort-change="handleSortChange">
@sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="姓名" width="120" />
<el-table-column prop="jwcode" label="精网号" width="120" />
<el-table-column prop="market" label="所属地区" width="120">
<template #default="scope">
{{ marketMapping[scope.row.market] || scope.row.market }}
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="姓名" width="120"/>
<el-table-column prop="jwcode" label="精网号" width="120"/>
<el-table-column prop="market" label="所属地区" width="120"/>
<el-table-column prop="allJb" label="金币总数" width="120" aligh="center">
<template #default="scope">
<span>{{
((scope.row.currentPermanentGold || 0) +
(scope.row.currentFreeJune || 0) +
(scope.row.currentFreeDecember || 0) +
(scope.row.currentTaskGold || 0)) / 100
}}</span>
((scope.row.currentPermanentGold || 0) +
(scope.row.currentFreeJune || 0) +
(scope.row.currentFreeDecember || 0) +
(scope.row.currentTaskGold || 0)) / 100
}}</span>
</template>
</el-table-column>
<el-table-column prop="currentPermanentGold" label="永久金币" sortable="custom" width="110">
@ -464,8 +457,8 @@ const getMarket = async function () {
<div>
<div>永久金币{{ (scope.row.sumConsumeGold || 0) / 100 }}</div>
<div>免费金币{{
((scope.row.sumConsumeJune || 0) + (scope.row.sumConsumeDecember || 0)) / 100
}}
((scope.row.sumConsumeJune || 0) + (scope.row.sumConsumeDecember || 0)) / 100
}}
</div>
<div>任务金币{{ (scope.row.sumConsumeJune || 0) / 100 }}</div>
</div>
@ -489,8 +482,9 @@ const getMarket = async function () {
<!-- 分页 -->
<div class="pagination" style="margin-top: 20px">
<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>
</el-card>
</el-col>
@ -498,7 +492,7 @@ const getMarket = async function () {
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<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="状态">
<template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
@ -514,7 +508,7 @@ const getMarket = async function () {
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
:disabled="scope.row.state !== 2">
下载
</el-button>
</template>

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

@ -1,13 +1,10 @@
<script setup>
import {ref, onMounted, computed, nextTick, watch} from 'vue'
import {onMounted, ref} from 'vue'
import {ElMessage} from 'element-plus'
import axios from 'axios'
import moment from 'moment'
import API from '@/util/http.js'
import {writeFile, utils} from 'xlsx'
import request from "@/util/request.js";
import {marketMapping, reverseMarketMapping} from "../../../utils/marketMap.js";
import {reverseMarketMapping} from "../../../utils/marketMap.js";
import dayjs from "dayjs";
//
@ -552,11 +549,7 @@ const getMarket = async function () {
</el-table-column>
<el-table-column fixed="left" prop="name" label="姓名" width="150"/>
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120"/>
<el-table-column prop="market" label="所属地区" width="120">
<template #default="scope">
{{ marketMapping[scope.row.market] || scope.row.market }}
</template>
</el-table-column>
<el-table-column prop="market" label="所属地区" width="120"/>
<el-table-column prop="payPlatform" label="平台信息" width="140">
</el-table-column>

12
src/views/workspace/index.vue

@ -48,7 +48,7 @@
<div>
<div class="margin-bottom">永久金币{{ currentPermanent / 100 }}</div>
<div class="margin-bottom">免费金币{{ currentFree / 100 }}</div>
<div class="margin-bottom">[六月到期|{{ currentFreeJune / 100 }}]&nbsp;&nbsp;&nbsp;&nbsp;[12月到期|{{
<div class="margin-bottom">[六月到期|{{ currentFreeJune / 100 }}]&nbsp;&nbsp;&nbsp;&nbsp;[十二月到期|{{
currentFreeDecember /
100
}}]
@ -148,16 +148,16 @@
</el-col>
<el-col :span="24">
<el-row>
<div style="margin-top:5px">合计&nbsp;&nbsp;&nbsp;&nbsp;
<div style="margin-top:5px">合计&nbsp;
永久金币 {{
activeTab === 'recharge' ? sumRechargePermanent / 100 : sumConsumePermanent / 100
}}&nbsp;&nbsp;&nbsp;&nbsp;
}}
免费金币 {{
activeTab === 'recharge' ? sumRechargeFree / 100 : sumConsumeFree / 100
}}&nbsp;&nbsp;&nbsp;&nbsp;
}}
任务金币 {{
activeTab === 'recharge' ? sumRechargeTask / 100 : sumConsumeTask / 100
}}&nbsp;&nbsp;&nbsp;&nbsp;
}}
</div>
<div @change="handleDatePickerChange">
<el-button @click="getToday()" label="day" style="margin-left:250px"
@ -705,7 +705,7 @@ const updateChart = (chartData) => {
},
xAxis: {
type: 'category',
data: markets.value.map(m => marketMapping[m] || m),
data: markets.value,
axisLabel: {
interval: 0,
rotate: 30

Loading…
Cancel
Save