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();
},
};