uniapp 选择 省市区 省市 以及 回显

news2024/11/22 20:47:26

在这里插入图片描述
在这里插入图片描述
从gitee仓库可以拿到demo 以及 json省市区 文件
// 这是组件部分

<template>
  <uni-popup ref="popup" type="bottom">
    <view class="popup">
      <view class="picker-btn">
        <view class="left" @click="cancel">取消</view>
        <view class="right" @click="confirm">确定</view>
      </view>
      <picker-view
        :indicator-style="indicatorStyle"
        :value="valueArr"
        @change="bindChange"
      >
        <picker-view-column>
          <view
            class="item"
            v-for="(item, index) in province[0]"
            :key="index"
            >{{ item.name }}</view
          >
        </picker-view-column>
        <picker-view-column v-if="province[1]">
          <view
            class="item"
            v-for="(item, index) in province[1]"
            :key="index"
            >{{ item.name }}</view
          >
        </picker-view-column>
        <picker-view-column v-if="province[2]">
          <view
            class="item"
            v-for="(item, index) in province[2]"
            :key="index"
            >{{ item.name }}</view
          >
        </picker-view-column>
      </picker-view>
    </view>
  </uni-popup>
</template>
<script>
import provinces from "./provinces.json";
import cities from "./cities.json";
import areas from "./areas.json";
export default {
  props: {
    value: {
      type: String,
      default: "",
    },

    twoStage: {
      type: Boolean,
      default: false,
    },
  },
  name: "ZlAddress",
  data() {
    return {
      indicatorStyle: `height: ${Math.round(
        uni.getSystemInfoSync().screenWidth / (750 / 100)
      )}px;`,
      valueArr: [0, 0, 0], // 用于判断当前滑动的是哪一列
      province: [provinces], // 数据列表
    };
  },

  methods: {
    setIndex(i, value) {
      this.$set(this.valueArr, i, value);
    },
    initLoadArea() {
      this.loadCity(provinces[0].code);
    },
    loadCity(code) {
      let children = cities.filter((v) => v.provinceCode == code);
      this.$set(this.province, 1, children);

      if (!this.twoStage) {
        this.loadArea(children[this.valueArr[1]]?.code || children[0].code);
      }
    },
    loadArea(code) {
      this.$set(
        this.province,
        2,
        areas.filter((v) => v.cityCode == code)
      );
    },

    bindChange(e) {
      const val = e.detail.value;
      if (this.valueArr[0] !== val[0]) {
        let code = provinces[val[0]].code;
        this.loadCity(code);
      } else if (this.valueArr[1] !== val[1]) {
        if (!this.twoStage) {
          let code = this.province[1][val[1]].code;
          this.loadArea(code);
        }
      }
      this.valueArr = val;
    },

    confirm() {
      let addressDetail = "";

      if (!this.twoStage) {
        addressDetail = `${this.province[0][this.valueArr[0]].name}-${
          this.province[1][this.valueArr[1]].name
        }-${this.province[2][this.valueArr[2]]?.name}`;
      } else {
        addressDetail = `${this.province[0][this.valueArr[0]].name}-${
          this.province[1][this.valueArr[1]].name
        }`;
      }

      this.$emit("confirm", addressDetail);
    },

    open() {
      this.$refs.popup.open();
      if (!this.value) {
        this.initLoadArea();
      } else {
        this.$nextTick(() => {
          this.echoLoad();
        });
      }
    },

    echoLoad() {
      let val = this.value.split("-");

      let sheng = provinces.findIndex((v) => v.name == val[0]);
      let shengcode = provinces.find((v) => v.name == val[0])?.code;
      this.setIndex(0, sheng);

      let children = cities.filter((v) => v.provinceCode == shengcode);
      this.$set(this.province, 1, children);
      let shi = this.province[1].findIndex((v) => v.name == val[1]);
      let shicode = this.province[1].find((v) => v.name == val[1])?.code;
      this.setIndex(1, shi);

      if (!this.twoStage) {
        let children2 = areas.filter((v) => v.cityCode == shicode);
        this.$set(this.province, 2, children2);
        let qu = this.province[2].findIndex((v) => v.name == val[2]);

        this.setIndex(2, qu);
      }
    },
    cancel() {
      this.$refs.popup.close();
    },
  },
};
</script>

<style lang="scss" scoped>
.popup {
  height: fit-content;
  width: 100%;
  background: #fff;
}

