美文网首页
antd treeSelect保存为对象格式

antd treeSelect保存为对象格式

作者: ChildofGod_2ca9 | 来源:发表于2019-03-07 13:51 被阅读0次

    场景:

    原业务场景: 是在一个城市里选择区域 ,因为城市可控, 所以只用进行区域选择 默认传给后端一个城市还有选中的区域存放在数组中 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

    }

    相关文章

      网友评论

          本文标题:antd treeSelect保存为对象格式

          本文链接:https://www.haomeiwen.com/subject/jhjcpqtx.html