基于uView组件库封装的地址选择弹框组件

在用uniapp做h5页面时,需要一个类似京东的地址选择弹框组件,故基于uView自己动手封装了一个(如若需要做回显,可以绑定v-model,然后监听value的变化;或者直接在调用open方法时从外部传入参数过来,请自行更改)。

组件region-selection页面如下:

<template><u-popup :show="show" :round="10" mode="bottom" @close="close" :closeable="true"><view style="height: 500px"><view><u--text text="所在地区" margin="30rpx 0" size="18" bold align="center"></u--text></view><!-- 当前选中的地区 --><view class="hasSelected"><view v-for="(item, index) in result" :key="index" :class="index === current ? 'item active' : 'item'"@click="resultChange(item, index)">{{ item.label }}</view></view><!-- 地区数据展示区 --><view><u-list showScrollbar height="380px" v-if="!isFail"><u-list-item v-for="(item, index) in list" :key="index"><u-cell @click="listChange" :name="JSON.stringify(item)"><view slot="title"><u--text :suffixIcon="result[current].value === item.dmbm ? 'checkbox-mark' : ''"iconStyle="font-size: 25px;color:#f56c6c;margin-left:30rpx;" :text="item.dmmc"size="18" :bold="result[current].value === item.dmbm"></u--text></view></u-cell></u-list-item></u-list><u-empty v-else mode="data" text="请求失败"><u-button @click="refresh" type="primary" class="mt-20">重新请求</u-button></u-empty></view></view></u-popup>
</template><script>
/*** @Date 2024-03-01* @Description 基于uView(https://www.uviewui.com/components/intro.html)组件封装的地区选择组件*/
import { getXzqhList } from '@/common/api/common';export default {name: 'region-selection',props: {// value: {//     type: Array,//     required: true// }},watch: {// value: {//     immediate: true,//     handler(newValue, oldValue) {//         if (newValue && newValue.length > 0) {//             this.result = newValue;//         } else {//             this.result = [{ label: '请选择', value: '' }]//         }//     }// }},data() {return {show: false,current: 0, //当前在第几层result: [{ label: '请选择', value: '', sjdm: '' }],list: [],isFail: false //控制是否请求失败};},methods: {//打开时展示第一层数据open() {this.show = true;this.current = 0;getXzqhList().then((res) => {this.isFail = false;this.list = res.data || [];}).catch(() => {this.isFail = true;});},//点击城市列表listChange({ name }) {try {const item = JSON.parse(name);this.result.splice(this.current, 1, { label: item.dmmc, value: item.dmbm, sjdm: item.sjdmbm });getXzqhList({ sjdmbm: item.dmbm }).then((res) => {this.isFail = false;this.list = res.data;if (this.list && this.list.length > 0) {//如果还有下一级城市this.result.splice(this.current + 1);this.current++;this.result.splice(this.current, 1, { label: '请选择', value: '', sjdm: '' });} else {//没有下一级城市了this.show = false;this.$emit('ok', this.result);// this.$emit('input', JSON.stringify(this.result));}}).catch(() => {this.isFail = true;});} catch (e) { }},//点击顶部已选择的城市resultChange(item, index) {if (item.value) {this.current = index;getXzqhList({ sjdmbm: item.sjdm }).then((res) => {this.isFail = false;this.list = res.data;}).catch(() => {this.isFail = true;});}},//重新加载refresh() {getXzqhList({ sjdmbm: this.result[this.current].sjdm }).then((res) => {this.isFail = false;this.list = res.data;}).catch(() => {this.isFail = true;});},close() {this.show = false;}}
};
</script><style scoped lang="scss">
.hasSelected {padding-bottom: 20rpx;border-bottom: 1px solid #4b4848;.item {font-size: 20px;display: inline;padding: 0 10rpx;}.active {color: #f56c6c;}
}
</style>

页面中使用:

<template><packPage><packHeader slot="gHeader" center title="新增地址"></packHeader><view slot="gBody" class="content"><view class="contentWrap"><u--form labelPosition="left" :model="form" :rules="formRules" labelWidth="90" ref="formRef"><u-gap height="8" bgColor="#f6f6f8"></u-gap><u-form-item label="所在地区" prop="xzdxzqhName" required @click="openRegion()" borderBottom><u--input v-model="form.xzdxzqhName" border="none" placeholder="请选择地区" readonly></u--input><u-icon name="arrow-right" slot="right"></u-icon></u-form-item><view style="padding: 5px 10px 0 7px"><span style="color: #f56c6c">*</span><span>详细地址</span></view><u-form-item label="" prop="pic1" borderBottom labelWidth="0"><u--textarea v-model="form.xxdz" placeholder="请输入详细地址,如小区、写字楼、门牌号等"></u--textarea></u-form-item></u--form><view style="width: 60%; display: flex; margin: 0 auto; padding: 50rpx 0"><u-button @click="submit" type="primary" shape="circle">提交</u-button></view></view></view><!--选择住址--><regionSelection ref="regionSelect" @ok="confirmRegion"></regionSelection></packPage>
</template><script>
import regionSelection from '@/components/region-selection';
export default {components:{regionSelection},data() {return {form: {}};},methods: {openRegion(){this.$refs.regionSelect.open();},confirmRegion(data){let temp='';data.map(i=>temp+=i.label)this.$set(this.form, 'xzdxzqhName', temp);}}
};
</script>

地址选择组件内部只调用了一个接口,通过传入上级城市代码一层一层调用,第一层接口返回格式如下:

{"code": 200,"msg": "操作成功","data": [{"dmbm": "494","xzqhdm": "110000","dmmc": "北京市","sm": "北京市","dsm": null,"xqm": null,"sjdmbm": "0"},{"dmbm": "2955","xzqhdm": "120000","dmmc": "天津市","sm": "天津市","dsm": null,"xqm": null,"sjdmbm": "0"},{"dmbm": "237","xzqhdm": "130000","dmmc": "河北省","sm": "河北省","dsm": null,"xqm": null,"sjdmbm": "0"},{"dmbm": "1063","xzqhdm": "140000","dmmc": "山西省","sm": "山西省","dsm": null,"xqm": null,"sjdmbm": "0"},]}

效果图如下所示:

基于uView封装的地址选择弹框组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE之多线程

一.认识线程 1.多进程实现并发编程的不足之处&#xff1a; 引入多个进程的核心&#xff1a;实现并发编程&#xff08;c的CGI技术就是通过多进程的方式实现的网站后端开发&#xff09;。因为现在是一个多核cpu的时代&#xff0c;并发编程就是刚需。多进程实现并发编程&#xf…

达梦、金仓、南大、瀚高、优炫:从社区建设看企业技术自信心

正文约950字&#xff0c;预计阅读时间2分钟 国产技术厂商在面对自身产品问题时&#xff0c;往往保持回避态度&#xff0c;不愿公之于众&#xff0c;主要原因有2方面&#xff1a; 1&#xff0c;产品技术层面问题较多&#xff0c;如某些根本性缺陷难以攻克&#xff0c;或问题发…

java找工作之Mybatis(入门及xml配置相关)

Mybatis 学习Mybatis就要学会查看官网&#xff0c;官网地址如下&#xff1a;<MyBatis中文网 > 1、简介 1.1什么是Mybatis MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取…

es6静态分析

静态分析过程发生了什么 静态分析是一种在不运行程序的情况下对代码进行分析的方法。在静态分析过程中&#xff0c;以下是一般情况下会发生的步骤&#xff1a; 词法分析&#xff1a;将原始的源代码拆解成一个个标记或词法单元。词法分析器会扫描代码并将其分解成一系列的词法单…

【Vue3】3-6 : 仿ElementPlus框架的el-button按钮组件实

文章目录 前言 本节内容实现需求完整代码如下&#xff1a; 前言 上节,我们学习了 slot插槽&#xff0c;组件内容的分发处理 本节内容 本小节利用前面学习的组件通信知识&#xff0c;来完成一个仿Element Plus框架的el-button按钮组件实现。 仿造的地址&#xff1a;uhttps://…

预充电阻器选型报告

1. 客户基础条件 预充时间 t≤200ms &#xff0c;电容 C1280uf &#xff0c;电池包最高电压 U410V&#xff0c;预充深度 98% &#xff0c;30 秒内连续预充 15 次。 1.1 现选型号 现选EAK预充电阻额定功率 60W&#xff0c;标称阻值为 35Ω&#xff0c;在 此条件下单次预充…

2.1基本算法之枚举7647:余数相同问题

已知三个正整数 a&#xff0c;b&#xff0c;c。 现有一个大于1的整数x&#xff0c;将其作为除数分别除a&#xff0c;b&#xff0c;c&#xff0c;得到的余数相同。 请问满足上述条件的x的最小值是多少&#xff1f; 数据保证x有解 #include<bits/stdc.h>//万能头 using…

rclone源码解析

rclone会将数据分成3类&#xff1a;srcOnly&#xff0c;dstOnly&#xff0c;match 分类的方法是&#xff0c;先读取当前目录下的源数据&#xff0c;然后以同样的名字去对端查看&#xff0c;如果有的话就放到match&#xff0c;如果只有当前目录有的话就放入srcOnly 然后srcOnl…

Unity 协程(Coroutine)到底是什么?

参考链接&#xff1a;Unity 协程(Coroutine)原理与用法详解_unity coroutine-CSDN博客 为啥在Unity中一般不考虑多线程 因为在Unity中&#xff0c;只能在主线程中获取物体的组件、方法、对象&#xff0c;如果脱离这些&#xff0c;Unity的很多功能无法实现&#xff0c;那么多线程…

红黑树的简单介绍

红黑树 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&#x…

Python类 __init__() 是一个特殊的方法

设计者&#xff1a;ISDF工软未来 版本&#xff1a;v1.0 日期&#xff1a;2024/3/5__init__() 是一个特殊的方法 类似c# C的构造函数 两头都包含两个下划线&#xff0c;这是约定&#xff0c;用于与普通的函数保持区分class User:用户类def __init__(self,first_name,last_name):…

size_t的最大值怎么获取

size_t是一个无符号整数类型&#xff0c;通常用于表示大小和索引。它的确切大小依赖于平台和编译器&#xff0c;但在大多数现代架构上&#xff0c;size_t是根据目标平台的地址空间大小来定义的。这意味着在32位系统上&#xff0c;size_t通常是32位宽&#xff0c;而在64位系统上…

Linux 运维:CentOS/RHEL防火墙和selinux设置

Linux 运维&#xff1a;CentOS/RHEL防火墙和selinux设置 一、防火墙常用管理命令1.1 CentOS/RHEL 7系统1.2 CentOS/RHEL 6系统 二、临时/永久关闭SELinux2.1 临时更改SELinux的执行模式2.2 永久更改SELinux的执行模式 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;…

Finetuning Large Language Models: Sharon Zhou

Finetuning Large Language Models 课程地址&#xff1a;https://www.deeplearning.ai/short-courses/finetuning-large-language-models/ 本文是学习笔记。 Goal&#xff1a; Learn the fundamentals of finetuning a large language model (LLM). Understand how finetu…

STM32(16)使用串口向电脑发送数据

发送字节 发送数组 发送字符和字符串 字符&#xff1a; 字符串&#xff1a; 字符串在电脑中以字符数组的形式存储

CMake 基础学习-认识 CMake 基本语法与应用

CMake 基础学习-认识 CMake 什么是 CMake CMake 是一个跨平台、可扩展的开源脚本系统&#xff0c;它以独立于编译器的方式在操作系统中管理编译、工程文件的生成过程。 在 Linux 中 CMake 生成 Makefile(若是其他平台&#xff0c;则生成对应的编译管理文件) 文件&#xff0c…

ElasticSearch之分布式模型介绍,选主,脑裂

写在前面 本文看下es分布式模型相关内容。 1&#xff1a;分布式模型 1.1&#xff1a;分布式特征 支持水平扩展&#xff0c;可以存储PB级别数据&#xff0c;每个就能都有自己唯一的名称,默认名称时elasticsearch&#xff0c;可以通过配置文件&#xff0c;如cluster.name: my…

canvas签名页面跟着滑动bug

记录一个花了两天时间才解决的bug&#xff0c;过程非常难受&#xff0c;需求是一个阅读合同的小程序界面&#xff0c;在阅读完成后弹出遮罩层进行签名 问题&#xff1a;在弹出层签名的时候遮罩层下面的合同也在跟着滑动&#xff0c;安卓端没有这个问题&#xff0c;真机调试的io…

PowerBI怎么修改数据库密码

第一步&#xff1a;点击转换数据 第二步&#xff1a;点击数据源设置 第三步&#xff1a;点击编辑权限 第四步&#xff1a;点击编辑 第五步&#xff1a;输入正要修改的密码就可以了

STM32启动过程及反汇编

STM32从Flash启动的过程&#xff0c;主要是从上电复位到main函数的过程&#xff0c;主要有以下步骤&#xff1a; 1.初始化堆栈指针 SP_initial_sp&#xff0c;初始化 PC 指针Reset_Handler 2.初始化中断向量表 3.配置系统时钟 4.调用 C 库函数_main 初始化用户堆栈&#xf…