.picker-btn {
  display: flex;
  height: 100rpx;
  width: 100%;
  line-height: 100rpx;
  background: #fff;
  font-size: 34rpx;
  z-index: 1;
  border-bottom: 1rpx solid #f8f8f8;

  .left {
    flex: 1;
    color: #0076ff;
    padding-left: 40rpx;
    box-sizing: border-box;
  }

  .right {
    flex: 1;
    text-align: right;
    padding-right: 40rpx;
    color: #fe4533;
    box-sizing: border-box;
  }
}

picker-view {
  width: 100%;
  height: 500rpx;
  display: relative;
}
.item {
  line-height: 100rpx;
  text-align: center;
}
</style>

// 这是 使用部分

<template>
  <view class="content">
    <div @click="changeAddress">
      {{ address ? address : "请选择省市区" }}
    </div>
    <Address :value="address" @confirm="confirmAddress" ref="address"></Address>

    <div @click="changeAddress2">
      {{ address2 ? address2 : "请选择省市" }}
    </div>
    <Address
      :value="address2"
      @confirm="confirmAddress2"
      ref="address2"
      two-stage
    ></Address>
  </view>
</template>

<script>
import Address from "@/components/address.vue";
export default {
  data() {
    return {
      address: "",
      address2: "",
    };
  },
  components: {
    Address,
  },
  onLoad() {},
  methods: {
    changeAddress() {
      this.$refs.address.open();
    },
    changeAddress2() {
      this.$refs.address2.open();
    },
    confirmAddress(val) {
      console.log(val, "eee");
      this.address = val;
      this.$refs.address.cancel();
    },
    confirmAddress2(val) {
      console.log(val, "eee");
      this.address2 = val;
      this.$refs.address2.cancel();
    },
  },
};
</script>

<style>
.content {
  display: flex;
  flex-direction: column;
  gap: 40rpx;
  padding: 40rpx;
}
</style>

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

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

相关文章

C语言练习.while语句

题目&#xff1a; 1.用C语言编程&#xff0c;运用while语句&#xff0c;写一段简短的代码。 分析&#xff1a; 1.运用while语句要注意&#xff1a;while语句&#xff0c;要设置好退出条件&#xff0c;不然就会造成无限循环的结果&#xff0c;导致程序停不下来。 2.编写代码…

Linux编辑器 - vim

目录 一、vim 的基本概念 1. 正常/普通/命令模式(Normal mode) 2. 插入模式(Insert mode) 3. 末行模式(last line mode) 二、vim 的基本操作 三、vim 正常模式命令集 1. 插入模式 2. 移动光标 3. 删除文字 4. 复制 5. 替换 6. 撤销上一次操作 7. 更改 8. 调至指定…

24.11.20 sevlet2

1.servlet是否线程安全 (线程特性) 线程安全的指标 //1.是否有共享数据 //2.多线程对共享数据做写操作 servlet中 不要创建成员变量 servlet是单实例的 所以成员变量(不加static) 就会在多线程间共享 如果service()方法中 对成员变量有写操作 则线程不安全 servlet中非特殊情…

【编译器】Dev C++建立C语言工程

【编译器】Dev C建立C语言工程 文章目录 [TOC](文章目录) 前言一、创建工程二、添加.c.h三、主函数处理四、在桌面中打开exe文件五、参考资料总结 前言 在使用了很多编译器之后&#xff0c; 要么是太大了&#xff0c; 要么是太新了&#xff0c; 要么是在线编译器&#xff0c;用…

【ArcGIS微课1000例】0132:从多个GIS视角认识与攀登珠穆朗玛峰

文章目录 1. Map Viewer中打开2. 场景查看器中打开3. ArcGIS中打开4. QGIS中打开5. Globalmapper中打开6. ArcGIS Earth中打开官网地址:https://www.arcgis.com/home/item.html?id=504a23373ab84536b7760c0add1e0c1c 1. Map Viewer中打开 以下展示不同底图样式的珠穆朗玛峰壮…

vscode uniapp 微信小程序 view、text、image标签红色波浪线

没修改前的红色波浪线样式 看好多人没解决方法&#xff0c;我的这种反正成功了&#xff0c;解决方法如下&#xff1a;首先降级Vue - Official 为 v2.0.12 选择版本 配置tsconfig.json "vueCompilerOptions": {// experimentalRuntimeMode 已废弃&#xff0c;现调整为…

SCTransNet验证测试

