|
|
@ -26,7 +26,7 @@ const tableData = ref([]) |
|
|
|
const consumeUser = ref({ |
|
|
|
jwcode: null, |
|
|
|
payPlatform: "", |
|
|
|
market: "", |
|
|
|
markets: [], |
|
|
|
|
|
|
|
startTime: '', |
|
|
|
endTime: '', |
|
|
@ -60,7 +60,7 @@ const getTime = ref({ |
|
|
|
const activity = ref([]) |
|
|
|
|
|
|
|
// 搜索地区列表 |
|
|
|
const market = ref([]) |
|
|
|
const markets = ref([]) |
|
|
|
|
|
|
|
// 新增排序字段和排序方式 |
|
|
|
const sortField = ref('') |
|
|
@ -112,7 +112,7 @@ const goods = ref([]) |
|
|
|
const totalGoldSearch = ref({ |
|
|
|
jwcode: null, |
|
|
|
payPlatform: "", |
|
|
|
market: "", |
|
|
|
markets: [], |
|
|
|
startTime: "", |
|
|
|
endTime: "", |
|
|
|
goodsName: "" |
|
|
@ -191,7 +191,7 @@ const ConsumeSelectBy = async function (val) { |
|
|
|
totalGoldSearch.value.startTime = consumeUser.value.startTime |
|
|
|
totalGoldSearch.value.endTime = consumeUser.value.endTime |
|
|
|
totalGoldSearch.value.payPlatform = consumeUser.value.payPlatform |
|
|
|
totalGoldSearch.value.market = consumeUser.value.market |
|
|
|
totalGoldSearch.value.markets = consumeUser.value.markets |
|
|
|
totalGoldSearch.value.goodsName = consumeUser.value.goodsName |
|
|
|
totalGoldSearch.value.jwcode = consumeUser.value.jwcode |
|
|
|
// |
|
|
@ -264,7 +264,7 @@ const reset = function () { |
|
|
|
|
|
|
|
consumeUser.value.goodsName = '' |
|
|
|
|
|
|
|
consumeUser.value.market = '' |
|
|
|
consumeUser.value.markets = [] |
|
|
|
|
|
|
|
consumeUser.value.payPlatform = '' |
|
|
|
|
|
|
@ -362,51 +362,6 @@ const getGoods = async function () { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 获取地区列表的方法 |
|
|
|
|
|
|
|
// 获取地区,修改为级联下拉框 |
|
|
|
const getMarket = async function () { |
|
|
|
console.log('获取地区adminid', adminData.value) |
|
|
|
try { |
|
|
|
// 发送POST请求 |
|
|
|
const result = await API({ |
|
|
|
|
|
|
|
url: '/market/selectMarket', |
|
|
|
data: {account: adminData.value.account} |
|
|
|
}); |
|
|
|
// 将响应结果存储到响应式数据中 |
|
|
|
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.log('请求失败', error) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 处理排序事件 |
|
|
|
const handleSortChange = (column) => { |
|
|
|
console.log('排序字段:', column.prop) |
|
|
@ -463,7 +418,7 @@ const exportExcel = async function () { |
|
|
|
consumeUser: { |
|
|
|
jwcode: consumeUser.value.jwcode || '', |
|
|
|
payPlatform: consumeUser.value.payPlatform || '', |
|
|
|
market: consumeUser.value.market || '', |
|
|
|
markets: consumeUser.value.markets || [], |
|
|
|
startTime: consumeUser.value.startTime || '', |
|
|
|
endTime: consumeUser.value.endTime || '', |
|
|
|
goodsName: consumeUser.value.goodsName || '', |
|
|
@ -549,24 +504,100 @@ const getTagText = (state) => { |
|
|
|
return '未知状态'; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 存储地区选择变化 |
|
|
|
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; |
|
|
|
|
|
|
|
// 反向映射 |
|
|
|
consumeUser.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 { |
|
|
|
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])); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
consumeUser.value.markets = Array.from(ids); |
|
|
|
} else { |
|
|
|
consumeUser.value.market = ''; |
|
|
|
consumeUser.value.markets = []; |
|
|
|
} |
|
|
|
|
|
|
|
console.log('最终映射后的 market IDs:', consumeUser.value.markets); |
|
|
|
}; |
|
|
|
|
|
|
|
const props = {multiple: true} |
|
|
|
// 获取地区,修改为级联下拉框 |
|
|
|
const getMarket = async function () { |
|
|
|
try { |
|
|
|
// 发送POST请求 |
|
|
|
const result = await API({ |
|
|
|
|
|
|
|
url: '/market/selectMarket', |
|
|
|
}); |
|
|
|
// 将响应结果存储到响应式数据中 |
|
|
|
console.log('请求成功', result) |
|
|
|
|
|
|
|
// 递归转换树形结构为级联选择器需要的格式(跳过第一级节点) |
|
|
|
const transformTree = (nodes) => { |
|
|
|
// 直接处理第一级节点的子节点 |
|
|
|
const allChildren = nodes.flatMap(node => node.children || []); |
|
|
|
|
|
|
|
return allChildren.map(child => { |
|
|
|
const grandchildren = child.children && child.children.length |
|
|
|
? transformTree([child]) // 递归处理子节点 |
|
|
|
: null; |
|
|
|
|
|
|
|
return { |
|
|
|
value: child.name, |
|
|
|
label: child.name, |
|
|
|
children: grandchildren |
|
|
|
}; |
|
|
|
}); |
|
|
|
}; |
|
|
|
// 存储地区信息 |
|
|
|
markets.value = transformTree(result.data) |
|
|
|
console.log('转换后的地区树==============', markets.value) |
|
|
|
} catch (error) { |
|
|
|
console.log('请求失败', error) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
<template> |
|
|
@ -583,7 +614,7 @@ const handleMarketChange = (value) => { |
|
|
|
<el-col :span="6"> |
|
|
|
<div class="head-card-element"> |
|
|
|
<el-text class="mx-1" size="large">商品名称:</el-text> |
|
|
|
<el-select v-model="consumeUser.goodsName" placeholder="请选择商品名称" style="width: 180px" |
|
|
|
<el-select v-model="consumeUser.goodsName" placeholder="请选择商品名称" style="width: 180px" |
|
|
|
clearable> |
|
|
|
<!-- 修改 v-for 绑定逻辑 --> |
|
|
|
<el-option v-for="(item, index) in goods" :key="index" :label="item" :value="item"/> |
|
|
@ -594,11 +625,14 @@ const handleMarketChange = (value) => { |
|
|
|
<el-text class="mx-1" size="large">所属地区:</el-text> |
|
|
|
<el-cascader |
|
|
|
v-model="selectedMarketPath" |
|
|
|
:options="market" |
|
|
|
:options="markets" |
|
|
|
placeholder="请选择所属地区" |
|
|
|
clearable |
|
|
|
collapse-tags |
|
|
|
collapse-tags-tooltip |
|
|
|
style="width:180px" |
|
|
|
@change="handleMarketChange" |
|
|
|
:props="props" |
|
|
|
/> |
|
|
|
</el-col> |
|
|
|
<el-col :span="6"> |
|
|
|