小程序四级联动(wepy)

简介: 由于 github 上没有基于wepy的4级联动组件,基本上都是原生小程序的写法,我自己改写成了基于wepy的四级联动组件。目的是帮助使用wepy的朋友节省一些时间,毕竟我自己没有找到wepy版本的四级联动组件。

由于 github 上没有基于wepy的4级联动组件,基本上都是原生小程序的写法,我自己改写成了基于wepy的四级联动组件。目的是帮助使用wepy的朋友节省一些时间,毕竟我自己没有找到wepy版本的四级联动组件。下面的代码直接复制到wepy项目中运行即可,代码逻辑很简单,看一下注释基本就理解了,我就不啰嗦了。

    <template>
<picker mode="multiSelector" range="{{multiArray}}" bindcolumnchange="columnchange" value="{{multiIndex}}" bindchange='pickchange'>
    <!-- <view class='right' wx:if="{{multiArray[2][multiIndex[2]] && step == 0}}"> -->
    <view class='right'>
        <text>请选择</text>
    </view>
    <!-- <view class="picker" wx:if="{{multiArray[2][multiIndex[2]] && step == 1}}"> -->
    <view class="picker">
        <text>{{multiArray[0][multiIndex[0]]}} {{multiArray[1][multiIndex[1]]}} {{multiArray[2][multiIndex[2]]}}{{multiArray[3][multiIndex[3]]}}</text>
    </view>
</picker>
    </template>

    <script>
