小程序选择器展现树形表结构数据

树形结构以地区为例,省市区三级联动。这里为什么不用现成的组建呢,因为客户的业务范围比较小(黑人脸)。

我这里写成了一个组件。

wxml:

<view class="section">
  <picker mode="multiSelector" bindchange="PickerChange" bindcolumnchange="ColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
    <input class='well-text' type='text' placeholder='点击选择地区' value='{{region}}' disabled='true'></input>
  </picker>
</view>

wxss:

.well-text{
  height: 60rpx;
  border-bottom: 1px solid #d7dce0;
  box-sizing: border-box;
}

js:

// pages/template/region.js
var appInstance = getApp();

//获取客户地区
var GetKHDQ = function (that) {
  appInstance.post(
    "SYS_DOOPENDATA", [{
      "TYPE": "OPEN",
      "TABLENAME": "KHDQ",
      "FIELDNAME": "KHDQ_DQID, KHDQ_DQMC, KHDQ_MJBZ, KHDQ_FDQID",
      "WHERE": "",
      "ORDER": "KHDQ_DQID"
    }],
    function (res) {
      if (res.data[0].RESULT == 'Y') {
        // console.log(res.data);
        var AreaJson = [];
        var tprovince = [];var tprovinceid = [];
        var tcity = [];var tcityid = [];
        var tarea = [];var tareaid = [];
        for(var i = 1; i<res.data.length;i++){
          AreaJson.push(res.data[i]);
          if (res.data[i].KHDQ_FDQID == 0){
            tprovince.push(res.data[i].KHDQ_DQMC.trim());   //获取省的名称
            tprovinceid.push(res.data[i].KHDQ_DQID.trim()); //获取省的id
          }
        }
        wx.setStorageSync('AreaJson', AreaJson);   //将查询出来的数据放入缓存
        that.setData({
          province: tprovince,
          provinceid: tprovinceid
        });
        GetCity(that,'');
        return;
      } else {
        wx.showToast({
          title: res.data[1].ERRINFO,
          icon: 'none',
          duration: 2000
        });
        return;
      }
    },
    function (xhr, type, errorThrown) {
      return;
    },
  );
}
//获取城市
var GetCity = function(that,provinceindex){
  var AreaJson = wx.getStorageSync('AreaJson');
  var tprovinceid = that.data.provinceid;
  var provincefirstid = tprovinceid[0];
  var tcity = [];var tcityid = [];
  if (provinceindex){
    for (var i = 0; i < AreaJson.length; i++) {           //根据省的id获取地级市
      if (AreaJson[i].KHDQ_FDQID == provinceindex) {
        tcity.push(AreaJson[i].KHDQ_DQMC.trim());
        tcityid.push(AreaJson[i].KHDQ_DQID.trim());
      }
    }
    // console.log([that.data.multiIndex[0],0,0]);
    that.setData({
      city: tcity,
      cityid: tcityid,
      multiIndex: [that.data.multiIndex[0], 0, 0]
    });
    GetArea(that, '');
  }else{
    for (var i = 0; i < AreaJson.length; i++) {
      if (AreaJson[i].KHDQ_FDQID == provincefirstid) {
        tcity.push(AreaJson[i].KHDQ_DQMC.trim());
        tcityid.push(AreaJson[i].KHDQ_DQID.trim());
      }
    }
    that.setData({
      city: tcity,
      cityid: tcityid
    });
    GetArea(that, '');
  }
}
//获取地区
var GetArea = function(that,cityindex){
  var AreaJson = wx.getStorageSync('AreaJson');
  var tcityid = that.data.cityid;
  var cityfirstid = tcityid[0];
  var tarea = []; var tareaid = [];
  if (cityindex){
    for (var i = 0; i < AreaJson.length; i++) {     //根据地级市的id获取区
      if (AreaJson[i].KHDQ_FDQID == cityindex) {
        tarea.push(AreaJson[i].KHDQ_DQMC.trim());
        tareaid.push(AreaJson[i].KHDQ_DQID.trim());
      }
    }
    that.setData({
      area: tarea,
      areaid: tareaid,
      multiIndex: [that.data.multiIndex[0], that.data.multiIndex[1], 0]
    });
  }else{
    for (var i = 0; i < AreaJson.length; i++) {
      if (AreaJson[i].KHDQ_FDQID == cityfirstid) {
        tarea.push(AreaJson[i].KHDQ_DQMC.trim());
        tareaid.push(AreaJson[i].KHDQ_DQID.trim());
      }
    }
    that.setData({
      area: tarea,
      areaid: tareaid
    });
  }
  SelectArea(that);
}

var SelectArea = function(that,areaindex){
  var multiArrayTemp = [that.data.province, that.data.city, that.data.area];
  var multiArrayid = [that.data.provinceid, that.data.cityid, that.data.areaid];
  var khdqid = '';
  var khdqmc = '';
  var khdqmctemp = '';
  for (var i = 0; i < multiArrayid.length; i++) {
    if (multiArrayid[i][that.data.multiIndex[i]]) {
      khdqid = multiArrayid[i][that.data.multiIndex[i]];
      khdqmctemp = multiArrayTemp[i][that.data.multiIndex[i]];
      khdqmc = khdqmc + khdqmctemp;
    }
  }
  // console.log(khdqid);
  that.setData({
    khdqid: khdqid,
    khdqmc: khdqmc,
    multiArray: multiArrayTemp
  })
  // console.log(that.data.khdqid);
  // that.triggerEvent('btnconfirm', { khdqid, khdqmc });//传值到主页面
  // console.log(that.data.multiArray);
}

Component({
  /*组件的生命周期*/
  lifetimes: {
    attached() {
      var that = this;
      GetKHDQ(that);
    },
    detached() {
      // 在组件实例被从页面节点树移除时执行
    },
  },
  // 以下是旧式的定义方式,可以保持对 <2.2.3 版本基础库的兼容
  attached() {
    var that = this;
    GetKHDQ(that);
  },
  detached() {
    // 在组件实例被从页面节点树移除时执行
  },
  /**
   * 组件的初始数据
   */
  data: {
    region:'',
    tykhdqid:'',
    province: [], provinceid: [], city: [], cityid: [], area: [], areaid: [],
    multiArray: [],
    multiIndex: [0, 0, 0],
  },
  /**
   * 组件的方法列表
   */
  methods: {
    PickerChange: function (e) {
      // console.log('picker发送选择改变,携带值为', e.detail.value)
      var khdqid = this.data.khdqid;
      var khdqmc = this.data.khdqmc;
      this.setData({
        region: this.data.khdqmc,
        multiIndex: e.detail.value
      });
      this.triggerEvent('btnconfirm', { khdqid, khdqmc });//将地区id和地区名称传递到主页面
    },
    //多列选择器,某一列的值改变时触发事件
    ColumnChange: function (e) {
      // console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
      var data = {
        multiArray: this.data.multiArray,
        multiIndex: this.data.multiIndex
      };
      data.multiIndex[e.detail.column] = e.detail.value;
      switch (e.detail.column) {
        case 0:
          var provinceindex = this.data.provinceid[this.data.multiIndex[0]];
          GetCity(this, provinceindex);
          break;
        case 1:
          var cityindex = this.data.cityid[this.data.multiIndex[1]];
          GetArea(this, cityindex);
          break;
        case 2:
          var areaindex = this.data.areaid[this.data.multiIndex[2]];
          SelectArea(this,areaindex);
      }
      // console.log(this.data.multiArray);
    },
  }
})

json:

{

"usingComponents": {}

}

 

组件引用根据你的实际情况来。

组件调用方式文档里很详细。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值