场景:
原业务场景: 是在一个城市里选择区域 ,因为城市可控, 所以只用进行区域选择 默认传给后端一个城市还有选中的区域存放在数组中 servrce_area['1111','222','333'] 且treedata接收的也为一个数组所以很方便。
注:(treeSelect会在children全选时候自动选中父节点 具体可参考文档)
现业务场景:因为增加了城市区域,所以传给后端的数据结构要变为
代码操作
export function transCityData (selecteds, citys) {
var sendData = []
// 检测数据类型 如果不是数组直接return
if (!Array.isArray(selecteds) || !Array.isArray(citys)) {
return []
}
// 选中的城市数组进行循环
for (let i = 0; i < selecteds.length; i++) {
const selectedvalue = selecteds[i]
for (let j = 0; j < citys.length; j++) {
// 如果找到的是大城市
if (citys[j].value === selectedvalue) {
var __service_area = []
for (var m in citys[j].children) {
__service_area.push(citys[j].children[m].value)
}
sendData.push({
gb_codes: [citys[j].value],
service_area: __service_area
})
} else {
// 找小城市
var __tempSmallCity = []
var __tempgb_codes = []
for (let k = 0; k < citys[j].children.length; k++) {
if (citys[j].children[k].value === selectedvalue) {
const newSmallCityItem = citys[j].children[k].value
__tempSmallCity.push(newSmallCityItem)
__tempgb_codes = [citys[j].value]
console.log('index===', i + '--' + j + '--' + k)
// console.log('sendData', sendData)
}
}
// 如果有老城市 往小城市里push 否则 增加一项
var hasOldgb_codes = false,
oldCityIndex
for (var r = 0; r < sendData.length; r++) {
if (sendData[r].gb_codes && sendData[r].gb_codes[0] === __tempgb_codes[0]) {
hasOldgb_codes = true
oldCityIndex = r
} else {
hasOldgb_codes = false
}
}
// 如果 有小城市被选择 再push 或者合并小城市
if (__tempSmallCity.length > 0) {
if (hasOldgb_codes) {
sendData[oldCityIndex].service_area.push(__tempSmallCity[0])
} else {
sendData.push({
gb_codes: __tempgb_codes,
service_area: __tempSmallCity
})
}
}
}
}
}
return sendData
}
因为treedata接收的为一个数组所以我们也要对获取到的数据进行操作
export function transCityArray (selecteds) {
if (!Array.isArray(selecteds)) {
return []
}
const cityArr = []
for (var i = 0; i < selecteds.length; i++) {
// 当子城市存在时进入循环
if (selecteds[i].service_area) {
for (var j = 0; j < selecteds[i].service_area.length; j++) {
cityArr.push(Number(selecteds[i].service_area[j]))
}
}
}
return cityArr
}
网友评论