Browse Source

拉代码

zhangrenyuan/feature-20250728113353-金币前端三期
ZhangYong 2 weeks ago
parent
commit
3ed3962eea
  1. 6
      .env.development
  2. 77
      src/views/audit/gold/rechargeAudit.vue
  3. 90
      src/views/audit/gold/refundAudit.vue
  4. 39
      src/views/consume/bean/articleVideo.vue
  5. 33
      src/views/consume/bean/dieHardFan.vue
  6. 32
      src/views/consume/bean/liveStream.vue
  7. 11
      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. 18
      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='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_API_BASE='http://192.168.9.52:10705/'
VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload
# VITE_API_BASE='http://192.168.9.28:8081/' # 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/' # VITE_API_BASE='http://192.168.5.92:8081/'
# zhangyong # zhangyong
# VITE_API_BASE='http://192.168.3.83:8081/' # VITE_API_BASE='http://192.168.3.83:8081/'
# 李慧琳
# VITE_API_BASE='http://localhost:10704/'
# 本地
VITE_API_BASE='http://localhost:8081/'

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

@ -24,14 +24,11 @@
<el-text class="mx-1" size="large">所属地区</el-text> <el-text class="mx-1" size="large">所属地区</el-text>
<el-cascader <el-cascader
v-model="selectedMarketPath" v-model="selectedMarketPath"
:options="markets"
:options="market"
placeholder="请选择所属地区" placeholder="请选择所属地区"
clearable clearable
collapse-tags
collapse-tags-tooltip
style="width:180px" style="width:180px"
@change="handleMarketChange" @change="handleMarketChange"
:props="props"
/> />
</el-col> </el-col>
</el-row> </el-row>
@ -93,11 +90,7 @@
</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"/>
<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">
<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="activity" label="活动名称" width="100px" show-overflow-tooltip/>
<el-table-column prop="money" label="充值金额" sortable="custom" width="110px"> <el-table-column prop="money" label="充值金额" sortable="custom" width="110px">
<template #default="scope">{{ scope.row.permanentGold / 100 }}</template> <template #default="scope">{{ scope.row.permanentGold / 100 }}</template>
@ -189,7 +182,6 @@
<script setup> <script setup>
import {onMounted, reactive, ref} from 'vue' import {onMounted, reactive, ref} from 'vue'
import {marketMapping, reverseMarketMapping} from '@/utils/marketMap.js'
import {ElMessage} from 'element-plus' import {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'
@ -230,7 +222,7 @@ const rechargeAudit = ref({
payModel: "", // payModel: "", //
startTime: "", // startTime: "", //
endTime: "", // endTime: "", //
markets: [], //
market: "", //
auditStatus: "0", auditStatus: "0",
}) })
@ -245,7 +237,7 @@ const total = ref(50)
const getTime = ref([]) const getTime = ref([])
const activity = ref([]) const activity = ref([])
// //
const markets = ref([])
const market = ref("")
// //
const rejectDialogVisible = ref(false) const rejectDialogVisible = ref(false)
// //
@ -385,7 +377,7 @@ const resetSearch = function () {
payModel: "", payModel: "",
startTime: "", startTime: "",
endTime: "", endTime: "",
markets: [],
market: "",
auditStatus: rechargeAudit.value.auditStatus, auditStatus: rechargeAudit.value.auditStatus,
} }
@ -621,62 +613,15 @@ const previewImage = (imageUrl) => {
}; };
// //
const selectedMarketPath = ref([])
//
const selectedMarketPath = ref("")
const handleMarketChange = (value) => { 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});
if (value && value.length > 0) {
rechargeAudit.value.market = value[value.length - 1]
} else { } else {
node.children.forEach(child => traverse(child, node.label));
rechargeAudit.value.market = ''
} }
};
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);
} else {
rechargeAudit.value.markets = [];
} }
console.log('最终映射后的 market IDs:', rechargeAudit.value.markets);
};
const props = {multiple: true} const props = {multiple: true}
// //
const getMarket = async function () { const getMarket = async function () {
@ -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) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
} }

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

