|
|
@ -7,6 +7,7 @@ import axios from 'axios' |
|
|
|
import moment from 'moment' |
|
|
|
import {ta} from 'element-plus/es/locales.mjs' |
|
|
|
import API from '@/util/http' |
|
|
|
import {marketMapping, reverseMarketMapping} from "@/utils/marketMap.js"; |
|
|
|
|
|
|
|
// 变量 |
|
|
|
//这是获取用户信息的接口 |
|
|
@ -26,32 +27,47 @@ const getAdminData = async function () { |
|
|
|
// 定义加载状态,获取地区数据 |
|
|
|
const isLoadingmarket = ref(false); |
|
|
|
const market = ref([]) |
|
|
|
const getmarket = async () => { |
|
|
|
isLoadingmarket.value = true; |
|
|
|
// 获取地区,修改为级联下拉框 |
|
|
|
const getMarket = async function () { |
|
|
|
console.log('获取地区adminid', adminData.value) |
|
|
|
try { |
|
|
|
// 发送POST请求 |
|
|
|
const result = await API({ |
|
|
|
url: '/general/adminMarkets', |
|
|
|
|
|
|
|
url: '/market/selectMarket', |
|
|
|
data: {account: adminData.value.account} |
|
|
|
}); |
|
|
|
console.log('获取地区数据成功', result) |
|
|
|
// 假设后端返回的是字符串数组,转换为 { value, label } 格式 |
|
|
|
if (Array.isArray(result.data) && typeof result.data[0] === 'string') { |
|
|
|
market.value = result.data |
|
|
|
.filter(item => item !== null && item !== undefined && item.trim() !== '') // 过滤空值 |
|
|
|
.map(item => ({ value: item, label: item })); |
|
|
|
} else { |
|
|
|
market.value = result.data; |
|
|
|
// 将响应结果存储到响应式数据中 |
|
|
|
console.log('请求成功', result) |
|
|
|
|
|
|
|
// 递归转换树形结构为级联选择器需要的格式 |
|
|
|
const transformTree = (nodes) => { |
|
|
|
return nodes.map(node => { |
|
|
|
const children = node.children && node.children.length |
|
|
|
? transformTree(node.children) |
|
|
|
: null; |
|
|
|
// 如果有子节点,添加“全部”选项 |
|
|
|
if (children) { |
|
|
|
children.unshift({ |
|
|
|
value: `${node.name}_all`, // 唯一标识 |
|
|
|
label: '全部', |
|
|
|
children: null |
|
|
|
}); |
|
|
|
} |
|
|
|
return { |
|
|
|
value: node.name, //使用地区名称作为值 |
|
|
|
label: node.name, //显示名称 |
|
|
|
children |
|
|
|
}; |
|
|
|
}); |
|
|
|
} |
|
|
|
// 存储地区信息 |
|
|
|
market.value = transformTree(result.data) |
|
|
|
console.log('转换后的地区树', market.value) |
|
|
|
} catch (error) { |
|
|
|
console.error('获取地区数据失败:', error); |
|
|
|
ElMessage.error('获取地区数据失败,请稍后重试'); |
|
|
|
// 可以提供默认数据 |
|
|
|
market.value = []; |
|
|
|
} finally { |
|
|
|
isLoadingmarket.value = false; |
|
|
|
console.log('请求失败', error) |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// 充值明细表格 |
|
|
|
const tableData = ref([]) |
|
|
@ -193,6 +209,7 @@ const reset = function () { |
|
|
|
sortField.value = '' |
|
|
|
sortOrder.value = '' |
|
|
|
get() |
|
|
|
selectedMarketPath.value = [] |
|
|
|
} |
|
|
|
const cellClick = function (row, column) { |
|
|
|
console.log('cellClick', column.label) |
|
|
@ -223,7 +240,7 @@ const handleSortChange = (column) => { |
|
|
|
onMounted(async function () { |
|
|
|
await getAdminData() |
|
|
|
await get() |
|
|
|
await getmarket() |
|
|
|
await getMarket() |
|
|
|
await getExportList() |
|
|
|
}) |
|
|
|
const handlePageSizeChange = function (val) { |
|
|
@ -320,24 +337,22 @@ const getTagText = (state) => { |
|
|
|
return '未知状态'; |
|
|
|
} |
|
|
|
} |
|
|
|
const handleMarketChange = (val) => { |
|
|
|
if (!Array.isArray(val)) return |
|
|
|
|
|
|
|
const hasHeadquarters = val.includes('总部') |
|
|
|
const hasOther = val.some(item => item !== '总部') |
|
|
|
// 存储地区选择变化 |
|
|
|
const selectedMarketPath = ref([]) |
|
|
|
//处理地区选择变化 |
|
|
|
const handleMarketChange = (value) => { |
|
|
|
if (value && value.length > 0) { |
|
|
|
const lastValue = value[value.length - 1]; |
|
|
|
let selectedName = lastValue.endsWith('_all') |
|
|
|
? lastValue.replace('_all', '') |
|
|
|
: lastValue; |
|
|
|
|
|
|
|
if (hasHeadquarters && hasOther) { |
|
|
|
if (val[val.length - 1] === '总部') { |
|
|
|
// 用户最后点的是总部,保留总部,清除其他 |
|
|
|
user.value.markets = ['总部'] |
|
|
|
ElMessage.warning('“总部”与其他地区不可同时选择,系统已为您保留“总部”') |
|
|
|
// 反向映射 |
|
|
|
rechargeUser.value.market = reverseMarketMapping[selectedName] || ''; |
|
|
|
} else { |
|
|
|
// 用户最后点的是其他,保留其他,移除总部 |
|
|
|
user.value.markets = val.filter(item => item !== '总部') |
|
|
|
ElMessage.warning('“总部”与其他地区不可同时选择,系统已为您去除“总部”') |
|
|
|
} |
|
|
|
} |
|
|
|
rechargeUser.value.market = ''; |
|
|
|
} |
|
|
|
}; |
|
|
|
</script> |
|
|
|
|
|
|
|
<template> |
|
|
@ -351,9 +366,14 @@ const handleMarketChange = (val) => { |
|
|
|
</div> |
|
|
|
<div class="head-card-element"> |
|
|
|
<el-text class="mx-1" size="large">所属地区:</el-text> |
|
|
|
<el-select v-model="user.markets" placeholder="请选择所属地区" style="width: 180px" clearable multiple @change="handleMarketChange"> |
|
|
|
<el-option v-for="item in market" :key="item.value" :label="item.label" :value="item.value"/> |
|
|
|
</el-select> |
|
|
|
<el-cascader |
|
|
|
v-model="selectedMarketPath" |
|
|
|
:options="market" |
|
|
|
placeholder="请选择所属地区" |
|
|
|
clearable |
|
|
|
style="width:180px" |
|
|
|
@change="handleMarketChange" |
|
|
|
/> |
|
|
|
</div> |
|
|
|
<el-button type="primary" @click="search()">查询</el-button> |
|
|
|
<el-button @click="reset" type="success">重置</el-button> |
|
|
@ -387,7 +407,11 @@ const handleMarketChange = (val) => { |
|
|
|
</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="market" label="所属地区" width="120"> |
|
|
|
<template #default="scope"> |
|
|
|
{{ marketMapping[scope.row.market] || scope.row.market }} |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column prop="allJb" label="金币总数" width="120" aligh="center"> |
|
|
|
<template #default="scope"> |
|
|
|
<span>{{ |
|
|
@ -447,7 +471,10 @@ const handleMarketChange = (val) => { |
|
|
|
<template #default> |
|
|
|
<div> |
|
|
|
<div>永久金币:{{ (scope.row.sumConsumeGold || 0) / 100 }}</div> |
|
|
|
<div>免费金币:{{ ((scope.row.sumConsumeJune || 0) + (scope.row.sumConsumeDecember || 0)) / 100 }}</div> |
|
|
|
<div>免费金币:{{ |
|
|
|
((scope.row.sumConsumeJune || 0) + (scope.row.sumConsumeDecember || 0)) / 100 |
|
|
|
}} |
|
|
|
</div> |
|
|
|
<div>任务金币:{{ (scope.row.sumConsumeJune || 0) / 100 }}</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
@ -470,7 +497,8 @@ const handleMarketChange = (val) => { |
|
|
|
<!-- 分页 --> |
|
|
|
<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" |
|
|
|
layout="total, sizes, prev, pager, next, jumper" :total="total" |
|
|
|
@size-change="handlePageSizeChange" |
|
|
|
@current-change="handleCurrentChange"></el-pagination> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|