SCTransNet 是PRCV 2024、ICPR 2024 Track 1、ICPR 2024 Track 2 三项比赛冠军方案的 Baseline, 同时也是多个优胜算法的Baselines. Bilibili 视频分享 【工作分享】SCTransNet:面向红外弱小目标检测的空间 - 通道交叉 Transformer_哔哩哔哩_bilibili 极市平台 推文分享 …

电路模型和电路定理(二)

电路元件 是电路中最基本的组成单元。 电阻元件&#xff1a;表示消耗电能的元件 电感元件&#xff1a;表示产生磁场&#xff0c;储存磁场能的元件 电容元件&#xff1a;表示产生电场&#xff0c;储存电场能量的元件 电压源和电流源&#xff1a;表示将其他形式的能量转变成…

2023AE软件、Adobe After Effects安装步骤分享教程

2023AE软件是一款由Adobe公司开发的视频编辑软件&#xff0c;也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用&#xff0c;用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式&#xff0c;具有丰富的插件和预设&#…

AI Large Language Model

AI 的 Large Language model LLM , 大语言模型&#xff1a; 是AI的模型&#xff0c;专门设计用来处理自然语言相关任务。它们通过深度学习和庞大的训练数据集&#xff0c;在理解和生成自然语言文本方面表现出色。常见的 LLM 包括 OpenAI 的 GPT 系列、Google 的 PaLM 和 Meta…

【大数据学习 | Spark】关于distinct算子

只有shuffle类的算子能够修改分区数量&#xff0c;这些算子不仅仅存在自己的功能&#xff0c;比如分组算子groupBy&#xff0c;它的功能是分组但是却可以修改分区。 而这里我们要讲的distinct算子也是一个shuffle类的算子。即可以修改分区。 scala> val arr Array(1,1,2,…

SrpingBoot基础

SpringBoot基本框架中重要常用的包讲解: .idea包和.mvn包框架生成不经常用 src包下主要存放前后端代码: main包下的java包存放的是后端java代码主要负责数据处理 resource包下存放的是配置资源和前端页面,其中static中存放的是前端html网页一般存放静 态资源,templates包…

Spring6 MyBatis

1. 依赖 <dependencies><!-- spring核心--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.14</version></dependency><!-- Resource注解的依赖…

JavaEE专栏介绍

专栏导读 在当今快速发展的信息技术时代&#xff0c;JavaEE作为企业级应用开发的核心技术之一&#xff0c;扮演着至关重要的角色。本“JavaEE”专栏旨在为对JavaEE感兴趣的开发者提供一个全面的学习平台&#xff0c;从基础概念到高级应用&#xff0c;帮助读者深入理解JavaEE框…

互联网数字化商品管理浪潮思考:从信息化到精准运营

目录 一、商品数字化转型面临的现状分析 &#xff08;一&#xff09;运营方向分析 &#xff08;二&#xff09;商品归类分析 二、商品数字化管理建设分析 三、基础建设——商品信息数字化 &#xff08;一&#xff09;商品信息质量数字化的目的 &#xff08;二&#xff0…

一文读懂Redis6的--bigkeys选项源码以及redis-bigkey-online项目介绍

一文读懂Redis6的--bigkeys选项源码以及redis-bigkey-online项目介绍 本文分为两个部分&#xff0c;第一是详细讲解Redis6的--bigkeys选项相关源码是怎样实现的&#xff0c;第二部分为自己对--bigkeys源码的优化项目redis-bigkey-online的介绍。redis-bigkey-online是自己开发的…

随机场模型与命名实体识别:深入理解CRF及其应用

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Qlik Sense QVD 文件

QVD 文件 QVD (QlikView Data) 文件是包含从 Qlik Sense 或 QlikView 中所导出数据的表格的文件。QVD 是本地 Qlik 格式&#xff0c;只能由 Qlik Sense 或 QlikView 写入和读取。当从 Qlik Sense 脚本中读取数据时&#xff0c;该文件格式可提升速度&#xff0c;同时又非常紧凑…

ESP8266 AP模式TCP客户端 电脑手机网络调试助手

1.AP模式TCP客户端和电脑网络调试助手 2.AP模式TCP客户端和手机网络调试助手

Python脚本-linux远程安装某个服务

需求&#xff1a; 某公司因为网站服务经常出现异常&#xff0c;需要你开发一个脚本对服务器上的服务进行监控&#xff1b;检测目标服务器上是否存在nginx软件(提供web服务的软件)&#xff0c;如果不存在则安装(服务器可能的操作系统Ubuntu24/RedHat9)&#xff1b;如果nginx软件…