@ -25,14 +25,11 @@
<el-text class="mx-1" size="large">所属地区</el-text> <el-text class="mx-1" size="large">所属地区</el-text>
<el-cascader <el-cascader
v-model="selectedMarketPath" v-model="selectedMarketPath"
:options="markets"
:options="market"
placeholder="请选择所属地区" placeholder="请选择所属地区"
clearable clearable
collapse-tags
collapse-tags-tooltip
style="width:180px" style="width:180px"
@change="handleMarketChange" @change="handleMarketChange"
:props="props"
/> />
</el-col> </el-col>
</el-row> </el-row>
@ -83,11 +80,8 @@
<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"/>
<el-table-column prop="jwcode" 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="refundType" label="退款类型" width="120"/>
<el-table-column prop="refundModel" label="退款方式" width="120"> <el-table-column prop="refundModel" label="退款方式" width="120">
<template #default="{ row }"> <template #default="{ row }">
@ -175,7 +169,11 @@ import {onMounted, reactive, ref} from 'vue'
import {ElMessage} from 'element-plus' import {ElMessage} from 'element-plus'
import API from '@/util/http.js' import API from '@/util/http.js'
import moment from 'moment' 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 = [ const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1,23 , 59, 59), new Date(2000, 2, 1,23 , 59, 59),
@ -201,7 +199,7 @@ const searchForm = ref({
jwcode: '', jwcode: '',
refundModel: '', refundModel: '',
goodsName: '', goodsName: '',
markets: [],
market: "",
startTime: '', startTime: '',
endTime: '', endTime: '',
auditStatus: '0' auditStatus: '0'
@ -292,7 +290,7 @@ const showRejectDialog = (row) => {
rejectDialogVisible.value = true rejectDialogVisible.value = true
} }
// //
const markets = ref([])
const market = ref("")
// //
const getRefundGoods = async () => { 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 adminStore = useAdminStore();
const {menuTree} = storeToRefs(adminStore); const {menuTree} = storeToRefs(adminStore);
@ -438,7 +431,7 @@ const resetSearch = function () {
jwcode: '', jwcode: '',
refundType: '', refundType: '',
goodsName: '', goodsName: '',
markets: [],
market: "",
startTime: '', startTime: '',
endTime: '', endTime: '',
sortField: '', sortField: '',
@ -552,63 +545,14 @@ const adminReject = async function () {
} }
// //
const selectedMarketPath = ref([])
//
const selectedMarketPath = ref("")
const handleMarketChange = (value) => { 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});
if (value && value.length > 0) {
searchForm.value.market = value[value.length - 1]
} else { } 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.market = ''
} }
});
searchForm.value.markets = Array.from(ids);
} else {
searchForm.value.markets = [];
} }
console.log('最终映射后的 market IDs:', searchForm.value.markets);
};
const props = {multiple: true}
// //
const getMarket = async function () { const getMarket = async function () {
try { 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) { } catch (error) {
console.log('请求失败', 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('') const sortField = ref('')
@ -355,23 +355,14 @@ onMounted(async function () {
const exportExcel = async function () { const exportExcel = async function () {
const params = { // const params = { //
beanConsumeArticle: {
...getObj.value,
"beanConsumeArticle": {
...beanConsumeArticle.value, ...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'
}
}
const res = await API({ url: '/export/exportConsume', data: params })
sortField: sortField.value,
sortOrder: sortOrder.value,
},
}
const res = await API({ url: '/export/exportArticle', data: params })
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功') ElMessage.success('导出成功')
} }
@ -395,7 +386,7 @@ const getExportList = async () => {
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 // todo type
return item.type === 8; //4 // todo type 8/
}); });
exportList.value = filteredData exportList.value = filteredData
} else { } else {

33
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([ const consumeTypes = ref([
@ -363,18 +363,14 @@ onMounted(async function () {
const exportExcel = async function () { const exportExcel = async function () {
const params = { // const params = { //
beanConsumeFan: {
...getObj.value,
"beanConsumeFan": {
...beanConsumeFan.value, ...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'
}
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) { if (res.code === 200) {
ElMessage.success('导出成功') ElMessage.success('导出成功')
} }
@ -398,7 +394,7 @@ const getExportList = async () => {
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 // todo type
return item.type === 7; //4 // todo type 7
}); });
exportList.value = filteredData exportList.value = filteredData
} else { } else {
@ -484,7 +480,6 @@ const getTagText = (state) => {
filterable filterable
allow-create allow-create
default-first-option default-first-option
:filter-method="filterChannel"
> >
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
</el-select> </el-select>

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

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

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

@ -4,7 +4,7 @@ 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 {marketMapping, reverseMarketMapping} from "@/utils/marketMap.js";
import {reverseMarketMapping} from "@/utils/marketMap.js";
// //
/* /*
@ -579,7 +579,8 @@ 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"/>
end-placeholder="结束时间" style="width: 400px" @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>
@ -625,11 +626,7 @@ const getMarket = async function () {
<el-table-column prop="name" label="姓名" width="150px" fixed="left"/> <el-table-column prop="name" label="姓名" width="150px" fixed="left"/>
<!-- 固定精网号列 --> <!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" 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="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">

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: {id: roleId}
}) })
data.value = res.data 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('看看data', data.value)
console.log('parentID:', addRole.value.parentId, 'roleId:', roleId) 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) { if (addRole.value.parentId && addRole.value.parentId !== 2) {
const result = await API({ const result = await API({
url: '/general/roleMarket', url: '/general/roleMarket',
@ -353,6 +363,33 @@ const getLists = async function () {
console.log('请求失败', error) 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 treeRef = ref(null)
// //
const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => { const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => {
@ -734,7 +771,7 @@ onMounted(async function () {
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="market" label="所属地区:" required> <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-option v-for="item in addRoleMarket" :key="item" :label="item" :value="item"/>
</el-select> </el-select>
</el-form-item> </el-form-item>

20
src/views/permissions/userPermission.vue

@ -697,11 +697,12 @@ const handleMarketChangeEditUser = (value) => {
} }
}; };
//
const addUserProps ={
multiple: true,
}
/*// 计算属性控制级联选择器的选项禁用状态
const addUserProps = computed(() => { const addUserProps = computed(() => {
// addAdmin.market
//
const hasHeadquarters = addAdmin.value.market.includes('总部'); const hasHeadquarters = addAdmin.value.market.includes('总部');
return { return {
@ -712,11 +713,14 @@ const addUserProps = computed(() => {
} }
}; };
});
});*/
//
const editUserProps = {
multiple: true,
}
/*// 计算属性控制级联选择器的选项禁用状态
const editUserProps = computed(() => { const editUserProps = computed(() => {
// addAdmin.market
//
const hasHeadquarters = permissionEditObj.value.market.includes('总部'); const hasHeadquarters = permissionEditObj.value.market.includes('总部');
return { return {
@ -727,7 +731,7 @@ const editUserProps = computed(() => {
} }
}; };
});
});*/
const selectParentNodes = (treeData, nodeId, checkedKeys) => { const selectParentNodes = (treeData, nodeId, checkedKeys) => {
if (!Array.isArray(treeData)) return false; 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 {ElMessage} from 'element-plus'
import moment from 'moment' import moment from 'moment'
import API from '@/util/http.js' import API from '@/util/http.js'
import {marketMapping, reverseMarketMapping} from '@/utils/marketMap.js';
import {reverseMarketMapping} from '@/utils/marketMap.js';
import dayjs from "dayjs"; import dayjs from "dayjs";
// //
const adminData = ref({}) const adminData = ref({})
@ -648,11 +648,7 @@ const getTagText = (state) => {
</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"/>
<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">
<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="activity" label="活动名称" width="110px" show-overflow-tooltip/>
<el-table-column prop="rateName" label="货币名称" width="110px"/> <el-table-column prop="rateName" label="货币名称" width="110px"/>
<el-table-column prop="money" sortable="custom" 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 moment from 'moment'
import API from '@/util/http.js' import API from '@/util/http.js'
import request from '@/util/http.js' import request from '@/util/http.js'
import {marketMapping, reverseMarketMapping} from "@/utils/marketMap.js";
import {reverseMarketMapping} from "@/utils/marketMap.js";
const defaultTime = [ const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1,23 , 59, 59), new Date(2000, 2, 1,23 , 59, 59),
@ -647,11 +648,7 @@ const getMarket = async function () {
fixed="left" fixed="left"
width="110px" 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="goodsName" label="商品名称" width="110px" show-overflow-tooltip/>
<el-table-column prop="refundType" label="退款类型" width="100px"/> <el-table-column prop="refundType" label="退款类型" width="100px"/>

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

@ -1,13 +1,10 @@
<script setup> <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 moment from 'moment'
import { ta } from 'element-plus/es/locales.mjs'
import API from '@/util/http.js' import API from '@/util/http.js'
import { marketMapping, reverseMarketMapping } from "@/utils/marketMap.js";
import {reverseMarketMapping} from "@/utils/marketMap.js";
// //
// //
@ -399,11 +396,7 @@ const getMarket = async function () {
</el-table-column> </el-table-column>
<el-table-column prop="name" label="姓名" width="120"/> <el-table-column prop="name" label="姓名" width="120"/>
<el-table-column prop="jwcode" 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="allJb" label="金币总数" width="120" aligh="center"> <el-table-column prop="allJb" label="金币总数" width="120" aligh="center">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -489,7 +482,8 @@ const getMarket = 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"
layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination> @current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>

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

@ -1,13 +1,10 @@
<script setup> <script setup>
import {ref, onMounted, computed, nextTick, watch} from 'vue'
import {onMounted, ref} from 'vue'
import {ElMessage} from 'element-plus' import {ElMessage} from 'element-plus'
import axios from 'axios'
import moment from 'moment' import moment from 'moment'
import API from '@/util/http.js' 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"; import dayjs from "dayjs";
// //
@ -552,11 +549,7 @@ const getMarket = async function () {
</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"/>
<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">
<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 prop="payPlatform" label="平台信息" width="140">
</el-table-column> </el-table-column>

12
src/views/workspace/index.vue

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

Loading…
Cancel
Save