小程序php:省市区三级联动

2024-03-23 16:30

本文主要是介绍小程序php:省市区三级联动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 更多技术可进群交流,定期发技术福利或物品福利,欢迎想秀技术、学技术的朋友加入:

index.js


import { getCity } from '../../api/api.js';data: {region: ['省', '市', '区'],valueRegion: [0, 0, 0],id:0,//地址idcityId:0,district:[],multiArray:[],multiIndex: [0, 0, 0]}/*** 生命周期函数--监听页面加载*/onLoad: function (options) {this.getCityList();},getCityList:function(){let that = this;getCity().then(res=>{that.setData({ district:res.data});that.initialize();})},initialize:function(){let that = this, province = [], city = [], area = [];if (that.data.district.length) {let cityChildren = that.data.district[0].c || [];let areaChildren = cityChildren.length ? (cityChildren[0].c || []) : [];that.data.district.forEach(function (item) {province.push(item.n);});cityChildren.forEach(function (item) {city.push(item.n);});areaChildren.forEach(function (item) {area.push(item.n);});that.setData({multiArray: [province, city, area],});}},bindRegionChange: function (e) {let multiIndex = this.data.multiIndex, province = this.data.district[multiIndex[0]] || { c: [] }, city = province.c[multiIndex[1]] || { v: 0 }, multiArray = this.data.multiArray, value = e.detail.value;console.log(value);console.log(province);this.setData({region: [multiArray[0][value[0]], multiArray[1][value[1]], multiArray[2][value[2]]],cityId: city.v,valueRegion: [0,0,0]});this.initialize();},bindMultiPickerColumnChange:function(e){let that = this, column = e.detail.column, value = e.detail.value, currentCity = this.data.district[value] || { c: [] }, multiArray = that.data.multiArray, multiIndex = that.data.multiIndex;multiIndex[column] = value;switch (column){case 0:let areaList = currentCity.c[0] || { c: [] };multiArray[1] = currentCity.c.map((item)=>{return item.n;});multiArray[2] = areaList.c.map((item)=>{return item.n;});break;case 1:let cityList = that.data.district[multiIndex[0]].c[multiIndex[1]].c || [];multiArray[2] = cityList.map((item)=>{return item.n;});break;case 2:break;}this.setData({ multiArray: multiArray, multiIndex: multiIndex});}

api.js


export function getCity() {return request.get('service/xcx/city_list', { }, { noAuth: true });
}

对应php代码【tp6】

/*** 获取省市区*/public function city_list(){$list = SystemCity::with('children')->field(['city_id', 'name', 'id', 'parent_id'])->where('parent_id', 0)->order('id asc')->select()->toArray();$data = [];foreach ($list as &$item) {$value = ['v' => $item['city_id'], 'n' => $item['name']];if ($item['children']) {foreach ($item['children'] as $key => &$child) {$value['c'][$key] = ['v' => $child['city_id'], 'n' => $child['name']];unset($child['id'], $child['area_code'], $child['merger_name'], $child['is_show'], $child['level'], $child['lng'], $child['lat'], $child['lat']);if (SystemCity::where('parent_id', $child['city_id'])->count()) {$child['children'] = SystemCity::where('parent_id', $child['city_id'])->field(['city_id', 'name', 'id', 'parent_id'])->select()->toArray();foreach ($child['children'] as $kk => $vv) {$value['c'][$key]['c'][$kk] = ['v' => $vv['city_id'], 'n' => $vv['name']];}}}}$data[] = $value;}return json_encode($data);}

对应php模型

<?phpnamespace app\common\model;use app\common\constants\MenuConstant;
use app\common\model\TimeModel;/*** 菜单  model* Class SystemMenus* @package app\admin\model\system*/
class SystemCity extends TimeModel
{/*** 数据表主键* @var string*/protected $pk = 'id';/*** 模型名称* @var string*/protected $name = 'system_city';/*** 获取子集分类查询条件* @return \think\model\relation\HasMany*/public function children(){return $this->hasMany(self::class, 'parent_id', 'city_id')->order('id ASC');}
}

 index.wxml

<form bindsubmit="formSubmit" report-submit='true'>
<view class='addAddress'><view class='list'><view class='item acea-row row-between-wrapper'><view class='name'>姓名</view><input type='text' placeholder='请输入姓名' name='real_name' value="{{userAddress.real_name}}" placeholder-class='placeholder'></input></view><view class='item acea-row row-between-wrapper'><view class='name'>联系电话</view><input type='text' placeholder='请输入联系电话' name="phone" value='{{userAddress.phone}}' placeholder-class='placeholder'></input></view><view class='item acea-row row-between-wrapper'><view class='name'>所在地区</view><picker mode="multiSelector" bindchange="bindRegionChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{valueRegion}}" custom-item="{{customItem}}" range="{{multiArray}}"><view class='acea-row row-between-wrapper'><view class="picker">{{region[0]}},{{region[1]}},{{region[2]}}</view><view class='iconfont icon-dizhi font-color'></view></view></picker></view><view class='item acea-row row-between-wrapper'><view class='name'>详细地址</view><input type='text' placeholder='请填写具体地址' name='detail' placeholder-class='placeholder' value='{{userAddress.detail}}'></input></view></view><button class='keepBnt bg-color' formType="submit">立即保存</button>
</view>
</form>

index.wxss

/* pages/user_address/index.wxss */
.addAddress .list{background-color:#fff;}
.addAddress .list .item{padding:0 30rpx;height:90rpx;border-top:1rpx solid #eee;}
.addAddress .list .item .name{width:195rpx;font-size:30rpx;color:#333;}
.addAddress .list .item input{width:475rpx;font-size:30rpx;}
.addAddress .list .item .placeholder{color:#ccc;}
.addAddress .list .item picker{width:475rpx;}
.addAddress .list .item picker .picker{width:410rpx;font-size:30rpx;}
.addAddress .list .item picker .iconfont{font-size:43rpx;}
.addAddress .default{padding:0 30rpx;height:90rpx;background-color:#fff;margin-top:23rpx;}
.addAddress .default checkbox{margin-right:15rpx;}
.addAddress .keepBnt{width:690rpx;height:86rpx;border-radius:50rpx;text-align:center;line-height:86rpx;margin:50rpx auto;font-size:32rpx;color:#fff;}
.bg-color {background-color: #395f64!important;
}

最后是mysql代码

https://download.csdn.net/download/TiaoZhanJi_Xian/20087538

这篇关于小程序php:省市区三级联动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838901

相关文章

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker