├── static └── .gitkeep ├── .eslintignore ├── config ├── prod.env.js ├── dev.env.js └── index.js ├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── index.html ├── src ├── main.js ├── utils │ ├── area-producer.js │ └── area-source.json ├── components │ └── area │ │ ├── area-producer.js │ │ ├── area.vue │ │ └── area-source.json └── App.vue ├── README.md ├── .eslintrc.js └── package.json /static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false 5 | }], 6 | "stage-2" 7 | ], 8 | "plugins": ["transform-runtime"] 9 | } 10 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | .vscode 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserslist" field in package.json 6 | "postcss-import": {}, 7 | "autoprefixer": {} 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | area-multi-selection 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import iView from 'iview' 6 | import 'iview/dist/styles/iview.css' 7 | 8 | Vue.config.productionTip = false 9 | Vue.use(iView) 10 | 11 | /* eslint-disable no-new */ 12 | new Vue({ 13 | el: '#app', 14 | render: h => h(App) 15 | }) 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # area-multi-selection 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | ``` 20 | 21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 22 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: true, 11 | }, 12 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 13 | extends: 'standard', 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'html' 17 | ], 18 | // add your custom rules here 19 | rules: { 20 | // allow async-await 21 | 'generator-star-spacing': 'off', 22 | // allow debugger during development 23 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 24 | 'semi': 0, 25 | 'space-before-function-paren': 0, 26 | 'indent': 0 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/utils/area-producer.js: -------------------------------------------------------------------------------- 1 | import areaData from './area-source.json'; 2 | 3 | class AreaProducer { 4 | constructor() { 5 | this.arr = []; 6 | } 7 | 8 | get2LevelArea() { 9 | let parent = areaData['1']; 10 | let parentArr = []; 11 | let pObj = {}; 12 | let cObj = {}; 13 | let tmpObj = {}; 14 | let tmpArr = []; 15 | 16 | for (let i in parent) { 17 | pObj.value = i; 18 | pObj.label = parent[i]; 19 | pObj.checkAll = true; 20 | 21 | pObj.children = areaData[i]; 22 | tmpObj = areaData[i]; 23 | 24 | for (let j in tmpObj) { 25 | cObj.value = j; 26 | cObj.label = tmpObj[j]; 27 | cObj.isCheck = true; 28 | tmpArr.push(cObj); 29 | cObj = {}; 30 | } 31 | 32 | pObj.children = tmpArr; 33 | pObj.childrenCount = tmpArr.length; 34 | pObj.isCheckChildrenCount = tmpArr.length; 35 | 36 | parentArr.push(pObj); 37 | pObj = {}; 38 | cObj = {}; 39 | tmpObj = {}; 40 | tmpArr = []; 41 | } 42 | return parentArr; 43 | } 44 | } 45 | 46 | export default new AreaProducer() 47 | -------------------------------------------------------------------------------- /src/components/area/area-producer.js: -------------------------------------------------------------------------------- 1 | import areaData from './area-source.json'; 2 | 3 | class AreaProducer { 4 | constructor() { 5 | this.arr = []; 6 | } 7 | 8 | get2LevelArea() { 9 | let parent = areaData['1']; 10 | let parentArr = []; 11 | let pObj = {}; 12 | let cObj = {}; 13 | let tmpObj = {}; 14 | let tmpArr = []; 15 | 16 | for (let i in parent) { 17 | pObj.value = i; 18 | pObj.label = parent[i]; 19 | pObj.checkAll = true; 20 | 21 | pObj.children = areaData[i]; 22 | tmpObj = areaData[i]; 23 | 24 | for (let j in tmpObj) { 25 | cObj.value = j; 26 | cObj.label = tmpObj[j]; 27 | cObj.isCheck = true; 28 | tmpArr.push(cObj); 29 | cObj = {}; 30 | } 31 | 32 | pObj.children = tmpArr; 33 | pObj.childrenCount = tmpArr.length; 34 | pObj.isCheckChildrenCount = tmpArr.length; 35 | 36 | parentArr.push(pObj); 37 | pObj = {}; 38 | cObj = {}; 39 | tmpObj = {}; 40 | tmpArr = []; 41 | } 42 | return parentArr; 43 | } 44 | } 45 | 46 | export default new AreaProducer() 47 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 45 | 46 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "area-multi-selection", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "chokingwin <2205405321@qq.com>", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "lint": "eslint --ext .js,.vue src", 11 | "build": "node build/build.js" 12 | }, 13 | "dependencies": { 14 | "iview": "^2.2.0", 15 | "vue": "^2.5.2" 16 | }, 17 | "devDependencies": { 18 | "autoprefixer": "^7.1.2", 19 | "babel-core": "^6.22.1", 20 | "babel-eslint": "^7.1.1", 21 | "babel-loader": "^7.1.1", 22 | "babel-plugin-transform-runtime": "^6.22.0", 23 | "babel-preset-env": "^1.3.2", 24 | "babel-preset-stage-2": "^6.22.0", 25 | "chalk": "^2.0.1", 26 | "copy-webpack-plugin": "^4.0.1", 27 | "css-loader": "^0.28.0", 28 | "eslint": "^3.19.0", 29 | "eslint-config-standard": "^10.2.1", 30 | "eslint-friendly-formatter": "^3.0.0", 31 | "eslint-loader": "^1.7.1", 32 | "eslint-plugin-html": "^3.0.0", 33 | "eslint-plugin-import": "^2.7.0", 34 | "eslint-plugin-node": "^5.2.0", 35 | "eslint-plugin-promise": "^3.4.0", 36 | "eslint-plugin-standard": "^3.0.1", 37 | "eventsource-polyfill": "^0.9.6", 38 | "extract-text-webpack-plugin": "^3.0.0", 39 | "file-loader": "^1.1.4", 40 | "friendly-errors-webpack-plugin": "^1.6.1", 41 | "html-webpack-plugin": "^2.30.1", 42 | "node-notifier": "^5.1.2", 43 | "optimize-css-assets-webpack-plugin": "^3.2.0", 44 | "ora": "^1.2.0", 45 | "portfinder": "^1.0.13", 46 | "postcss-import": "^11.0.0", 47 | "postcss-loader": "^2.0.8", 48 | "rimraf": "^2.6.0", 49 | "semver": "^5.3.0", 50 | "shelljs": "^0.7.6", 51 | "uglifyjs-webpack-plugin": "^1.1.1", 52 | "url-loader": "^0.5.8", 53 | "vue-loader": "^13.3.0", 54 | "vue-style-loader": "^3.0.1", 55 | "vue-template-compiler": "^2.5.2", 56 | "webpack": "^3.6.0", 57 | "webpack-bundle-analyzer": "^2.9.0", 58 | "webpack-dev-server": "^2.9.1", 59 | "webpack-merge": "^4.1.0", 60 | "stylus": "^0.54.5", 61 | "stylus-loader": "^2.1.1" 62 | }, 63 | "engines": { 64 | "node": ">= 4.0.0", 65 | "npm": ">= 3.0.0" 66 | }, 67 | "browserslist": [ 68 | "> 1%", 69 | "last 2 versions", 70 | "not ie <= 8" 71 | ] 72 | } 73 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.2.5 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: 'localhost', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | // Use Eslint Loader? 24 | // If true, your code will be linted during bundling and 25 | // linting errors and warnings will be shown in the console. 26 | useEslint: true, 27 | // If true, eslint errors and warnings will also be shown in the error overlay 28 | // in the browser. 29 | showEslintErrorsInOverlay: false, 30 | 31 | /** 32 | * Source Maps 33 | */ 34 | 35 | // https://webpack.js.org/configuration/devtool/#development 36 | devtool: 'eval-source-map', 37 | 38 | // If you have problems debugging vue-files in devtools, 39 | // set this to false - it *may* help 40 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 41 | cacheBusting: true, 42 | 43 | // CSS Sourcemaps off by default because relative paths are "buggy" 44 | // with this option, according to the CSS-Loader README 45 | // (https://github.com/webpack/css-loader#sourcemaps) 46 | // In our experience, they generally work as expected, 47 | // just be aware of this issue when enabling this option. 48 | cssSourceMap: false, 49 | }, 50 | 51 | build: { 52 | // Template for index.html 53 | index: path.resolve(__dirname, '../dist/index.html'), 54 | 55 | // Paths 56 | assetsRoot: path.resolve(__dirname, '../dist'), 57 | assetsSubDirectory: 'static', 58 | assetsPublicPath: '/', 59 | 60 | /** 61 | * Source Maps 62 | */ 63 | 64 | productionSourceMap: true, 65 | // https://webpack.js.org/configuration/devtool/#production 66 | devtool: '#source-map', 67 | 68 | // Gzip off by default as many popular static hosts such as 69 | // Surge or Netlify already gzip all static assets for you. 70 | // Before setting to `true`, make sure to: 71 | // npm install --save-dev compression-webpack-plugin 72 | productionGzip: false, 73 | productionGzipExtensions: ['js', 'css'], 74 | 75 | // Run the build command with an extra argument to 76 | // View the bundle analyzer report after build finishes: 77 | // `npm run build --report` 78 | // Set to `true` or `false` to always turn it on or off 79 | bundleAnalyzerReport: process.env.npm_config_report 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/components/area/area.vue: -------------------------------------------------------------------------------- 1 | 16 | 108 | 138 | -------------------------------------------------------------------------------- /src/utils/area-source.json: -------------------------------------------------------------------------------- 1 | { 2 | "0": { 3 | "1": "中国" 4 | }, 5 | "1": { 6 | "2": "北京", 7 | "3": "安徽", 8 | "4": "福建", 9 | "5": "甘肃", 10 | "6": "广东", 11 | "7": "广西", 12 | "8": "贵州", 13 | "9": "海南", 14 | "10": "河北", 15 | "11": "河南", 16 | "12": "黑龙江", 17 | "13": "湖北", 18 | "14": "湖南", 19 | "15": "吉林", 20 | "16": "江苏", 21 | "17": "江西", 22 | "18": "辽宁", 23 | "19": "内蒙古", 24 | "20": "宁夏", 25 | "21": "青海", 26 | "22": "山东", 27 | "23": "山西", 28 | "24": "陕西", 29 | "25": "上海", 30 | "26": "四川", 31 | "27": "天津", 32 | "28": "西藏", 33 | "29": "新疆", 34 | "30": "云南", 35 | "31": "浙江", 36 | "32": "重庆", 37 | "33": "香港", 38 | "34": "澳门", 39 | "35": "台湾" 40 | }, 41 | "2": { 42 | "52": "北京" 43 | }, 44 | "3": { 45 | "36": "安庆", 46 | "37": "蚌埠", 47 | "38": "巢湖", 48 | "39": "池州", 49 | "40": "滁州", 50 | "41": "阜阳", 51 | "42": "淮北", 52 | "43": "淮南", 53 | "44": "黄山", 54 | "45": "六安", 55 | "46": "马鞍山", 56 | "47": "宿州", 57 | "48": "铜陵", 58 | "49": "芜湖", 59 | "50": "宣城", 60 | "51": "亳州", 61 | "3401": "合肥" 62 | }, 63 | "4": { 64 | "53": "福州", 65 | "54": "龙岩", 66 | "55": "南平", 67 | "56": "宁德", 68 | "57": "莆田", 69 | "58": "泉州", 70 | "59": "三明", 71 | "60": "厦门", 72 | "61": "漳州" 73 | }, 74 | "5": { 75 | "62": "兰州", 76 | "63": "白银", 77 | "64": "定西", 78 | "65": "甘南", 79 | "66": "嘉峪关", 80 | "67": "金昌", 81 | "68": "酒泉", 82 | "69": "临夏", 83 | "70": "陇南", 84 | "71": "平凉", 85 | "72": "庆阳", 86 | "73": "天水", 87 | "74": "武威", 88 | "75": "张掖" 89 | }, 90 | "6": { 91 | "76": "广州", 92 | "77": "深圳", 93 | "78": "潮州", 94 | "79": "东莞", 95 | "80": "佛山", 96 | "81": "河源", 97 | "82": "惠州", 98 | "83": "江门", 99 | "84": "揭阳", 100 | "85": "茂名", 101 | "86": "梅州", 102 | "87": "清远", 103 | "88": "汕头", 104 | "89": "汕尾", 105 | "90": "韶关", 106 | "91": "阳江", 107 | "92": "云浮", 108 | "93": "湛江", 109 | "94": "肇庆", 110 | "95": "中山", 111 | "96": "珠海" 112 | }, 113 | "7": { 114 | "97": "南宁", 115 | "98": "桂林", 116 | "99": "百色", 117 | "100": "北海", 118 | "101": "崇左", 119 | "102": "防城港", 120 | "103": "贵港", 121 | "104": "河池", 122 | "105": "贺州", 123 | "106": "来宾", 124 | "107": "柳州", 125 | "108": "钦州", 126 | "109": "梧州", 127 | "110": "玉林" 128 | }, 129 | "8": { 130 | "111": "贵阳", 131 | "112": "安顺", 132 | "113": "毕节", 133 | "114": "六盘水", 134 | "115": "黔东南", 135 | "116": "黔南", 136 | "117": "黔西南", 137 | "118": "铜仁", 138 | "119": "遵义" 139 | }, 140 | "9": { 141 | "120": "海口", 142 | "121": "三亚", 143 | "122": "白沙", 144 | "123": "保亭", 145 | "124": "昌江", 146 | "125": "澄迈县", 147 | "126": "定安县", 148 | "127": "东方", 149 | "128": "乐东", 150 | "129": "临高县", 151 | "130": "陵水", 152 | "131": "琼海", 153 | "132": "琼中", 154 | "133": "屯昌县", 155 | "134": "万宁", 156 | "135": "文昌", 157 | "136": "五指山", 158 | "137": "儋州" 159 | }, 160 | "10": { 161 | "138": "石家庄", 162 | "139": "保定", 163 | "140": "沧州", 164 | "141": "承德", 165 | "142": "邯郸", 166 | "143": "衡水", 167 | "144": "廊坊", 168 | "145": "秦皇岛", 169 | "146": "唐山", 170 | "147": "邢台", 171 | "148": "张家口" 172 | }, 173 | "11": { 174 | "149": "郑州", 175 | "150": "洛阳", 176 | "151": "开封", 177 | "152": "安阳", 178 | "153": "鹤壁", 179 | "154": "济源", 180 | "155": "焦作", 181 | "156": "南阳", 182 | "157": "平顶山", 183 | "158": "三门峡", 184 | "159": "商丘", 185 | "160": "新乡", 186 | "161": "信阳", 187 | "162": "许昌", 188 | "163": "周口", 189 | "164": "驻马店", 190 | "165": "漯河", 191 | "166": "濮阳" 192 | }, 193 | "12": { 194 | "167": "哈尔滨", 195 | "168": "大庆", 196 | "169": "大兴安岭", 197 | "170": "鹤岗", 198 | "171": "黑河", 199 | "172": "鸡西", 200 | "173": "佳木斯", 201 | "174": "牡丹江", 202 | "175": "七台河", 203 | "176": "齐齐哈尔", 204 | "177": "双鸭山", 205 | "178": "绥化", 206 | "179": "伊春" 207 | }, 208 | "13": { 209 | "180": "武汉", 210 | "181": "仙桃", 211 | "182": "鄂州", 212 | "183": "黄冈", 213 | "184": "黄石", 214 | "185": "荆门", 215 | "186": "荆州", 216 | "187": "潜江", 217 | "188": "神农架林区", 218 | "189": "十堰", 219 | "190": "随州", 220 | "191": "天门", 221 | "192": "咸宁", 222 | "193": "襄樊", 223 | "194": "孝感", 224 | "195": "宜昌", 225 | "196": "恩施" 226 | }, 227 | "14": { 228 | "197": "长沙", 229 | "198": "张家界", 230 | "199": "常德", 231 | "200": "郴州", 232 | "201": "衡阳", 233 | "202": "怀化", 234 | "203": "娄底", 235 | "204": "邵阳", 236 | "205": "湘潭", 237 | "206": "湘西", 238 | "207": "益阳", 239 | "208": "永州", 240 | "209": "岳阳", 241 | "210": "株洲" 242 | }, 243 | "15": { 244 | "211": "长春", 245 | "212": "吉林", 246 | "213": "白城", 247 | "214": "白山", 248 | "215": "辽源", 249 | "216": "四平", 250 | "217": "松原", 251 | "218": "通化", 252 | "219": "延边" 253 | }, 254 | "16": { 255 | "220": "南京", 256 | "221": "苏州", 257 | "222": "无锡", 258 | "223": "常州", 259 | "224": "淮安", 260 | "225": "连云港", 261 | "226": "南通", 262 | "227": "宿迁", 263 | "228": "泰州", 264 | "229": "徐州", 265 | "230": "盐城", 266 | "231": "扬州", 267 | "232": "镇江" 268 | }, 269 | "17": { 270 | "233": "南昌", 271 | "234": "抚州", 272 | "235": "赣州", 273 | "236": "吉安", 274 | "237": "景德镇", 275 | "238": "九江", 276 | "239": "萍乡", 277 | "240": "上饶", 278 | "241": "新余", 279 | "242": "宜春", 280 | "243": "鹰潭" 281 | }, 282 | "18": { 283 | "244": "沈阳", 284 | "245": "大连", 285 | "246": "鞍山", 286 | "247": "本溪", 287 | "248": "朝阳", 288 | "249": "丹东", 289 | "250": "抚顺", 290 | "251": "阜新", 291 | "252": "葫芦岛", 292 | "253": "锦州", 293 | "254": "辽阳", 294 | "255": "盘锦", 295 | "256": "铁岭", 296 | "257": "营口" 297 | }, 298 | "19": { 299 | "258": "呼和浩特", 300 | "259": "阿拉善盟", 301 | "260": "巴彦淖尔盟", 302 | "261": "包头", 303 | "262": "赤峰", 304 | "263": "鄂尔多斯", 305 | "264": "呼伦贝尔", 306 | "265": "通辽", 307 | "266": "乌海", 308 | "267": "乌兰察布市", 309 | "268": "锡林郭勒盟", 310 | "269": "兴安盟" 311 | }, 312 | "20": { 313 | "270": "银川", 314 | "271": "固原", 315 | "272": "石嘴山", 316 | "273": "吴忠", 317 | "274": "中卫" 318 | }, 319 | "21": { 320 | "275": "西宁", 321 | "276": "果洛", 322 | "277": "海北", 323 | "278": "海东", 324 | "279": "海南", 325 | "280": "海西", 326 | "281": "黄南", 327 | "282": "玉树" 328 | }, 329 | "22": { 330 | "283": "济南", 331 | "284": "青岛", 332 | "285": "滨州", 333 | "286": "德州", 334 | "287": "东营", 335 | "288": "菏泽", 336 | "289": "济宁", 337 | "290": "莱芜", 338 | "291": "聊城", 339 | "292": "临沂", 340 | "293": "日照", 341 | "294": "泰安", 342 | "295": "威海", 343 | "296": "潍坊", 344 | "297": "烟台", 345 | "298": "枣庄", 346 | "299": "淄博" 347 | }, 348 | "23": { 349 | "300": "太原", 350 | "301": "长治", 351 | "302": "大同", 352 | "303": "晋城", 353 | "304": "晋中", 354 | "305": "临汾", 355 | "306": "吕梁", 356 | "307": "朔州", 357 | "308": "忻州", 358 | "309": "阳泉", 359 | "310": "运城" 360 | }, 361 | "24": { 362 | "311": "西安", 363 | "312": "安康", 364 | "313": "宝鸡", 365 | "314": "汉中", 366 | "315": "商洛", 367 | "316": "铜川", 368 | "317": "渭南", 369 | "318": "咸阳", 370 | "319": "延安", 371 | "320": "榆林" 372 | }, 373 | "25": { 374 | "321": "上海" 375 | }, 376 | "26": { 377 | "322": "成都", 378 | "323": "绵阳", 379 | "324": "阿坝", 380 | "325": "巴中", 381 | "326": "达州", 382 | "327": "德阳", 383 | "328": "甘孜", 384 | "329": "广安", 385 | "330": "广元", 386 | "331": "乐山", 387 | "332": "凉山", 388 | "333": "眉山", 389 | "334": "南充", 390 | "335": "内江", 391 | "336": "攀枝花", 392 | "337": "遂宁", 393 | "338": "雅安", 394 | "339": "宜宾", 395 | "340": "资阳", 396 | "341": "自贡", 397 | "342": "泸州" 398 | }, 399 | "27": { 400 | "343": "天津" 401 | }, 402 | "28": { 403 | "344": "拉萨", 404 | "345": "阿里", 405 | "346": "昌都", 406 | "347": "林芝", 407 | "348": "那曲", 408 | "349": "日喀则", 409 | "350": "山南" 410 | }, 411 | "29": { 412 | "351": "乌鲁木齐", 413 | "352": "阿克苏", 414 | "353": "阿拉尔", 415 | "354": "巴音郭楞", 416 | "355": "博尔塔拉", 417 | "356": "昌吉", 418 | "357": "哈密", 419 | "358": "和田", 420 | "359": "喀什", 421 | "360": "克拉玛依", 422 | "361": "克孜勒苏", 423 | "362": "石河子", 424 | "363": "图木舒克", 425 | "364": "吐鲁番", 426 | "365": "五家渠", 427 | "366": "伊犁" 428 | }, 429 | "30": { 430 | "367": "昆明", 431 | "368": "怒江", 432 | "369": "普洱", 433 | "370": "丽江", 434 | "371": "保山", 435 | "372": "楚雄", 436 | "373": "大理", 437 | "374": "德宏", 438 | "375": "迪庆", 439 | "376": "红河", 440 | "377": "临沧", 441 | "378": "曲靖", 442 | "379": "文山", 443 | "380": "西双版纳", 444 | "381": "玉溪", 445 | "382": "昭通" 446 | }, 447 | "31": { 448 | "383": "杭州", 449 | "384": "湖州", 450 | "385": "嘉兴", 451 | "386": "金华", 452 | "387": "丽水", 453 | "388": "宁波", 454 | "389": "绍兴", 455 | "390": "台州", 456 | "391": "温州", 457 | "392": "舟山", 458 | "393": "衢州" 459 | }, 460 | "32": { 461 | "394": "重庆" 462 | }, 463 | "33": { 464 | "395": "香港" 465 | }, 466 | "34": { 467 | "396": "澳门" 468 | }, 469 | "35": { 470 | "397": "台湾" 471 | } 472 | } -------------------------------------------------------------------------------- /src/components/area/area-source.json: -------------------------------------------------------------------------------- 1 | { 2 | "0": { 3 | "1": "中国" 4 | }, 5 | "1": { 6 | "2": "北京", 7 | "3": "安徽", 8 | "4": "福建", 9 | "5": "甘肃", 10 | "6": "广东", 11 | "7": "广西", 12 | "8": "贵州", 13 | "9": "海南", 14 | "10": "河北", 15 | "11": "河南", 16 | "12": "黑龙江", 17 | "13": "湖北", 18 | "14": "湖南", 19 | "15": "吉林", 20 | "16": "江苏", 21 | "17": "江西", 22 | "18": "辽宁", 23 | "19": "内蒙古", 24 | "20": "宁夏", 25 | "21": "青海", 26 | "22": "山东", 27 | "23": "山西", 28 | "24": "陕西", 29 | "25": "上海", 30 | "26": "四川", 31 | "27": "天津", 32 | "28": "西藏", 33 | "29": "新疆", 34 | "30": "云南", 35 | "31": "浙江", 36 | "32": "重庆", 37 | "33": "香港", 38 | "34": "澳门", 39 | "35": "台湾" 40 | }, 41 | "2": { 42 | "52": "北京" 43 | }, 44 | "3": { 45 | "36": "安庆", 46 | "37": "蚌埠", 47 | "38": "巢湖", 48 | "39": "池州", 49 | "40": "滁州", 50 | "41": "阜阳", 51 | "42": "淮北", 52 | "43": "淮南", 53 | "44": "黄山", 54 | "45": "六安", 55 | "46": "马鞍山", 56 | "47": "宿州", 57 | "48": "铜陵", 58 | "49": "芜湖", 59 | "50": "宣城", 60 | "51": "亳州", 61 | "3401": "合肥" 62 | }, 63 | "4": { 64 | "53": "福州", 65 | "54": "龙岩", 66 | "55": "南平", 67 | "56": "宁德", 68 | "57": "莆田", 69 | "58": "泉州", 70 | "59": "三明", 71 | "60": "厦门", 72 | "61": "漳州" 73 | }, 74 | "5": { 75 | "62": "兰州", 76 | "63": "白银", 77 | "64": "定西", 78 | "65": "甘南", 79 | "66": "嘉峪关", 80 | "67": "金昌", 81 | "68": "酒泉", 82 | "69": "临夏", 83 | "70": "陇南", 84 | "71": "平凉", 85 | "72": "庆阳", 86 | "73": "天水", 87 | "74": "武威", 88 | "75": "张掖" 89 | }, 90 | "6": { 91 | "76": "广州", 92 | "77": "深圳", 93 | "78": "潮州", 94 | "79": "东莞", 95 | "80": "佛山", 96 | "81": "河源", 97 | "82": "惠州", 98 | "83": "江门", 99 | "84": "揭阳", 100 | "85": "茂名", 101 | "86": "梅州", 102 | "87": "清远", 103 | "88": "汕头", 104 | "89": "汕尾", 105 | "90": "韶关", 106 | "91": "阳江", 107 | "92": "云浮", 108 | "93": "湛江", 109 | "94": "肇庆", 110 | "95": "中山", 111 | "96": "珠海" 112 | }, 113 | "7": { 114 | "97": "南宁", 115 | "98": "桂林", 116 | "99": "百色", 117 | "100": "北海", 118 | "101": "崇左", 119 | "102": "防城港", 120 | "103": "贵港", 121 | "104": "河池", 122 | "105": "贺州", 123 | "106": "来宾", 124 | "107": "柳州", 125 | "108": "钦州", 126 | "109": "梧州", 127 | "110": "玉林" 128 | }, 129 | "8": { 130 | "111": "贵阳", 131 | "112": "安顺", 132 | "113": "毕节", 133 | "114": "六盘水", 134 | "115": "黔东南", 135 | "116": "黔南", 136 | "117": "黔西南", 137 | "118": "铜仁", 138 | "119": "遵义" 139 | }, 140 | "9": { 141 | "120": "海口", 142 | "121": "三亚", 143 | "122": "白沙", 144 | "123": "保亭", 145 | "124": "昌江", 146 | "125": "澄迈县", 147 | "126": "定安县", 148 | "127": "东方", 149 | "128": "乐东", 150 | "129": "临高县", 151 | "130": "陵水", 152 | "131": "琼海", 153 | "132": "琼中", 154 | "133": "屯昌县", 155 | "134": "万宁", 156 | "135": "文昌", 157 | "136": "五指山", 158 | "137": "儋州" 159 | }, 160 | "10": { 161 | "138": "石家庄", 162 | "139": "保定", 163 | "140": "沧州", 164 | "141": "承德", 165 | "142": "邯郸", 166 | "143": "衡水", 167 | "144": "廊坊", 168 | "145": "秦皇岛", 169 | "146": "唐山", 170 | "147": "邢台", 171 | "148": "张家口" 172 | }, 173 | "11": { 174 | "149": "郑州", 175 | "150": "洛阳", 176 | "151": "开封", 177 | "152": "安阳", 178 | "153": "鹤壁", 179 | "154": "济源", 180 | "155": "焦作", 181 | "156": "南阳", 182 | "157": "平顶山", 183 | "158": "三门峡", 184 | "159": "商丘", 185 | "160": "新乡", 186 | "161": "信阳", 187 | "162": "许昌", 188 | "163": "周口", 189 | "164": "驻马店", 190 | "165": "漯河", 191 | "166": "濮阳" 192 | }, 193 | "12": { 194 | "167": "哈尔滨", 195 | "168": "大庆", 196 | "169": "大兴安岭", 197 | "170": "鹤岗", 198 | "171": "黑河", 199 | "172": "鸡西", 200 | "173": "佳木斯", 201 | "174": "牡丹江", 202 | "175": "七台河", 203 | "176": "齐齐哈尔", 204 | "177": "双鸭山", 205 | "178": "绥化", 206 | "179": "伊春" 207 | }, 208 | "13": { 209 | "180": "武汉", 210 | "181": "仙桃", 211 | "182": "鄂州", 212 | "183": "黄冈", 213 | "184": "黄石", 214 | "185": "荆门", 215 | "186": "荆州", 216 | "187": "潜江", 217 | "188": "神农架林区", 218 | "189": "十堰", 219 | "190": "随州", 220 | "191": "天门", 221 | "192": "咸宁", 222 | "193": "襄樊", 223 | "194": "孝感", 224 | "195": "宜昌", 225 | "196": "恩施" 226 | }, 227 | "14": { 228 | "197": "长沙", 229 | "198": "张家界", 230 | "199": "常德", 231 | "200": "郴州", 232 | "201": "衡阳", 233 | "202": "怀化", 234 | "203": "娄底", 235 | "204": "邵阳", 236 | "205": "湘潭", 237 | "206": "湘西", 238 | "207": "益阳", 239 | "208": "永州", 240 | "209": "岳阳", 241 | "210": "株洲" 242 | }, 243 | "15": { 244 | "211": "长春", 245 | "212": "吉林", 246 | "213": "白城", 247 | "214": "白山", 248 | "215": "辽源", 249 | "216": "四平", 250 | "217": "松原", 251 | "218": "通化", 252 | "219": "延边" 253 | }, 254 | "16": { 255 | "220": "南京", 256 | "221": "苏州", 257 | "222": "无锡", 258 | "223": "常州", 259 | "224": "淮安", 260 | "225": "连云港", 261 | "226": "南通", 262 | "227": "宿迁", 263 | "228": "泰州", 264 | "229": "徐州", 265 | "230": "盐城", 266 | "231": "扬州", 267 | "232": "镇江" 268 | }, 269 | "17": { 270 | "233": "南昌", 271 | "234": "抚州", 272 | "235": "赣州", 273 | "236": "吉安", 274 | "237": "景德镇", 275 | "238": "九江", 276 | "239": "萍乡", 277 | "240": "上饶", 278 | "241": "新余", 279 | "242": "宜春", 280 | "243": "鹰潭" 281 | }, 282 | "18": { 283 | "244": "沈阳", 284 | "245": "大连", 285 | "246": "鞍山", 286 | "247": "本溪", 287 | "248": "朝阳", 288 | "249": "丹东", 289 | "250": "抚顺", 290 | "251": "阜新", 291 | "252": "葫芦岛", 292 | "253": "锦州", 293 | "254": "辽阳", 294 | "255": "盘锦", 295 | "256": "铁岭", 296 | "257": "营口" 297 | }, 298 | "19": { 299 | "258": "呼和浩特", 300 | "259": "阿拉善盟", 301 | "260": "巴彦淖尔盟", 302 | "261": "包头", 303 | "262": "赤峰", 304 | "263": "鄂尔多斯", 305 | "264": "呼伦贝尔", 306 | "265": "通辽", 307 | "266": "乌海", 308 | "267": "乌兰察布市", 309 | "268": "锡林郭勒盟", 310 | "269": "兴安盟" 311 | }, 312 | "20": { 313 | "270": "银川", 314 | "271": "固原", 315 | "272": "石嘴山", 316 | "273": "吴忠", 317 | "274": "中卫" 318 | }, 319 | "21": { 320 | "275": "西宁", 321 | "276": "果洛", 322 | "277": "海北", 323 | "278": "海东", 324 | "279": "海南", 325 | "280": "海西", 326 | "281": "黄南", 327 | "282": "玉树" 328 | }, 329 | "22": { 330 | "283": "济南", 331 | "284": "青岛", 332 | "285": "滨州", 333 | "286": "德州", 334 | "287": "东营", 335 | "288": "菏泽", 336 | "289": "济宁", 337 | "290": "莱芜", 338 | "291": "聊城", 339 | "292": "临沂", 340 | "293": "日照", 341 | "294": "泰安", 342 | "295": "威海", 343 | "296": "潍坊", 344 | "297": "烟台", 345 | "298": "枣庄", 346 | "299": "淄博" 347 | }, 348 | "23": { 349 | "300": "太原", 350 | "301": "长治", 351 | "302": "大同", 352 | "303": "晋城", 353 | "304": "晋中", 354 | "305": "临汾", 355 | "306": "吕梁", 356 | "307": "朔州", 357 | "308": "忻州", 358 | "309": "阳泉", 359 | "310": "运城" 360 | }, 361 | "24": { 362 | "311": "西安", 363 | "312": "安康", 364 | "313": "宝鸡", 365 | "314": "汉中", 366 | "315": "商洛", 367 | "316": "铜川", 368 | "317": "渭南", 369 | "318": "咸阳", 370 | "319": "延安", 371 | "320": "榆林" 372 | }, 373 | "25": { 374 | "321": "上海" 375 | }, 376 | "26": { 377 | "322": "成都", 378 | "323": "绵阳", 379 | "324": "阿坝", 380 | "325": "巴中", 381 | "326": "达州", 382 | "327": "德阳", 383 | "328": "甘孜", 384 | "329": "广安", 385 | "330": "广元", 386 | "331": "乐山", 387 | "332": "凉山", 388 | "333": "眉山", 389 | "334": "南充", 390 | "335": "内江", 391 | "336": "攀枝花", 392 | "337": "遂宁", 393 | "338": "雅安", 394 | "339": "宜宾", 395 | "340": "资阳", 396 | "341": "自贡", 397 | "342": "泸州" 398 | }, 399 | "27": { 400 | "343": "天津" 401 | }, 402 | "28": { 403 | "344": "拉萨", 404 | "345": "阿里", 405 | "346": "昌都", 406 | "347": "林芝", 407 | "348": "那曲", 408 | "349": "日喀则", 409 | "350": "山南" 410 | }, 411 | "29": { 412 | "351": "乌鲁木齐", 413 | "352": "阿克苏", 414 | "353": "阿拉尔", 415 | "354": "巴音郭楞", 416 | "355": "博尔塔拉", 417 | "356": "昌吉", 418 | "357": "哈密", 419 | "358": "和田", 420 | "359": "喀什", 421 | "360": "克拉玛依", 422 | "361": "克孜勒苏", 423 | "362": "石河子", 424 | "363": "图木舒克", 425 | "364": "吐鲁番", 426 | "365": "五家渠", 427 | "366": "伊犁" 428 | }, 429 | "30": { 430 | "367": "昆明", 431 | "368": "怒江", 432 | "369": "普洱", 433 | "370": "丽江", 434 | "371": "保山", 435 | "372": "楚雄", 436 | "373": "大理", 437 | "374": "德宏", 438 | "375": "迪庆", 439 | "376": "红河", 440 | "377": "临沧", 441 | "378": "曲靖", 442 | "379": "文山", 443 | "380": "西双版纳", 444 | "381": "玉溪", 445 | "382": "昭通" 446 | }, 447 | "31": { 448 | "383": "杭州", 449 | "384": "湖州", 450 | "385": "嘉兴", 451 | "386": "金华", 452 | "387": "丽水", 453 | "388": "宁波", 454 | "389": "绍兴", 455 | "390": "台州", 456 | "391": "温州", 457 | "392": "舟山", 458 | "393": "衢州" 459 | }, 460 | "32": { 461 | "394": "重庆" 462 | }, 463 | "33": { 464 | "395": "香港" 465 | }, 466 | "34": { 467 | "396": "澳门" 468 | }, 469 | "35": { 470 | "397": "台湾" 471 | } 472 | } --------------------------------------------------------------------------------