微信picker組件-省市區(qū)聯(lián)動(dòng)

效果圖

image.png

html

<view class="item">
                    <view class="name">選擇地區(qū)</view>
                    <picker
                        class="input"
                        mode="multiSelector"
                        :range="regionList"
                        range-key="value"
                        @change="bindRegionChange"
                        @columnchange="bindMultiPickerColumnChange"
                        :value="areaIndex"
                    >
                        <view v-if="addressDetail.addressArea">
                            {{ addressDetail.addressProvince }}{{ addressDetail.addressCity
                            }}{{ addressDetail.addressArea }}
                        </view>
                        <view v-else class="placeholder">請選擇收貨地址</view>
                    </picker>
                    <image class="arrow" src="../../static/img/gray-right-icon.png"></image>
                </view>

js

    /**
     * 省市區(qū)下標(biāo)
     */
    areaIndex: Array<number> = [0, 0, 0];

    /**
     * 地區(qū)列表
     */
    regionList: Region[][] = [];

    /**
     * 省
     */
    addressProvince: Region[] = [];

    /**
     * 市
     */
    addressCity: Region[] = [];

    /**
     * 區(qū)
     */
    addressArea: Region[] = [];

    /**
     * 獲取省市區(qū)
     */
    async getRegion() {
        const res = await Service.getRegion();
        this.addressProvince = res;
        this.addressCity = res[0].children;
        this.addressArea = res[0].children[0].children;
        this.regionList = [this.addressProvince, this.addressCity, this.addressArea];
    }

   /**
     * 地區(qū)回顯邏輯-(獲取地址詳情后調(diào)用)
     */
    addressShow() {
        let provinceIndex = this.addressProvince.findIndex(
            (item) => item.id === this.addressDetail.addressProvinceCode,
        );
        this.addressCity = this.addressProvince[provinceIndex].children;
        let cityIndex = this.addressCity.findIndex((item) => item.id === this.addressDetail.addressCityCode);
        this.addressArea = this.addressCity[cityIndex].children;
        let areaIndex = this.addressArea.findIndex((item) => item.id === this.addressDetail.addressAreaCode);
        this.areaIndex = [provinceIndex, cityIndex, areaIndex];
        this.regionList = [this.addressProvince, this.addressCity, this.addressArea];
        this.area = [
            this.addressDetail.addressProvince,
            this.addressDetail.addressCity,
            this.addressDetail.addressArea,
        ];
        this.addressUser = this.addressDetail.addressUser;
    }

   /**
     * 地區(qū)change事件
     * @param e 事件對象
     */
    bindRegionChange(e: any) {
        this.areaIndex = e.detail.value;
        this.addressDetail.addressProvinceCode = this.addressProvince[this.areaIndex[0]].id;
        this.addressDetail.addressProvince = this.addressProvince[this.areaIndex[0]].value;
        this.addressDetail.addressCityCode = this.addressCity[this.areaIndex[1]].id;
        this.addressDetail.addressCity = this.addressCity[this.areaIndex[1]].value;
        this.addressDetail.addressAreaCode = this.addressArea[this.areaIndex[2]].id;
        this.addressDetail.addressArea = this.addressArea[this.areaIndex[2]].value;
    }

    /**
     * 列改變觸發(fā)
     */
    bindMultiPickerColumnChange(e) {
        if (e.detail.column === 0) {
            this.addressCity = [];
            this.addressCity = this.addressProvince[e.detail.value].children;
            this.addressArea = this.addressCity[0].children;
        }
        if (e.detail.column === 1) {
            this.addressArea = this.addressCity[e.detail.value].children;
        }
        this.regionList = [this.addressProvince, this.addressCity, this.addressArea];
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容