uni-app接省市区接口

这段代码展示了如何使用uni-app框架动态获取并显示省市区数据,并实现多列选择器(picker)的联动效果。在用户选择不同级别的行政区域时,通过API请求更新下级区域数据。同时,提供了`bindMultiPickerColumnChange`和`bindMultiPickerChange`两个事件处理函数,分别处理滑动和选择变化。
摘要由CSDN通过智能技术生成

HTML:

	<!-- 省市区 -->
      <view class="input-item">
        <picker
          mode="multiSelector"
          @columnchange="bindMultiPickerColumnChange"
          :value="regionIndex"
          :range="regionArray"
          @change="bindMultiPickerChange"
          range-key="area_name"
        >
          <view
            class="uni-input"
            v-if="provinceName != '' ||cityName!=''|| areaName!=''"
          >{{provinceName}} {{cityName}} {{areaName}}</view>
          <view class="default" v-else>请选择收货地区</view>
        </picker>
      </view>
	<!-- 省市区 end -->

js

const host = "https://d170.ichuk.com";
export default {
  components: { bar },
  data() {
    return {
      // 省
      provinceArray: [],
      provinceID: "",
      provinceName: "",
      // 市
      cityArray: [],
      cityID: "",
      cityName: "",
      // 区
      areaArray: [],
      areaID: "",
      areaName: "",
      // 省市区集合 - 多列选择地区数据
      regionArray: [],
      // 省市区集合下标 - 多列选择值数据
      regionIndex: [0, 0, 0],
    };
  },
  methods: {
    /**
     * 初始化区域数据
     */
    initRegionData: function () {
      var that = this;
      // 省
      uni.request({
        method: "get",
        header: {
          "Content-Type": "application/x-www-form-urlencoded",
          "Auth-Token": uni.getStorageSync("Auth-Token") || "",
        },
        data: {
          type: 1,
          id: 0,
        },
        url: host + "/api/region",
        success: (res) => {
          if (res.data.errCode == 0 && res.data.data.length > 0) {
            that.provinceArray = res.data.data;
            // 市
            uni.request({
              method: "get",
              header: {
                "Content-Type": "application/x-www-form-urlencoded",
                "Auth-Token": uni.getStorageSync("Auth-Token") || "",
              },
              data: {
                type: 1,
                id: res.data.data[0].id,
              },
              url: host + "/api/region",
              success: (res) => {
                if (res.data.errCode == 0 && res.data.data.length > 0) {
                  that.cityArray = res.data.data;
                }
                // 区
                uni.request({
                  method: "get",
                  header: {
                    "Content-Type": "application/x-www-form-urlencoded",
                    "Auth-Token": uni.getStorageSync("Auth-Token") || "",
                  },
                  data: {
                    type: 1,
                    id: res.data.data[0].id,
                  },
                  url: host + "/api/region",
                  success: (res) => {
                    if (res.data.errCode == 0 && res.data.data.length > 0) {
                      that.areaArray = res.data.data;
                      // 省市区集合
                      that.regionArray = [
                        that.provinceArray,
                        that.cityArray,
                        that.areaArray
                      ];
                    }
                  },
                });
              },
            });
          }
        },
      });
    },

    // 省市区 picker 滑动事件
    bindMultiPickerColumnChange: function (e) {
      var that = this;
      var data = {
        regionArray: that.regionArray,
        regionIndex: that.regionIndex,
      };
      data.regionIndex[e.detail.column] = e.detail.value;
      switch (e.detail.column) {
				case 0: //滑动省
          uni.request({
            method: "get",
            header: {
              "Content-Type": "application/x-www-form-urlencoded",
              "Auth-Token": uni.getStorageSync("Auth-Token") || "",
            },
            data: {
              type: 1,
              id: that.regionArray[0][e.detail.value].id,
            },
            url: host + "/api/region",
            success: (res) => {
              if (res.data.errCode == 0) {
								that.regionArray[1] = res.data.data;
								that.cityArray = res.data.data;
								that.regionIndex[1] = 0;
                uni.request({
                  method: "get",
                  header: {
                    "Content-Type": "application/x-www-form-urlencoded",
                    "Auth-Token": uni.getStorageSync("Auth-Token") || "",
                  },
                  data: {
                    type: 1,
                    id: that.regionArray[1][0].id,
                  },
                  url: host + "/api/region",
                  success: (res) => {
                    if (res.data.errCode == 0) {
											that.regionArray[2] = res.data.data;
											that.areaArray = res.data.data;
											that.regionIndex[2] = 0;
											that.regionArray = [
                        that.provinceArray,
                        that.cityArray,
                        that.areaArray
											];
                      // that.setData(data);
                    }
                  },
                });
              }
            },
					});
					
          break;
        case 1: //滑动市
          uni.request({
            method: "get",
            header: {
              "Content-Type": "application/x-www-form-urlencoded",
              "Auth-Token": uni.getStorageSync("Auth-Token") || "",
            },
            data: {
              type: 1,
              id: that.regionArray[1][e.detail.value].id,
            },
            url: host + "/api/region",
            success: (res) => {
              if (res.data.errCode == 0) {
								that.regionArray[2] = res.data.data;
								that.areaArray = res.data.data;
								that.regionIndex[2] = 0;
								that.regionArray = [
                  that.provinceArray,
                  that.cityArray,
                  that.areaArray
								];
                // that.setData(data);
              }
            },
          });
          break;
        case 2:
          // that.setData(data);
					that.regionArray = [
						that.provinceArray,
						that.cityArray,
						that.areaArray
					];
          break;
      }
      // this.$forceUpdate();
    },

    // 省市区 change事件 -- picker 确定事件
    bindMultiPickerChange(e) {
      console.log(e.detail.value);
      var that = this;
      that.provinceID = that.regionArray[0][e.detail.value[0]].id;
      that.cityID = that.regionArray[1][e.detail.value[1]].id;
      that.areaID = that.regionArray[2][e.detail.value[2]].id;
      that.regionIndex = e.detail.value;
      that.provinceName = that.regionArray[0][e.detail.value[0]].area_name;
      that.cityName = that.regionArray[1][e.detail.value[1]].area_name;
      that.areaName = that.regionArray[2][e.detail.value[2]].area_name;
    },


  },
  /**
   *  监听页面加载
   */
  onLoad() {},
  /**
   *  监听页面显示
   */
  onShow() {

		// 渲染地址数据
    this.initRegionData();
  },
};

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值