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

筛选功能:只能单选(如需多选需要添加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.xdnf.cn/news/15687.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Liunx:共享内存

共享内存是实现进程间通信的又一个策略。 与管道在逻辑上相似&#xff0c;用户可以向OS申请&#xff0c;在物理内存中开辟一块空间&#xff0c;OS开辟并向上层返回这块空间的起始地址。需要通信的双方将这块空间通过页表映射&#xff0c;各自的挂载到自己进程地址空间的共享区。…

STM32 创建一个工程文件(寄存器、标准库)

首先到官网下载对应型号的固件包&#xff1a; 像我的STM32F103C8T6的就下载这个&#xff1a; 依次打开&#xff1a; .\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 可以看到&#xff1a; 这…

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

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

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

ArkUI---使用弹窗---@ohos.promptAction (弹窗)

promptAction.showToast&#xff08;文本提示框&#xff09; showToast(options: ShowToastOptions): void 创建并显示文本提示框&#xff0c;想看官方文档请点我 ShowToastOptions相关参数请点我 完整代码&#xff1a; import { promptAction } from kit.ArkUIEntry Componen…

leetcode104:二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输出…

CSS 语法规范

基本语法结构 CSS 的基本语法结构包含 选择器 和 声明块,两者共同组成 规则集。规则集可以为 HTML 元素设置样式,使页面结构和样式实现分离,便于网页的美化和布局调整。 CSS 规则集的结构如下: selector {property: value; }选择器(Selector) 选择器用于指定需要应用…

使用 Python 脚本在 Ansys Mechanical 中创建用于后处理的螺栓工具

介绍 由螺栓连接定义的接头在工业应用中非常普遍。在 Ansys Mechanical FEA 中分析它们是一种非常常见的做法。通过Object Generator或Bolt Tools Add-on&#xff0c;使用线体、梁连接甚至3D实体中的梁单元&#xff0c;在Ansys Mechanical中生成螺栓连接非常容易。定义螺栓联接…

【Excel】数据透视表分析方法大全

数据透视表的最常用的功能是分类汇总&#xff0c;其实它还有很强大的数据分析功能。在数据透视表右键菜单的值显示方式中&#xff0c;可以看到有14个很实用的分析选项。 1、总计的百分比 作用&#xff1a;透视表中每一个数字&#xff08;包括汇总行、总计行&#xff09;占右…

电子工牌独立双通道定向拾音方案(有视频演示)

现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…

Dubbo 3.x源码(25)—Dubbo服务引用源码(8)notify订阅服务通知更新

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了接口级的服务引入订阅的refreshInterfaceInvoker方法&#xff0c;当时还有最为关键的notify服务通知更新的部分源码没有学习&#xff0c;本次我们来学习notify通知本地服务更新的源码。 Dubb…

Linux基础1

Linux基础1 Linux基础1学习笔记 ‍ 声明&#xff01; ​​​学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他…

WSL2安装Ubuntu22.04并开启GPU进行ML学习教程

文章目录 一 启用 WSL2二、安装 Ubuntu三 安装 NVIDIA GPU 驱动和 CUDA 工具四、安装pytouch运行环境 这几天一直在研究下&#xff0c;怎么在笔记本win11电脑上安装linux系统用于机器学习、深度学习、大模型等相关的研究&#xff0c;前面试了VMWARE、HYPER-V等方式&#xff0c;…

用 Python 从零开始创建神经网络(七):梯度下降(Gradient Descent)/导数(Derivatives)

梯度下降&#xff08;Gradient Descent&#xff09;/导数&#xff08;Derivatives&#xff09; 引言1. 参数对输出的影响2. 斜率&#xff08;The Slope&#xff09;3. 数值导数&#xff08;The Numerical Derivative&#xff09;4. 解析导数&#xff08;The Analytical Derivat…

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

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

Java结合ElasticSearch根据查询关键字,高亮显示全文数据。

由于es高亮显示机制的问题。当全文内容过多&#xff0c;且搜索中标又少时&#xff0c;就会出现高亮结果无法覆盖全文。因此需要根据需求手动替换。 1.根据es的ik分词器获取搜索词的分词结果。 es部分&#xff1a; //中文分词解析 post /_analyze {"analyzer":"…

一觉睡醒,全世界计算机水平下降100倍,而我却精通C语言——scanf函数

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Fei Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节我们主要来学习scanf的基本用法&#xff0c;了解scanf返回值&#xff0c;懂得scanf占位符和…

Kafka一些常用的命令行操作【包含主题命令、生产者和消费者命令】

文章目录 1、主题命令2、生产者命令行操作3、消费者命令行操作 1、主题命令 查看当前服务器中的所有 topic&#xff1a; kafka-topics.sh --bootstrap-server node01:9092 --list 创建topic&#xff1a; kafka-topics.sh --bootstrap-server node01:9092 --create --topic to…

基于物联网的温室大棚控制系统

本设计采用物联网方案&#xff0c;用STM32f103c8t6作为主控芯片&#xff0c;采用DHT11作为温湿度传感器&#xff0c;采集CO2使用JW01-CO2-V2.2传感器模块&#xff0c;并且通过BH1750传感器模块采集光照&#xff0c;通过土壤湿度传感器来获取大棚内部土壤湿度&#xff0c;ESP-01…

Ubuntu24安装配置NDK

1、下载NDK 下载压缩包&#xff0c;下载地址如下&#xff0c;建议下载LTS支持版本。 https://developer.android.google.cn/ndk/downloads?hlcs 2、解压缩 将NDK解压到指定文件夹。如&#xff1a;/opt 或者先解压&#xff0c;再移动到指定目录下。 3、配置环境变量 找到…