var app = getApp()
import wepy from 'wepy';
import tip from '@/utils/tips';
import city from '@/utils/city';
import api from '@/utils/api';
import {
    goUrl
} from '@/utils/global';
export default class Index extends wepy.page {
    methods = {}
    async onLoad() {
        this.getProvince() // 页面加载后就调用函数 获取省级数据
    };
    data = {
        provinceArr: null, //省名称数组
        provinceList: null, //省数组
        currnetProvinceKey: 0, //当前省下标
        cityArr: null, //城市名称数组
        cityList: null, //城市数组
        currnetCityKey: 0, //当前城市下标
        storeArr: null, //
        storeList: null, //
        currnetStoreKey: 0,
        streetArr: null, //
        streetList: null, //
        multiArray: [], // 三维数组数据
        multiIndex: [0, 0, 0, 0], // 默认的下标
        step: 0, // 默认显示请选择
    }
    getProvince() { // 获取省
        //ajax请求
        let data = [{
                key: '3200',
                value: '江苏',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '江苏2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '江苏',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var provinceList = data // 放在一个数组里面
        var provinceArr = data.map((item) => {
            return item.value
        }) // 获取数据里面的value值,就是只用数据的名称 
        this.multiArray = [provinceArr, [],
            []
        ] // 更新三维数组 更新后长这样 [['江苏省', '福建省'],[],[]]
        this.provinceList = provinceList // 省级原始数据
        this.provinceArr = provinceArr // 省级所有的名称
        var defaultCode = this.provinceList[0].key // 使用第一项当作参数获取市级数据
        if (defaultCode) {
            this.currnetProvinceKey = defaultCode // 保存在当前的省级key
            this.getCity(defaultCode) // 获取市级数据
        }
    }
    getCity(code) { // 获取市级数据
        this.currnetProvinceKey = code // 保存当前选择的市级code
        //用code去请求
        let data = [{
                key: '3200',
                value: '市区1',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '市区2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '市区3',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var cityArr = data.map((item) => {
            return item.value
        })
        var cityList = data
        this.multiArray = [this.provinceArr, this.cityArr, []] // 更新三维数组 更新后长这样 [['江苏省', '福建省'], ['徐州市'], []]
        this.cityList = cityList // 保存下市级原始数据
        this.cityArr = cityArr // 市级所有的名称
        var defaultCode = cityList[0].key // 用第一个获取市数据
        if (defaultCode) {
            this.currnetCityKey = defaultCode // 存下当前选择的城市key
            this.getStore(defaultCode) // 获取市数据
        }
    }
    getStore(code) {
        this.currnetCityKey = code // 更新当前选择的市级key
        let data = [{
                key: '3200',
                value: '南山区1',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '南山区2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '南山区1',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var storeList = data
        var storeArr = data.map((item) => {
            return item.value
        })
        this.multiArray = [this.provinceArr, this.cityArr, storeArr] 
        this.storeList = storeList 
        this.storeArr = storeArr 
        var defaultCode = storeList[0].key 
        if (defaultCode) {
            this.currnetStoreKey = defaultCode // 存下当前选择的城市key
            this.street(defaultCode) 
        }
    }
    street(code) {
        this.currnetStoreKey = code // 更新当前选择的市级key
        let data = [{
                key: '3200',
                value: '街道1',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '街道2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '街道3',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var streetList = data
        var streetArr = data.map((item) => {
            return item.value
        })
        this.multiArray = [this.provinceArr, this.cityArr, this.storeArr, streetArr] 
        this.streetList = streetList 
        this.streetArr = streetArr 
    }
    columnchange(e) { // 滚动选择器 触发的事件
        var column = e.detail.column // 当前改变的列
        var data = {
            multiIndex: JSON.parse(JSON.stringify(this.multiIndex)),
            multiArray: JSON.parse(JSON.stringify(this.multiArray))
        }
        this.multiIndex[column] = e.detail.value; // 第几列改变了就是对应multiIndex的第几个,更新它
        switch (column) { // 处理不同的逻辑
            case 0: // 第一列更改 就是省级的更改
                var currentProvinceKey = this.provinceList[e.detail.value].key
                if (currentProvinceKey != this.currnetProvinceKey) { // 判断当前的key是不是真正的更新了
                    this.getCity(currentProvinceKey) // 获取当前key下面的市级数据
                }
                this.multiIndex[1] = 0 // 将市默认选择第一个
                break;
            case 1: // 市发生变化
                var currentCitykey = this.cityList[e.detail.value].key
                if (currentCitykey != this.currnetCityKey) { 
                    this.getStore(currentCitykey)
                }
                data.multiIndex[2] = 0
                break;
        }
        this.setData(data) // 更新数据
    }
    pickchange(e) {
        this.step = 1, 
            this.multiIndex = e.detail.value // 更新下标字段
    }
    submit() { 
        var storeCode = this.storeList[this.multiIndex.length - 1].key
    }
    events = {};
    async onShow() {};
}
</script>
相关文章
|
小程序 开发者
微信小程序中如何实现省市区街道四级地址级联选择
微信小程序中如何实现省市区街道四级地址级联选择
2300 0
微信小程序中如何实现省市区街道四级地址级联选择
|
27天前
|
小程序 前端开发 关系型数据库
基于Uniapp+php校园小程序,校园圈子论坛系统功能,校园跑腿二手交流功能设计
校园圈子论坛及综合服务平台集成了校园跑腿、兼职信息、外卖团购、闲置交换、租赁服务、表白墙等多功能模块,提供一站式校园生活解决方案。系统采用uniapp前端和PHP后端开发,支持多城市、多学校切换,配备分站式后台管理,确保稳定性和安全性。通过融云IM SDK实现即时通讯功能,增强用户互动与粘性。适用于大学校园、城市及社区圈子,满足多样化需求,提升便捷体验。
|
1月前
|
移动开发 小程序 前端开发
超详细攻略!uniapp陪玩系统,打包陪玩小程序、H5需要注意什么?
陪玩系统的打包过程涵盖APP、小程序和H5平台。APP打包需使用uni-app开发工具,配置项目信息并选择云打包;小程序打包需在微信公众平台注册账号并提交审核;H5打包则直接通过uni-app生成文件并上传至服务器。各平台需注意权限配置、代码规范及充分测试,确保应用稳定性和兼容性。
|
30天前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
27 0
|
3月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
80 0
在线课堂+工具组件小程序uniapp移动端源码
|
4月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
566 3
|
4月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
96 0
微信小程序更新提醒uniapp
|
6月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
155 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
6月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
156 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
|
6月前
|
存储 小程序 JavaScript

热门文章

最新文章