封装一个省市区的筛选组件

筛选功能:只能单选(如需多选需要添加show-checkbox多选框属性,选中省传递省的ID,选中市传递省、市的ID, 选中区传递省市区的ID

 

父组件:

 <el-form-item><div style="width: 240px;padding-left: 20px;border-radius: 4px;color: #c0bdbd;border: 1px solid #d4cece;height: 32px;line-height: 32px;"@click="OrderAreabtn">{{ fullAddress }}</div><OrderArea v-if="OrderAreaVisible" ref="addOrUpdate" @refreshDataList="getDataList"> </OrderArea>
</el-form-item>
import OrderArea from "./orderarea.vue";
components: { OrderArea },
OrderAreaVisible: false,
fullAddress: "请选择地区",
getDataList(row) {console.log("子组件传递回来的数据", row);
},
OrderAreabtn() {this.OrderAreaVisible = true;this.$nextTick(() => {this.$refs.addOrUpdate.init();});
},

子组件:

<template><div class="shop-transcity-add-or-update"><el-dialog:modal="false"title="请选择地区":close-on-click-modal="false":visible.sync="visible"><el-form:model="dataForm"ref="dataForm"@keyup.enter.native="dataFormSubmit()"label-width="180px"style="height: 400px"><el-scrollbar style="height: 100%"><el-form-item size="mini"><el-tree:data="menuList"node-key="areaId"ref="menuListTree":props="menuListTreeProps":show-checkbox="false":check-strictly="true"@node-click="handleNodeClick"></el-tree></el-form-item></el-scrollbar></el-form><span slot="footer" class="dialog-footer"><el-button @click="visible = false">取消</el-button><el-button type="primary" @click="dataFormSubmit()">确定</el-button></span></el-dialog></div>
</template><script>
let treeDataTranslate = (data, id = "id", pid = "parentId") => {var res = [];var temp = {};for (var i = 0; i < data.length; i++) {temp[data[i][id]] = data[i];}for (var k = 0; k < data.length; k++) {if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) {if (!temp[data[k][pid]]["children"]) {temp[data[k][pid]]["children"] = [];}if (!temp[data[k][pid]]["_level"]) {temp[data[k][pid]]["_level"] = 1;}data[k]["_level"] = temp[data[k][pid]]._level + 1;temp[data[k][pid]]["children"].push(data[k]);} else {res.push(data[k]);}}return res;
};
export default {data() {return {visible: false,menuList: [],menuListTreeProps: {children: "children",label: "areaName",id: "areaId",},dataForm: {province: null,area: null,city: null,fullAddress: "",},};},methods: {init() {this.visible = true;this.request({url: "/xxx/area/list",method: "get",params: {pageNum: 1,pageSize: 1000000,},}).then((res) => {//treeDataTranslate()处理数据为树结构,如果你的数据已经是树结构则可直接赋值this.menuList = treeDataTranslate(res.rows, "areaId", "parentId");});},getAreaNameById(areaId) {return this.findAreaName(this.menuList, areaId);},findAreaName(nodes, areaId) {for (let node of nodes) {if (node.areaId === areaId) {return node.areaName;}if (node.children && node.children.length > 0) {const foundName = this.findAreaName(node.children, areaId);if (foundName) {return foundName;}}}return null;},// 获取祖父节点IDgetGrandparentId(node) {const parentNode = this.findParentNode(this.menuList, node.areaId);if (parentNode) {const grandparentNode = this.findParentNode(this.menuList,parentNode.areaId);return grandparentNode ? grandparentNode.areaId : null;}return null;},findParentNode(nodes, areaId) {for (let node of nodes) {if (node.children && node.children.length > 0) {for (let child of node.children) {if (child.areaId === areaId) {return node;}}const foundNode = this.findParentNode(node.children, areaId);if (foundNode) {return foundNode;}}}return null;},handleNodeClick(node) {//选中省if (node.level == 1) {this.dataForm.province = node.areaId;this.dataForm.city = null;this.dataForm.area = null;this.dataForm.fullAddress = node.areaName;}//选中市if (node.level == 2) {this.dataForm.province = node.parentId;this.dataForm.city = node.areaId;this.dataForm.area = null;}//选中区if (node.level == 3) {const grandparentId = this.getGrandparentId(node);if (grandparentId) {this.dataForm.province = grandparentId;} else {console.log("没有找到祖父节点");}if (node.children && node.children.length > 0) {this.dataForm.city = node.areaId;this.dataForm.area = null;} else {this.dataForm.city = node.parentId;this.dataForm.area = node.areaId;}}},// 表单提交dataFormSubmit() {console.log("选中的省市区ID:",this.dataForm.province,this.dataForm.city,this.dataForm.area);const provinceName = this.getAreaNameById(this.dataForm.province);const cityName = this.getAreaNameById(this.dataForm.city);const districtName = this.getAreaNameById(this.dataForm.area);this.dataForm.fullAddress = provinceName; //选中省if (cityName) {//选中市this.dataForm.fullAddress = `${provinceName} ${cityName}`;}if (districtName) {//选中区this.dataForm.fullAddress = `${provinceName} ${cityName} ${districtName}`;}console.log("选中的省市区名称:", this.dataForm.fullAddress);this.$emit("refreshDataList", this.dataForm);this.visible = false;},},
};
</script><style lang="scss">
.shop-transcity-add-or-update {.el-scrollbar__wrap {overflow-x: hidden;}
}
</style>

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

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

相关文章

python制作一个简单的端口扫描器,用于检测目标主机上指定端口的开放状态

import argparse # 用于解析命令行参数 from socket import * # 导入 socket 库的所有内容&#xff0c;用于网络通信 from threading import * # 导入 threading 库的所有内容&#xff0c;用于多线程操作 # 创建一个信号量&#xff0c;初始值为 1&#xff0c;用于线程同步&…

OceanStor Pacific系列 8.1.0 功能架构

功能架构 华为OceanStor Pacific系列提供基于三层的分布式存储架构&#xff0c;融合分布式文件、对象、大数据和块多个服务形态&#xff0c;支持文件、对象、大数据服务部署在一个集群&#xff0c;并统一管理。 华为OceanStor Pacific系列整体功能架构由存储接口层、存储服务…

Flink1.19编译并Standalone模式本地运行

1.首先下载源码 2.本地运行 新建local_conf和local_lib文件夹&#xff0c;并且将编译后的文件放入对应的目录 2.1 启动前参数配置 2.1.2 StandaloneSessionClusterEntrypoint启动参数修改 2.1.3 TaskManagerRunner启动参数修改 和StandaloneSessionClusterEntrypoint一样修改…

高效稳定!新加坡服务器托管方案助力企业全球化布局

在全球化的商业环境中&#xff0c;企业对于高效、稳定的服务器托管方案的需求日益迫切。作为亚洲的服务器托管中心&#xff0c;新加坡凭借其独特的地理位置、稳定的政治环境、先进的科技设施以及开放的市场政策&#xff0c;为企业提供了理想的服务器托管解决方案&#xff0c;助…

JavaWeb后端开发知识储备1

目录 1.DTO/VO/PO 2.MVC架构/微服务架构 3.JWT令牌流程 4.ThreadLocal 5.接口路径/路径参数 1.DTO/VO/PO 1.1 DTO DTO 即 Data Transfer Object—— 数据传输对象&#xff0c;是用于传输数据的对象&#xff0c;通常在服务层与表现层之间传递数据&#xff0c;DTO 通常用于…

StructuredStreaming (一)

一、sparkStreaming的不足 1.基于微批,延迟高不能做到真正的实时 2.DStream基于RDD,不直接支持SQL 3.流批处理的API应用层不统一,(流用的DStream-底层是RDD,批用的DF/DS/RDD) 4.不支持EventTime事件时间&#xff08;一般流处理都会有两个时间&#xff1a;事件发生的事件&am…

信号-3-信号处理

main 信号捕捉的操作 sigaction struct sigaction OS不允许信号处理方法进行嵌套&#xff1a;某一个信号正在被处理时&#xff0c;OS会自动block改信号&#xff0c;之后会自动恢复 同理&#xff0c;sigaction.sa_mask 为捕捉指定信号后临时屏蔽的表 pending什么时候清零&…

软件工程师简历(精选篇)

【#软件工程师简历#】 一份专业而精准的软件工程师简历&#xff0c;不仅能够全面展示技术实力和项目经验&#xff0c;更是赢得理想工作机会的重要敲门砖。那么&#xff0c;如何撰写一份令人印象深刻的软件工程师简历呢&#xff1f;以下是幻主简历整理的软件工程师简历&#xf…

基于springboot的汽车租赁管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

vscode远程连接服务器并启用tmux挂载进程

使用vscode连接远程服务器&#xff0c;有时候由于主机问题&#xff0c;比如中断&#xff0c;断网&#xff0c;超时&#xff0c;重启&#xff0c;关机等等情况&#xff0c;导致进程中断&#xff0c;如果是一个长时间的进程&#xff0c;会很麻烦&#xff0c;毕竟不能长时间一直盯…

设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

前言&#xff1a; 两个本想描述一样的意思的词&#xff0c;只因一字只差就让人觉得一个是好牛&#xff0c;一个好搞笑。往往我们去开发编程写代码时也经常将一些不恰当的用法用于业务需求实现中&#xff0c;但却不能意识到。一方面是由于编码不多缺少较大型项目的实践&#xff…

鸿蒙HarmonyOS 地图不显示解决方案

基于地图的开发准备已完成的情况下&#xff0c;地图还不显式的问题 首先要获取设备uuid 获取设备uuid 安装DevEco Studio的路径下 有集成好的hdc工具 E:\install_tools\DevEco Studio\sdk\default\openharmony\toolchains 这个路径下打开cmd运行 进入“设置 > 关于手机…

【C语言】值传递和地址传递

值传递 引用传递&#xff08;传地址&#xff0c;传引用&#xff09;的区别 传值&#xff0c;是把实参的值赋值给行参 &#xff0c;那么对行参的修改&#xff0c;不会影响实参的值。 传地址&#xff0c;是传值的一种特殊方式&#xff0c;只是他传递的是地址&#xff0c;不是普通…

C语言入门到精通(第六版)——第十六章

16、网络套接字编程 16.1、计算机网络基础 计算机网络技术是计算机技术和通信技术相结合的产物&#xff0c;代表计算机的一个重要发展方向。了解计算机的网络结构&#xff0c;有助于用户开发网络应用程序。 16.1.1、IP地址 为了使网络上的计算机能够彼此识别对方&#xff0c;…

Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件

本文将介绍一种手动的轻量级的方式&#xff0c;还原HTTP/TLS协议中传输的文件&#xff0c;为流量数据包中的文件分析提供帮助。 如果捕获的数据包中存在非文本类文件&#xff0c;例如png,jpg等图片文件&#xff0c;或者word&#xff0c;Excel等office文件异或是其他类型的二进…

记录使用documents4j来将word文件转化为pdf文件

本文记录使用documents4j来将word文件转化为pdf文件 文章目录 程序实例maven导入代码实现程序结果 本文小结 程序实例 maven导入 <!--word转pdf--><dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactI…

SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间

SQL面试题——奔驰SQL面试题 我们的表大致如下 CREATE TABLE signal_log( vin STRING COMMENTvehicle frame id, signal_name STRING COMMENTfunction name, signal_value STRING COMMENT signal value , ts BIGINT COMMENTevent timestamp, dt STRING COMMENTformat yyyy-mm…

使用 unicorn 和 capstone 库来模拟 ARM Thumb 指令的执行(一)

import binascii import unicorn import capstonedef printArm32Regs(mu):for i in range(66,78):print("R%d,value:%x"%(i-66,mu.reg_read(i)))def testhumb():CODE b\x1C\x00\x0A\x46\x1E\x00"""MOV R3, R0 的机器码&#xff1a;0x1C 0x00&#xf…

WordPress 6.7 “Rollins”发布

每个 WordPress 版本都会向一位在音乐界留下不可磨灭印记的艺术家致敬。WordPress 6.7 的代号为“Rollins”&#xff0c;旨在向传奇爵士萨克斯演奏家桑尼罗林斯致敬。罗林斯是爵士乐界最伟大的即兴演奏家和先驱之一&#xff0c;他以精湛的技术、创新精神和无畏的音乐表达方式影…

844.比较含退格的字符串

java用 O&#xff08;1&#xff09;空间这个方法&#xff0c;容易挺多bug的… O&#xff08;1&#xff09;空间 #&#xff1a;删除前一个字符 》 从后面开始判断&#xff08;这样可以用跳过的思想&#xff09;不能使用两次 i- - 来处理 # 的操作&#xff0c;会造成误删了前面…