|
@ -33,26 +33,66 @@ const handleDatePickerChange = () => { |
|
|
// 搜索=========================================== |
|
|
// 搜索=========================================== |
|
|
// 搜索recharge |
|
|
// 搜索recharge |
|
|
const rechargeUser = ref({ |
|
|
const rechargeUser = ref({ |
|
|
adminId: adminData.value.id |
|
|
|
|
|
|
|
|
adminId: adminData.value.id, |
|
|
|
|
|
markets: [], |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
// 存储地区选择变化 |
|
|
// 存储地区选择变化 |
|
|
const selectedMarketPath = ref([]) |
|
|
const selectedMarketPath = ref([]) |
|
|
//处理地区选择变化 |
|
|
//处理地区选择变化 |
|
|
const handleMarketChange = (value) => { |
|
|
const handleMarketChange = (value) => { |
|
|
if (value && value.length > 0) { |
|
|
|
|
|
const lastValue = value[value.length - 1]; |
|
|
|
|
|
let selectedName = lastValue.endsWith('_all') |
|
|
|
|
|
? lastValue.replace('_all', '') |
|
|
|
|
|
: lastValue; |
|
|
|
|
|
|
|
|
|
|
|
// 反向映射 |
|
|
|
|
|
rechargeUser.value.market = reverseMarketMapping[selectedName] || ''; |
|
|
|
|
|
|
|
|
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 { |
|
|
} else { |
|
|
rechargeUser.value.market = ''; |
|
|
|
|
|
|
|
|
node.children.forEach(child => traverse(child, node.label)); |
|
|
} |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
nodes.forEach(node => traverse(node)); |
|
|
|
|
|
return leafNames; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const leafNameMap = getAllLeafNames(markets.value); // 所有叶子节点和对应父级名称 |
|
|
|
|
|
|
|
|
|
|
|
// 构建一个 { parentName: [childName1, childName2, ...] } 的结构 |
|
|
|
|
|
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])); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
rechargeUser.value.markets = Array.from(ids); |
|
|
|
|
|
} else { |
|
|
|
|
|
rechargeUser.value.markets = []; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
console.log('最终映射后的 market IDs:', rechargeUser.value.markets); |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
// 搜索对象 |
|
|
// 搜索对象 |
|
|
const getObj = ref({ |
|
|
const getObj = ref({ |
|
@ -68,7 +108,7 @@ const activity = ref([]) |
|
|
// 所有信息 |
|
|
// 所有信息 |
|
|
const allData = ref([]) |
|
|
const allData = ref([]) |
|
|
// 搜索地区列表 |
|
|
// 搜索地区列表 |
|
|
const market = ref([]) |
|
|
|
|
|
|
|
|
const markets = ref([]) |
|
|
//时间格式化 |
|
|
//时间格式化 |
|
|
const formatTime = (val) => val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : '' |
|
|
const formatTime = (val) => val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : '' |
|
|
// 初始化 money 和 permanentGold 和 freeGold |
|
|
// 初始化 money 和 permanentGold 和 freeGold |
|
@ -136,7 +176,7 @@ const getActivity = async function () { |
|
|
// 在这里可以处理错误逻辑,比如显示错误提示等 |
|
|
// 在这里可以处理错误逻辑,比如显示错误提示等 |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const marketsTree = ref("") |
|
|
// 获取地区,修改为级联下拉框 |
|
|
// 获取地区,修改为级联下拉框 |
|
|
const getArea = async function () { |
|
|
const getArea = async function () { |
|
|
console.log('获取地区adminid', adminData.value) |
|
|
console.log('获取地区adminid', adminData.value) |
|
@ -150,30 +190,26 @@ const getArea = async function () { |
|
|
// 将响应结果存储到响应式数据中 |
|
|
// 将响应结果存储到响应式数据中 |
|
|
console.log('请求成功', result) |
|
|
console.log('请求成功', result) |
|
|
|
|
|
|
|
|
// 递归转换树形结构为级联选择器需要的格式 |
|
|
|
|
|
|
|
|
// 递归转换树形结构为级联选择器需要的格式(跳过第一级节点) |
|
|
const transformTree = (nodes) => { |
|
|
const transformTree = (nodes) => { |
|
|
return nodes.map(node => { |
|
|
|
|
|
const children = node.children && node.children.length |
|
|
|
|
|
? transformTree(node.children) |
|
|
|
|
|
|
|
|
// 直接处理第一级节点的子节点 |
|
|
|
|
|
const allChildren = nodes.flatMap(node => node.children || []); |
|
|
|
|
|
|
|
|
|
|
|
return allChildren.map(child => { |
|
|
|
|
|
const grandchildren = child.children && child.children.length |
|
|
|
|
|
? transformTree([child]) // 递归处理子节点 |
|
|
: null; |
|
|
: null; |
|
|
// 如果有子节点,添加“全部”选项 |
|
|
|
|
|
if (children) { |
|
|
|
|
|
children.unshift({ |
|
|
|
|
|
value: `${node.name}_all`, // 唯一标识 |
|
|
|
|
|
label: '全部', |
|
|
|
|
|
children: null |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
return { |
|
|
value: node.name, //使用地区名称作为值 |
|
|
|
|
|
label: node.name, //显示名称 |
|
|
|
|
|
children |
|
|
|
|
|
|
|
|
value: child.name, |
|
|
|
|
|
label: child.name, |
|
|
|
|
|
children: grandchildren |
|
|
}; |
|
|
}; |
|
|
}); |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
}; |
|
|
// 存储地区信息 |
|
|
// 存储地区信息 |
|
|
market.value = transformTree(result.data) |
|
|
|
|
|
console.log('转换后的地区树', market.value) |
|
|
|
|
|
|
|
|
markets.value = transformTree(result.data) |
|
|
|
|
|
console.log('转换后的地区树==============', markets.value) |
|
|
} catch (error) { |
|
|
} catch (error) { |
|
|
console.log('请求失败', error) |
|
|
console.log('请求失败', error) |
|
|
} |
|
|
} |
|
@ -239,7 +275,7 @@ const get = async function (val) { |
|
|
}) |
|
|
}) |
|
|
// 复制一份 rechargeUser.value 并移除排序字段和排序方式 |
|
|
// 复制一份 rechargeUser.value 并移除排序字段和排序方式 |
|
|
const detailWithoutSort = ref({ |
|
|
const detailWithoutSort = ref({ |
|
|
market: rechargeUser.value.market, |
|
|
|
|
|
|
|
|
markets: rechargeUser.value.markets, |
|
|
activity: rechargeUser.value.activity, |
|
|
activity: rechargeUser.value.activity, |
|
|
adminId: rechargeUser.value.adminId, |
|
|
adminId: rechargeUser.value.adminId, |
|
|
startTime: rechargeUser.value.startTime, |
|
|
startTime: rechargeUser.value.startTime, |
|
@ -297,8 +333,8 @@ const reset = function () { |
|
|
delete rechargeUser.value.jwcode |
|
|
delete rechargeUser.value.jwcode |
|
|
delete rechargeUser.value.activity |
|
|
delete rechargeUser.value.activity |
|
|
delete rechargeUser.value.payPlatform |
|
|
delete rechargeUser.value.payPlatform |
|
|
delete rechargeUser.value.market |
|
|
|
|
|
selectedMarketPath .value = [] // 重置地区选择路径 |
|
|
|
|
|
|
|
|
rechargeUser.value.markets = [] |
|
|
|
|
|
selectedMarketPath.value = [] // 重置地区选择路径 |
|
|
delete rechargeUser.value.startTime |
|
|
delete rechargeUser.value.startTime |
|
|
delete rechargeUser.value.endTime |
|
|
delete rechargeUser.value.endTime |
|
|
delete sortField.value |
|
|
delete sortField.value |
|
@ -508,6 +544,7 @@ const getTagText = (state) => { |
|
|
return '未知状态'; |
|
|
return '未知状态'; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
const props = {multiple: true} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</script> |
|
|
</script> |
|
@ -544,11 +581,14 @@ const getTagText = (state) => { |
|
|
<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="market" |
|
|
|
|
|
|
|
|
:options="markets" |
|
|
placeholder="请选择所属地区" |
|
|
placeholder="请选择所属地区" |
|
|
clearable |
|
|
clearable |
|
|
|
|
|
collapse-tags |
|
|
|
|
|
collapse-tags-tooltip |
|
|
style="width:180px" |
|
|
style="width:180px" |
|
|
@change="handleMarketChange" |
|
|
@change="handleMarketChange" |
|
|
|
|
|
:props="props" |
|
|
/> |
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
</el-col> |
|
|
</el-col> |
|
@ -609,7 +649,7 @@ const getTagText = (state) => { |
|
|
<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"> |
|
|
<template #default="scope"> |
|
|
<template #default="scope"> |
|
|
<span>{{ marketMapping[scope.row.market] || scope.row.market}}</span> |
|
|
|
|
|
|
|
|
<span>{{ marketMapping[scope.row.market] || scope.row.market }}</span> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
<el-table-column prop="activity" label="活动名称" width="110px" show-overflow-tooltip/> |
|
|
<el-table-column prop="activity" label="活动名称" width="110px" show-overflow-tooltip/> |
|
|