# address_popup
**Repository Path**: touchx_admin/address_popup
## Basic Information
- **Project Name**: address_popup
- **Description**: 1、mint-ui导入;2、省市区json数据获取;3、省市区三级联动
- **Primary Language**: 其他
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 8
- **Created**: 2022-11-25
- **Last Updated**: 2022-11-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
@[TOC](目录)
### 前言
最近在学习开发H5产品,想用【mint-ui】的Picker和Popup组件去创建一个地址选择器。发现mint-ui官网只有一个简单的示例,要满足省/市/区三级联动的需求还需要做很多事情,也找了很多相关文档也没有一个比较系统的说明或demo。为此,在这里做了一个比较系统总结,上传一个实现的demo,方便以后使用。
### 一、构建项目
在写demo前,首先需要构建一个空项目,并做好局域网配置,还不懂的可以先看【[vue.js/nuxt.js:IP端口/局域网配置](https://blog.csdn.net/weixin_38633659/article/details/83619785)】这片文档,里面有完整的实现方法。
### 二、引入mint-ui
1、**在terminal上安装mint-ui**
```terminal
npm install mint-ui -save
```

2、**注册**
在【plugins】文件夹中创建【mint-ui.js】文件,并在改文件注册mint-ui:
```js
import Vue from 'vue'
import MintUI from 'mint-ui'
import 'mint-ui/lib/style.css'
Vue.use(MintUI)
```
见下图:

3、**配置**
在【nuxt.config.js】中作如下配置:
```js
css: [
'mint-ui/lib/style.css',
],
plugins: [
{src: '~plugins/mint-ui'},
],
```
见下图:

### 三、下载省/市/区的json数据
根据中华人民共和国行政区划分:省级(省份直辖市自治区)、 地级(城市)、 县级(区县)、 乡级(乡镇街道)、 村级(村委会居委会) ,可分**省市区镇村**三级四级五级联动,其地址数据可见
GitHub:https://github.com/modood/Administrative-divisions-of-China
这里我只获取省/市/区三个联动等级的地址文件,并将其导入【static.stRegion】的文件夹中:

### 四、省/市/区联动
#### 1、获取地址文件数据
以上是准备阶段,接下来才进入主题。这里先实现获取省市区的数据,首先创建一个叫【zmRegion.js】的文件类:

将实现方法写在【zmRegion.js】的文件中:
```js
//引入省市区数据json文件
import provinces from '../../static/stcRegion/provinces';
import cities from '../../static/stcRegion/cities';
import areas from '../../static/stcRegion/areas';
export function zmGetProvincesArr() {
let provinceArr = [];
provinces.forEach(function (item) {
let obj = {};
obj.name = item.name;
obj.code = item.code;
provinceArr.push(obj);
});
return provinceArr;
}
export function zmGetCitiesArr(provinceCode) {
console.log("省:" + provinceCode);
if (!provinceCode){
provinceCode = '11'
}
let cityArr = [];
cities.forEach(function (item) {
if (item.provinceCode == provinceCode) {
let obj = {};
obj.name = item.name;
obj.code = item.code;
obj.provinceCode = item.provinceCode;
cityArr.push(obj);
}
});
return cityArr;
}
export function zmGetAreaArr(cityCode) {
console.log("市:" + cityCode);
if (!cityCode){
cityCode = '1101'
}
let areaArr = [];
areas.forEach(function (item) {
if (item.cityCode == cityCode) {
let obj = {};
obj.name = item.name;
obj.code = item.code;
obj.provinceCode = item.provinceCode;
obj.cityCode = item.cityCode;
areaArr.push(obj);
}
});
return areaArr;
}
```
#### 2、选择器组件化
获取数据后,就要想办法将其显示在页面上,考虑到地址选择器是一个比较独立的功能,将其写成一个组件,方便使用的时候直接引入。这里我在【components.compntTools】的文件夹中,创建了一个【addressPopupTool.vue】的文件:

其实现方法如下:
```html
```
#### 3、调用组件
基础准备都做好之后,接下来就是调用组件,实现地址选择器:

其实现方法如下:
```html
```
做完上面的所有步骤之后,就大功告成了。让我们来看一下项目的运行结果:

### 四、demo下载
1、[Gitee下载](https://gitee.com/chenzm_186/address_popup)
2、[GitHub下载](https://github.com/chzm/address_popup)
3、[CSDN资源下载](https://download.csdn.net/download/weixin_38633659/10759034)
啦啦啦~是不是很赞,喜欢的话**~~欢迎点赞~~**
**参考链接:**
1、[vue.js+mint-ui的Popup组件和Picker组件实现省市县三级联动功能](https://blog.csdn.net/lzw_1994/article/details/79981166)