From d7420944ba1cd62219159b5b57b5c51cc797991f Mon Sep 17 00:00:00 2001 From: liupopo Date: Tue, 6 Feb 2024 09:36:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=90=8D=E5=B7=A5=E5=85=B7=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=88=9D=E5=A7=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 131 + App.vue | 154 + common/Back.js | 32 + common/ChooseUpload.js | 79 + common/Distance.js | 37 + common/GameCache.js | 72 + common/Http.js | 465 + common/PreferenceHelper.js | 48 + common/PxToRpxOrPxToUpx.js | 5 + common/TextUtils.js | 11 + common/Time.js | 201 + common/Toast.js | 8 + common/intent.js | 12 + common/utils.js | 353 + common/wxAuthLogin.js | 170 + common/wxSilentLogin.js | 73 + components/EditText/EditText.vue | 76 + components/PublishItem/PublishItem.vue | 51 + components/RefreshView/RefreshView.vue | 585 + components/RefreshView/mescroll-down.css | 65 + components/RefreshView/readme.md | 79 + components/RefreshView/refresh-option.js | 19 + components/RichTextEditor/RichTextEditor.vue | 275 + components/RichTextEditor/editor-icon.css | 239 + components/RichTextEditor/readme.md | 30 + components/SendCodeItem/SendCodeItem.vue | 108 + components/TabLayout/TabLayout.vue | 245 + components/UserItem/UserItem.vue | 93 + .../biaofun-datetime-picker.vue | 516 + .../biaofun-datetime-picker/使用说明.md | 30 + components/city-select/city-select.vue | 422 + components/city-select/citySelect.js | 36 + components/city-select/citys.js | 1024 ++ components/cropper/cropper.vue | 697 ++ components/cropper/readme.md | 79 + components/drop-item/drop-item.vue | 163 + components/firstui/.DS_Store | Bin 0 -> 6148 bytes components/firstui/fui-button/fui-button.vue | 379 + .../fui-dropdown-menu/fui-dropdown-menu.vue | 445 + components/firstui/fui-icon/fui-icon.js | 154 + components/firstui/fui-icon/fui-icon.ttf | Bin 0 -> 36952 bytes components/firstui/fui-icon/fui-icon.vue | 93 + .../firstui/fui-list-cell/fui-list-cell.vue | 217 + components/firstui/fui-theme/fui-theme.css | 85 + components/grid/grid.vue | 21 + .../helang-asyncSwitch/helang-asyncSwitch.vue | 68 + components/item-drop/item-drop.vue | 186 + components/item-scan/item-scan.vue | 149 + components/loading/loading.vue | 41 + .../mescroll-uni/components/mescroll-down.css | 56 + .../mescroll-uni/components/mescroll-down.vue | 54 + .../components/mescroll-empty.vue | 92 + .../mescroll-uni/components/mescroll-top.vue | 80 + .../mescroll-uni/components/mescroll-up.css | 47 + .../mescroll-uni/components/mescroll-up.vue | 39 + components/mescroll-uni/mescroll-body.css | 15 + components/mescroll-uni/mescroll-body.vue | 309 + components/mescroll-uni/mescroll-mixins.js | 60 + .../mescroll-uni/mescroll-uni-option.js | 34 + components/mescroll-uni/mescroll-uni.css | 33 + components/mescroll-uni/mescroll-uni.js | 869 ++ components/mescroll-uni/mescroll-uni.vue | 386 + .../mescroll-uni/mixins/mescroll-comp.js | 23 + .../mescroll-uni/mixins/mescroll-more-item.js | 48 + .../mescroll-uni/mixins/mescroll-more.js | 56 + components/noData/noData.vue | 20 + components/pick-regions/pick-regions.vue | 135 + components/pick-regions/regions.json | 10330 ++++++++++++++++ components/sl-filter/filter-view.vue | 459 + components/sl-filter/iconfont/iconfont.css | 20 + components/sl-filter/popup-layer.vue | 122 + components/sl-filter/sl-filter.vue | 301 + components/tabRefresh/tabRefresh.vue | 173 + components/tabTop/tabTop.vue | 112 + components/uni-datetime-picker/keypress.js | 45 + .../uni-datetime-picker.vue | 804 ++ .../uni-popup-dialog/uni-popup-dialog.vue | 243 + components/uni-popup/message.js | 22 + components/uni-popup/popup.js | 25 + components/uni-popup/uni-popup.vue | 294 + components/uni-transition/uni-transition.vue | 280 + index.html | 22 + main.js | 99 + manifest.json | 68 + pages.json | 255 + pages/city/CitySelectActivity.vue | 164 + pages/find/ActivityDetail.vue | 482 + pages/find/ActivityList.vue | 255 + pages/find/BaoMingListActivity.vue | 136 + pages/find/TeamEnroll.vue | 217 + pages/home/AddFragment.vue | 364 + pages/home/FindFragment.vue | 326 + pages/home/UserFragment.vue | 299 + pages/index/ArenaDetailActivity.vue | 312 + pages/index/BaoMingListActivity.vue | 136 + pages/index/BindPhone.vue | 146 + pages/index/DetailActivity.vue | 394 + pages/index/InputHappyGameAreaActivity.vue | 470 + pages/index/InputHappyGameLimitActivity.vue | 128 + pages/index/UserAuthentication.vue | 127 + pages/index/activity.vue | 1278 ++ pages/index/activityList.vue | 194 + pages/index/addSponsor.vue | 199 + pages/index/eventActivity.vue | 109 + pages/index/exemptionActivity.vue | 640 + pages/index/explainActivity.vue | 74 + pages/index/firstActivity.vue | 288 + pages/index/mobileInfoActivity.vue | 89 + pages/index/prizeActivity.vue | 337 + pages/index/setEventActivity.vue | 645 + pages/index/sponsorDetail.vue | 79 + pages/index/sponsorList.vue | 198 + pages/me/AuthLogin.vue | 50 + pages/me/BaseInfo.vue | 104 + pages/me/MemberManage.vue | 227 + pages/me/ModiMobileInputNew.vue | 117 + pages/me/ModiMobileVerify.vue | 114 + pages/me/ModiNickName.vue | 94 + pages/me/ModiPassword.vue | 225 + pages/me/ModiPasswordVerify.vue | 130 + pages/me/ModiRealName.vue | 92 + pages/me/ModiUserNumber.vue | 132 + pages/me/MyActivity.vue | 381 + pages/me/MyTeam.vue | 237 + pages/me/MyTeamCreate.vue | 290 + pages/me/PersonalCenter.vue | 206 + pages/me/RealInfo.vue | 226 + pages/me/Setup.vue | 150 + pages/publish/CreateActivity.vue | 1218 ++ pages/publish/EditDisclaimer.vue | 109 + pages/publish/EditIntroduction.vue | 73 + pages/publish/EnrollCondition.vue | 95 + pages/publish/EnrollRequired.vue | 89 + .../publish/InputEnrollNumbersLimitMoney.vue | 128 + pages/publish/Publish.vue | 324 + pages/publish/SelectSport.vue | 8 + pages/publish/SetLinker.vue | 89 + pages/setup/NewPasswordActivity.vue | 225 + pages/setup/RetrievePasswordActivity.vue | 127 + pages/setup/upMobile.vue | 117 + pages/setup/upMobile2.vue | 115 + pages/team/CreateTeam.vue | 223 + pages/team/JoinTeam.vue | 76 + pages/team/MyTeam.vue | 555 + pages/team/MyTeam2.vue | 126 + pages/team/WaitJoin.vue | 194 + pages/team/recruitList.vue | 498 + pages/test/DetailActivity.vue | 391 + pages/test/test.vue | 153 + pages/web/WebActivity.vue | 47 + project.config.json | 69 + static/base.css | 20 + static/columns.css | 346 + static/font.css | 42 + static/footer.css | 0 static/header.css | 57 + static/img/activity/add.png | Bin 0 -> 5991 bytes static/img/activity/delete.png | Bin 0 -> 1819 bytes static/img/activity/unfinished.png | Bin 0 -> 923 bytes static/img/login/code.png | Bin 0 -> 1868 bytes static/img/login/exchange.png | Bin 0 -> 362 bytes static/img/login/finished.png | Bin 0 -> 510 bytes static/img/login/headimage.png | Bin 0 -> 775 bytes static/img/login/hide-password.png | Bin 0 -> 1521 bytes static/img/login/logo.png | Bin 0 -> 3067 bytes static/img/login/show-password.png | Bin 0 -> 1308 bytes static/img/login/tool_name.png | Bin 0 -> 2818 bytes static/img/login/unfinished.png | Bin 0 -> 923 bytes static/img/login/username.png | Bin 0 -> 1586 bytes static/img/login/wx_icon.png | Bin 0 -> 3018 bytes static/img/personal/about.png | Bin 0 -> 963 bytes static/img/personal/fenxiang.png | Bin 0 -> 2300 bytes static/img/personal/game.png | Bin 0 -> 813 bytes static/img/personal/shezhi.png | Bin 0 -> 1001 bytes static/img/public/add_normal.png | Bin 0 -> 2137 bytes static/img/public/add_press.png | Bin 0 -> 862 bytes static/img/public/back.png | Bin 0 -> 3598 bytes static/img/public/bottom-icon/add_normal.png | Bin 0 -> 2137 bytes static/img/public/bottom-icon/add_press.png | Bin 0 -> 862 bytes static/img/public/bottom-icon/find_normal.png | Bin 0 -> 7861 bytes static/img/public/bottom-icon/find_press.png | Bin 0 -> 4082 bytes static/img/public/bottom-icon/mine_normal.png | Bin 0 -> 5429 bytes static/img/public/bottom-icon/mine_press.png | Bin 0 -> 3948 bytes static/img/public/home.png | Bin 0 -> 5180 bytes static/img/public/icon-yes.png | Bin 0 -> 3043 bytes static/img/public/jiazai.png | Bin 0 -> 8255 bytes static/img/public/mescroll-progress.png | Bin 0 -> 1732 bytes static/img/public/mescroll-slogan.png | Bin 0 -> 6592 bytes static/img/public/more.png | Bin 0 -> 550 bytes static/img/public/renqi.png | Bin 0 -> 1272 bytes static/img/public/shanchu1.png | Bin 0 -> 2944 bytes static/img/public/shuaxin.png | Bin 0 -> 6930 bytes static/img/public/upload_image.png | Bin 0 -> 2486 bytes static/img/public/visits.png | Bin 0 -> 1369 bytes static/img/public/xia.png | Bin 0 -> 522 bytes static/img/public/zanwushuju.png | Bin 0 -> 48512 bytes static/img/uniapp/mescrollTotop.png | Bin 0 -> 288 bytes static/img/uniapp/zanwushuju.png | Bin 0 -> 48512 bytes static/master.css | 122 + static/public.css | 150 + uni.scss | 77 + util/util.js | 25 + 202 files changed, 41300 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 common/Back.js create mode 100644 common/ChooseUpload.js create mode 100644 common/Distance.js create mode 100644 common/GameCache.js create mode 100644 common/Http.js create mode 100644 common/PreferenceHelper.js create mode 100644 common/PxToRpxOrPxToUpx.js create mode 100644 common/TextUtils.js create mode 100644 common/Time.js create mode 100644 common/Toast.js create mode 100644 common/intent.js create mode 100644 common/utils.js create mode 100644 common/wxAuthLogin.js create mode 100644 common/wxSilentLogin.js create mode 100644 components/EditText/EditText.vue create mode 100644 components/PublishItem/PublishItem.vue create mode 100644 components/RefreshView/RefreshView.vue create mode 100644 components/RefreshView/mescroll-down.css create mode 100644 components/RefreshView/readme.md create mode 100644 components/RefreshView/refresh-option.js create mode 100644 components/RichTextEditor/RichTextEditor.vue create mode 100644 components/RichTextEditor/editor-icon.css create mode 100644 components/RichTextEditor/readme.md create mode 100644 components/SendCodeItem/SendCodeItem.vue create mode 100644 components/TabLayout/TabLayout.vue create mode 100644 components/UserItem/UserItem.vue create mode 100644 components/biaofun-datetime-picker/biaofun-datetime-picker.vue create mode 100644 components/biaofun-datetime-picker/使用说明.md create mode 100644 components/city-select/city-select.vue create mode 100644 components/city-select/citySelect.js create mode 100644 components/city-select/citys.js create mode 100644 components/cropper/cropper.vue create mode 100644 components/cropper/readme.md create mode 100644 components/drop-item/drop-item.vue create mode 100644 components/firstui/.DS_Store create mode 100644 components/firstui/fui-button/fui-button.vue create mode 100644 components/firstui/fui-dropdown-menu/fui-dropdown-menu.vue create mode 100644 components/firstui/fui-icon/fui-icon.js create mode 100644 components/firstui/fui-icon/fui-icon.ttf create mode 100644 components/firstui/fui-icon/fui-icon.vue create mode 100644 components/firstui/fui-list-cell/fui-list-cell.vue create mode 100644 components/firstui/fui-theme/fui-theme.css create mode 100644 components/grid/grid.vue create mode 100644 components/helang-asyncSwitch/helang-asyncSwitch.vue create mode 100644 components/item-drop/item-drop.vue create mode 100644 components/item-scan/item-scan.vue create mode 100644 components/loading/loading.vue create mode 100644 components/mescroll-uni/components/mescroll-down.css create mode 100644 components/mescroll-uni/components/mescroll-down.vue create mode 100644 components/mescroll-uni/components/mescroll-empty.vue create mode 100644 components/mescroll-uni/components/mescroll-top.vue create mode 100644 components/mescroll-uni/components/mescroll-up.css create mode 100644 components/mescroll-uni/components/mescroll-up.vue create mode 100644 components/mescroll-uni/mescroll-body.css create mode 100644 components/mescroll-uni/mescroll-body.vue create mode 100644 components/mescroll-uni/mescroll-mixins.js create mode 100644 components/mescroll-uni/mescroll-uni-option.js create mode 100644 components/mescroll-uni/mescroll-uni.css create mode 100644 components/mescroll-uni/mescroll-uni.js create mode 100644 components/mescroll-uni/mescroll-uni.vue create mode 100644 components/mescroll-uni/mixins/mescroll-comp.js create mode 100644 components/mescroll-uni/mixins/mescroll-more-item.js create mode 100644 components/mescroll-uni/mixins/mescroll-more.js create mode 100644 components/noData/noData.vue create mode 100644 components/pick-regions/pick-regions.vue create mode 100644 components/pick-regions/regions.json create mode 100644 components/sl-filter/filter-view.vue create mode 100644 components/sl-filter/iconfont/iconfont.css create mode 100644 components/sl-filter/popup-layer.vue create mode 100644 components/sl-filter/sl-filter.vue create mode 100644 components/tabRefresh/tabRefresh.vue create mode 100644 components/tabTop/tabTop.vue create mode 100644 components/uni-datetime-picker/keypress.js create mode 100644 components/uni-datetime-picker/uni-datetime-picker.vue create mode 100644 components/uni-popup-dialog/uni-popup-dialog.vue create mode 100644 components/uni-popup/message.js create mode 100644 components/uni-popup/popup.js create mode 100644 components/uni-popup/uni-popup.vue create mode 100644 components/uni-transition/uni-transition.vue create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 pages.json create mode 100644 pages/city/CitySelectActivity.vue create mode 100644 pages/find/ActivityDetail.vue create mode 100644 pages/find/ActivityList.vue create mode 100644 pages/find/BaoMingListActivity.vue create mode 100644 pages/find/TeamEnroll.vue create mode 100644 pages/home/AddFragment.vue create mode 100644 pages/home/FindFragment.vue create mode 100644 pages/home/UserFragment.vue create mode 100644 pages/index/ArenaDetailActivity.vue create mode 100644 pages/index/BaoMingListActivity.vue create mode 100644 pages/index/BindPhone.vue create mode 100644 pages/index/DetailActivity.vue create mode 100644 pages/index/InputHappyGameAreaActivity.vue create mode 100644 pages/index/InputHappyGameLimitActivity.vue create mode 100644 pages/index/UserAuthentication.vue create mode 100644 pages/index/activity.vue create mode 100644 pages/index/activityList.vue create mode 100644 pages/index/addSponsor.vue create mode 100644 pages/index/eventActivity.vue create mode 100644 pages/index/exemptionActivity.vue create mode 100644 pages/index/explainActivity.vue create mode 100644 pages/index/firstActivity.vue create mode 100644 pages/index/mobileInfoActivity.vue create mode 100644 pages/index/prizeActivity.vue create mode 100644 pages/index/setEventActivity.vue create mode 100644 pages/index/sponsorDetail.vue create mode 100644 pages/index/sponsorList.vue create mode 100644 pages/me/AuthLogin.vue create mode 100644 pages/me/BaseInfo.vue create mode 100644 pages/me/MemberManage.vue create mode 100644 pages/me/ModiMobileInputNew.vue create mode 100644 pages/me/ModiMobileVerify.vue create mode 100644 pages/me/ModiNickName.vue create mode 100644 pages/me/ModiPassword.vue create mode 100644 pages/me/ModiPasswordVerify.vue create mode 100644 pages/me/ModiRealName.vue create mode 100644 pages/me/ModiUserNumber.vue create mode 100644 pages/me/MyActivity.vue create mode 100644 pages/me/MyTeam.vue create mode 100644 pages/me/MyTeamCreate.vue create mode 100644 pages/me/PersonalCenter.vue create mode 100644 pages/me/RealInfo.vue create mode 100644 pages/me/Setup.vue create mode 100644 pages/publish/CreateActivity.vue create mode 100644 pages/publish/EditDisclaimer.vue create mode 100644 pages/publish/EditIntroduction.vue create mode 100644 pages/publish/EnrollCondition.vue create mode 100644 pages/publish/EnrollRequired.vue create mode 100644 pages/publish/InputEnrollNumbersLimitMoney.vue create mode 100644 pages/publish/Publish.vue create mode 100644 pages/publish/SelectSport.vue create mode 100644 pages/publish/SetLinker.vue create mode 100644 pages/setup/NewPasswordActivity.vue create mode 100644 pages/setup/RetrievePasswordActivity.vue create mode 100644 pages/setup/upMobile.vue create mode 100644 pages/setup/upMobile2.vue create mode 100644 pages/team/CreateTeam.vue create mode 100644 pages/team/JoinTeam.vue create mode 100644 pages/team/MyTeam.vue create mode 100644 pages/team/MyTeam2.vue create mode 100644 pages/team/WaitJoin.vue create mode 100644 pages/team/recruitList.vue create mode 100644 pages/test/DetailActivity.vue create mode 100644 pages/test/test.vue create mode 100644 pages/web/WebActivity.vue create mode 100644 project.config.json create mode 100644 static/base.css create mode 100644 static/columns.css create mode 100644 static/font.css create mode 100644 static/footer.css create mode 100644 static/header.css create mode 100644 static/img/activity/add.png create mode 100644 static/img/activity/delete.png create mode 100644 static/img/activity/unfinished.png create mode 100644 static/img/login/code.png create mode 100644 static/img/login/exchange.png create mode 100644 static/img/login/finished.png create mode 100644 static/img/login/headimage.png create mode 100644 static/img/login/hide-password.png create mode 100644 static/img/login/logo.png create mode 100644 static/img/login/show-password.png create mode 100644 static/img/login/tool_name.png create mode 100644 static/img/login/unfinished.png create mode 100644 static/img/login/username.png create mode 100644 static/img/login/wx_icon.png create mode 100644 static/img/personal/about.png create mode 100644 static/img/personal/fenxiang.png create mode 100644 static/img/personal/game.png create mode 100644 static/img/personal/shezhi.png create mode 100644 static/img/public/add_normal.png create mode 100644 static/img/public/add_press.png create mode 100644 static/img/public/back.png create mode 100644 static/img/public/bottom-icon/add_normal.png create mode 100644 static/img/public/bottom-icon/add_press.png create mode 100644 static/img/public/bottom-icon/find_normal.png create mode 100644 static/img/public/bottom-icon/find_press.png create mode 100644 static/img/public/bottom-icon/mine_normal.png create mode 100644 static/img/public/bottom-icon/mine_press.png create mode 100644 static/img/public/home.png create mode 100644 static/img/public/icon-yes.png create mode 100644 static/img/public/jiazai.png create mode 100644 static/img/public/mescroll-progress.png create mode 100644 static/img/public/mescroll-slogan.png create mode 100644 static/img/public/more.png create mode 100644 static/img/public/renqi.png create mode 100644 static/img/public/shanchu1.png create mode 100644 static/img/public/shuaxin.png create mode 100644 static/img/public/upload_image.png create mode 100644 static/img/public/visits.png create mode 100644 static/img/public/xia.png create mode 100644 static/img/public/zanwushuju.png create mode 100644 static/img/uniapp/mescrollTotop.png create mode 100644 static/img/uniapp/zanwushuju.png create mode 100644 static/master.css create mode 100644 static/public.css create mode 100644 uni.scss create mode 100644 util/util.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..83f8a60 --- /dev/null +++ b/.gitignore @@ -0,0 +1,131 @@ +# ---> Node +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env.production + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +**/.idea/ +**/target/ +*.iml +*.ipr +*.iws +*.log + +### VS Code ### +.vscode/ +.hbuilderx/ +unpackage/ \ No newline at end of file diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..49c1bd6 --- /dev/null +++ b/App.vue @@ -0,0 +1,154 @@ + + + diff --git a/common/Back.js b/common/Back.js new file mode 100644 index 0000000..969e4fa --- /dev/null +++ b/common/Back.js @@ -0,0 +1,32 @@ +const back = () => { + uni.navigateBack({ + delta: 1 + }) +} + +const onActivityResult = () => { + var pages = getCurrentPages(); + var currPage = pages[pages.length - 1]; //当前页面 + let res = currPage.data; + return res.onActivityResult +} + +// 返回数据到onShow()方法,取值 onActivityResult +const setResult = (options) => { + + var pages = getCurrentPages(); + var prevPage = pages[pages.length - 2]; //上一个页面 + //直接调用上一个页面的setData()方法,把数据存到上一个页面中去 + // 上一个页面最后设置userdata + let res = prevPage.data; + res.onActivityResult = options + uni.navigateBack({ //返回 + delta: 1 + }) +} + +export { + back, + setResult, + onActivityResult +} diff --git a/common/ChooseUpload.js b/common/ChooseUpload.js new file mode 100644 index 0000000..2ab36d3 --- /dev/null +++ b/common/ChooseUpload.js @@ -0,0 +1,79 @@ +const chooseUpload = (num, url, type, formData) => { + + if (num == undefined || num == null || num == "") + num = 1 + + if (url == undefined || url == null || url == "") + url = "aos/file/batchUploadImage" + + if (type == undefined || type == null || type == "") + type = "files" + + if (formData == undefined || formData == null || formData == "") + formData = {} + + let totalImgs = 0; + let httpUrl = []; + + return new Promise((resolve) => { + + uni.chooseImage({ + count: num, //默认1 + sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album'], //从相册选择 + success: function(res) { + + let chooseImgs = res.tempFilePaths; + totalImgs = chooseImgs.length; + console.log("chooseImgs", res.tempFilePaths) + if (totalImgs > 0) + uni.showLoading({ + title: '请稍后...', + mask: true + }); + + for (var i = 0; i < chooseImgs.length; i++) { + uni.uploadFile({ + url: getApp().globalData.baseURL + url, //仅为示例,非真实的接口地址 + filePath: chooseImgs[i], + name: type, + formData: formData, + success: (uploadFileRes) => { + let data = JSON.parse(uploadFileRes.data) + console.log("data", data) + if (data.success) { + if (data.data != undefined && data.data.length != 0) + // 必须用变量去接受 + httpUrl = httpUrl.concat(data.data) + } + + }, + fail: (err) => { + console.log("err-->", err) + }, + complete: () => { + totalImgs--; + if (totalImgs <= 0) { + uni.hideLoading(); + resolve({ + "num": chooseImgs.length, + "urls": httpUrl + }) + } + } + }); + } + + }, + fail: function(res) { + resolve({ + "num": 0, + "urls": [] + }) + } + }); + }) + +} + +export default chooseUpload diff --git a/common/Distance.js b/common/Distance.js new file mode 100644 index 0000000..569415f --- /dev/null +++ b/common/Distance.js @@ -0,0 +1,37 @@ +/** + * @desc 根据两点间的经纬度计算距离 + * @param float $lat 纬度值 + * @param float $lng 经度值 + */ +const getDistance = (lat1, lon1, lat2, lon2) => { + console.log(lat1) + console.log(lon1) + console.log(lat2) + console.log(lon2) + let ew1, ns1, ew2, ns2; + let distance; + // 角度转换为弧度 + ew1 = lon1 * 0.01745329252; + ns1 = lat1 * 0.01745329252; + ew2 = lon2 * 0.01745329252; + ns2 = lat2 * 0.01745329252; + distance = distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * + Math.cos(ew1 - ew2); + // 调整到[-1..1]范围内,避免溢出 + if (distance > 1.0) + distance = 1.0; + else if (distance < -1.0) + distance = -1.0; + // 求大圆劣弧长度 + distance = 6370693.5 * Math.acos(distance); + let isBig = false; // 是否为大于等于1000m + if (distance >= 1000) { + distance /= 1000; + isBig = true; + } + + return distance.toFixed(2) + (isBig ? "km" : "m"); + +} + +export default getDistance diff --git a/common/GameCache.js b/common/GameCache.js new file mode 100644 index 0000000..4cfe73a --- /dev/null +++ b/common/GameCache.js @@ -0,0 +1,72 @@ +const writeGameCahce = (gameData) => { + gameData.isCache = true + uni.setStorageSync("cache", true); + uni.setStorageSync("cacheData", gameData); + console.log('保存game缓存成功') +} + +const clearGameCache = (gameData) => { + if (gameData.isCache) { + uni.setStorageSync("cache", false); + uni.setStorageSync("cacheData", {}); + console.log('清除game缓存成功') + return true; + } + + return false; +} + +/** + * 使用读取时 最好 hasCache() 返回True 在进行调用 + */ +const readGameCahce = () => { + + let value + try { + value = uni.getStorageSync("cacheData"); + if (value) { + console.log(value); + } + } catch (e) { + // error + value = null + console.log("error"); + } + + if (value == undefined || value == null || value === "" || value === "null") { + return {}; + } + + return value; +} + +/** + * 是否有缓存 + */ +const hasCache = () => { + + let value + try { + value = uni.getStorageSync("cache"); + if (value) { + console.log(value); + } + } catch (e) { + // error + value = null + console.log("error"); + } + + if (value == undefined || value == null || value === "" || value === "null") { + return false; + } + + return value; +} + +export { + writeGameCahce, + clearGameCache, + readGameCahce, + hasCache +} diff --git a/common/Http.js b/common/Http.js new file mode 100644 index 0000000..fbb6ac3 --- /dev/null +++ b/common/Http.js @@ -0,0 +1,465 @@ +const baseImgURL = 'https://www.ourpyw.com/static/uni-app/'; + +import { + isEmpty +} from './TextUtils.js' +/** + * 通用网络请求 + * loading: 是否显示网络请求时的loading,默认不提示【允许不传值】 + * showError: 是否显示错误信息,默认显示(如有特殊code需要自己判断逻辑时,请改成false)【允许不传值】 + * method: 网络请求方式 GET/POST/PUT【禁止不传值】 + * paramsType: 网络请求传参方式 JSON/FORM【禁止不传值】 + * autoUrl: 自动拼接网址,默认是 getApp().globalData.baseURL+ 相对地址【允许不传值】false认为非本项目域名是第三方接口 + * 响应: + * 响应到success则代表网络请求成功,直接返回对象,需自行判断逻辑 + * 响应到fail则代表无网络或无连接情况 + */ +const http = (options) => { + + console.log(getApp().globalData.token) + + if (getApp().globalData.isDebug) { + console.log('Http网络请求info', options) + } + + if (isEmpty(options.loading)) { + // 显示loading(默认不显示loading) + options.loading = false + } + + if (isEmpty(options.showError)) { + // 失败弹出提示(默认提示错误信息) + options.showError = true + } + // if (isEmpty(options.method) || (options.method != "POST" && options.method != "GET"&& options.method != "PUT")) { + if (isEmpty(options.method) || (options.method != "POST" && options.method != "GET" && options.method != "PUT" && options.method != "DELETE")) { + uni.showToast({ + title: "网络请求 'method' 为 POST/GET/PUT", + icon: 'none', + duration: 4000 + }) + return + } + + if ("JSON" == options.paramsType) { + options.paramsType = "application/json" + } else if ("FORM" == options.paramsType) { + options.paramsType = "application/x-www-form-urlencoded" + } else { + uni.showToast({ + title: "网络请求 'paramsType' 为 JSON/FORM", + icon: 'none', + duration: 4000 + }) + return + } + + if (isEmpty(options.autoUrl)) { + // 默认拼接网址 + options.autoUrl = true + } + + return new Promise((resolve, reject) => { + + if (options.loading) { + uni.showLoading({ + title: '加载中...', + // 默认遮罩出现可以继续操作 + mask: options.load || true + }); + } + + var url = options.autoUrl ? getApp().globalData.baseURL + options.url : options.url + + uni.request({ + // 组装请求地址 + url: url, + // 请求方式 GET POST + method: options.method, + header: { + // 传参方式 + 'content-type': options.paramsType, + 'token': getApp().globalData.token + }, + // 具体参数 + data: options.data, + success: res => { + + // 关闭显示框 + uni.hideLoading(); + + console.log(res) + + if (getApp().globalData.isDebug) { + console.log('Http网络路径', url) + console.log('Http网络请求结果', JSON.parse(JSON.stringify(res.data))) + } + + if (res.statusCode == 200) { + // 自动拼接类型,认为是公司后台提供接口服务,按照规定标准进行检查返回内容 + + if (options.autoUrl) { + + // 进行success字段检查 + + if (!res.data.success) { + + + if ("5000" == res.data.code) { + + uni.setStorageSync("memberSid", null); + getApp().globalData.isLogin = false + getApp().globalData.memberSid = null + + uni.showToast({ + title: "出错了,请重试", + // 保证文字长度 + icon: "none", + duration: 3000 + }) + + return + + } else { + // 错误提示 + if (options.showError) { + + if (isEmpty(res.data)) { + // 未成功获取到服务器返回的json + uni.showToast({ + // 不能超过7个字 + title: "服务器响应为空", + icon: "error" + }) + } else { + let errorMsg = res.data.msg + + if (isEmpty(errorMsg)) { + errorMsg = url + "服务器未返回错误信息" + } + + uni.showToast({ + title: errorMsg, + // 保证文字长度 + icon: "none", + duration: 3000 + }) + } + } + } + + } + + } + + // 直接返回Response + resolve(res.data) + } else { + + uni.showToast({ + title: res.statusCode + ":" + res.data.error, + // 保证文字长度 + icon: "none", + duration: 3000 + }) + + // 返回错误数据 + reject(res.data.error) + } + + }, + fail: (err) => { + // 关闭显示框 + uni.hideLoading(); + + if (getApp().globalData.isDebug) { + console.log("Http网络请求fail", err) + } + + uni.showToast({ + title: '请检查网络', + icon: 'error' + }) + // 返回错误数据 + reject(err) + }, + complete: () => { + + } + }); + + }) +} + +const upload = (options) => { + + if (getApp().globalData.isDebug) { + console.log('Http网络请求info', options) + } + + if (options.loading == undefined || options.loading == null || options.loading === "") { + options.loading = false + } + + + if (options.key == undefined || options.key == null || options.key === "") { + options.key = "file" + } + + return new Promise((resolve, reject) => { + + if (options.loading) { + uni.showLoading({ + title: '加载中...', + mask: options.load || true // 默认遮罩出现可以继续操作 + }); + } + + try { + uni.uploadFile({ + + url: getApp().globalData.baseURL + options.url, + filePath: options.filePath, + name: options.key, + formData: options.data, + + success: (res) => { + uni.hideLoading(); + + // 不知道什么谜之操作 需要手动转换成json对象 + res.data = JSON.parse(res.data) + + if (getApp().globalData.isDebug) { + console.log('Http网络路径', url) + console.log('Http网络请求结果', JSON.stringify(res.data)) + } + + if (res.data.success) { + + // 成功提示 + if (options.toast) { + uni.showToast({ + title: res.data.msg, + icon: "none" + }) + } + + // 成功数据返回 + resolve(res.data) + } else { + + // 错误提示 + uni.showToast({ + title: res.data.msg, + icon: "none" + }) + // 返回错误数据 + reject(res.data) + } + + }, + fail: (err) => { + uni.hideLoading(); + + if (getApp().globalData.isDebug) { + console.log(err) + } + + uni.showToast({ + title: '请检查网络连接', + icon: 'none' + }) + + // 返回错误数据 + reject(err) + }, + complete: () => { + + } + }); + } catch (e) { + uni.hideLoading(); + uni.showToast({ + title: '服务端异常', + icon: 'none' + }) + + // 返回错误数据 + reject(err) + } + + }) +} + +const httpCookie = (options) => { + + if (isDebug) { + console.log('Http网络请求info', options) + } + + if (options.loading == undefined || options.loading == null || options.loading === "") { + options.loading = false + } + + return new Promise((resolve, reject) => { + + if (options.loading) { + uni.showLoading({ + title: '加载中...', + mask: options.load || true // 默认遮罩出现可以继续操作 + }); + } + + try { + uni.request({ + + url: baseURL + options.url, + method: 'POST', + header: { + 'content-type': 'application/x-www-form-urlencoded', + + // #ifdef MP-WEIXIN + 'Cookie': options.cookie + // #endif + + }, + data: options.data, + + success: res => { + uni.hideLoading(); + + if (isDebug) { + console.log('Http网络路径', url) + console.log('Http网络请求结果', res.data) + } + + if (res.data.success) { + + // 成功提示 + if (options.toast) { + uni.showToast({ + title: res.data.msg, + icon: "none" + }) + } + + // 成功数据返回 + resolve(res.data) + } else { + + // 错误提示 + uni.showToast({ + title: res.data.msg, + icon: "none" + }) + // 返回错误数据 + reject(res.data) + } + + }, + fail: (err) => { + uni.hideLoading(); + + if (isDebug) { + console.log(err) + } + + uni.showToast({ + title: '请检查网络连接', + icon: 'none' + }) + + // 返回错误数据 + reject(err) + }, + complete: () => { + + } + }); + } catch (e) { + uni.hideLoading(); + uni.showToast({ + title: '服务端异常', + icon: 'none' + }) + + // 返回错误数据 + reject(err) + } + + }) +} + +// 加载其他网站的地址 +const httpOtherUrl = (options) => { + + if (getApp().globalData.isDebug) { + console.log('Http第三方网络请求info', options) + } + + if (options.loading == undefined || options.loading == null || options.loading === "") { + options.loading = false + } + + return new Promise((resolve, reject) => { + + if (options.loading) { + uni.showLoading({ + title: '加载中...', + mask: options.load || true // 默认遮罩出现可以继续操作 + }); + } + + try { + uni.request({ + url: options.url, + method: 'GET', + data: options.data, + success: res => { + + if (getApp().globalData.isDebug) { + console.log('Http第三方网络请求结果', res.data) + } + + uni.hideLoading(); + resolve(res.data) + }, + fail: (err) => { + + if (getApp().globalData.isDebug) { + console.log('Http第三方网络请求错误', err) + } + + uni.hideLoading(); + + reject(err) + + uni.showToast({ + title: '请检查网络连接', + icon: 'none' + }) + }, + complete: () => { + + } + }); + } catch (e) { + uni.hideLoading(); + + reject(e) + + uni.showToast({ + title: '服务端异常', + icon: 'none' + }) + } + + }) +} +export { + http, + httpOtherUrl, + baseImgURL, + httpCookie, + upload +} diff --git a/common/PreferenceHelper.js b/common/PreferenceHelper.js new file mode 100644 index 0000000..551e746 --- /dev/null +++ b/common/PreferenceHelper.js @@ -0,0 +1,48 @@ +const write = (keyStr, keyValue) => { + uni.setStorageSync(keyStr, keyValue); + console.log('保存' + keyStr + '成功') +} + +const write2 = (keyStr, objectValue) => { + uni.setStorageSync(keyStr, objectValue); + console.log('保存' + keyStr + '成功') +} + +const read = (keyStr) => { + + let value + try { + value = uni.getStorageSync(keyStr); + if (value) { + console.log(value); + } + } catch (e) { + // error + value = null + console.log("error"); + } + return value; +} + +const read2 = (keyStr) => { + + let value + try { + value = uni.getStorageSync(keyStr); + if (value) { + console.log(value); + } + } catch (e) { + // error + value = null + console.log("error"); + } + return value; +} + +export { + write, + read, + write2, + read2 +} diff --git a/common/PxToRpxOrPxToUpx.js b/common/PxToRpxOrPxToUpx.js new file mode 100644 index 0000000..543679d --- /dev/null +++ b/common/PxToRpxOrPxToUpx.js @@ -0,0 +1,5 @@ +const px2Upx = (windowWidth, px) => { + return px / (windowWidth / 750) +} + +export default px2Upx diff --git a/common/TextUtils.js b/common/TextUtils.js new file mode 100644 index 0000000..0efe36b --- /dev/null +++ b/common/TextUtils.js @@ -0,0 +1,11 @@ +const isEmpty = (obj) => { + if (obj == undefined || obj == null || obj === "" || obj === "null") { + return true; + } else { + return false; + } +} + +export { + isEmpty +} \ No newline at end of file diff --git a/common/Time.js b/common/Time.js new file mode 100644 index 0000000..d157ce8 --- /dev/null +++ b/common/Time.js @@ -0,0 +1,201 @@ +const timeText = (time, format) => { + + if (format == null) { + format = "yyyy-MM-dd HH:mm:ss" + } + + let timeStr = ""; + + let todayEndTime = getTodayEndTime(); + let todayStartTime = getTodayStartTime(); + let thisWeekStartTime = getThisWeekStartTime(); + + console.log("kaishi" + todayStartTime) + console.log("jieshu" + thisWeekStartTime) + + + // 今天23:59:59:999之后 + if (time > todayEndTime) { + // 显示年月日 + timeStr = timeFormat(time, format) + } else if (thisWeekStartTime > time) { + // 此周前(本周星期一之前) + + let i = format.indexOf(" "); + let formatStyle = format.substring(i + 1); + let formatNew = timeFormat(time, formatStyle); + + if (time > todayStartTime - 86399999 && time < todayStartTime) { + // 显示昨天 + timeStr = "昨天 " + formatNew; + } else { + timeStr = timeFormat(time, format) + } + + } else { + // 显示星期 时分 + let i = format.indexOf(" "); + let formatStyle = format.substring(i + 1); + let formatNew = timeFormat(time, formatStyle); + + if (todayStartTime - 86399999 > time) { + // 显示星期 + timeStr = getWeekStr(time) + " " + formatNew + } else if (time > todayStartTime - 86399999 && time < todayStartTime) { + // 显示昨天 + timeStr = "昨天 " + formatNew; + } else { + // 显示 + timeStr = formatNew; + } + } + + return timeStr +} + +/** + * 获取本周开始时间 + */ +const getThisWeekStartTime = () => { + + let todayEndTime = getTodayEndTime(); + + var date = new Date(); + var weekDays = date.getDay(); + var weeks = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"); + var week = weeks[weekDays]; + + return todayEndTime + 1 - weekDays * 86400000; +} + +/** + * 获取今天是周几 + */ +const getWeekStr = (time) => { + + + if (time instanceof Date) { + + } else { + let temp = new Date(time); + time = temp; + } + + let todayEndTime = getTodayEndTime(); + + var weekDays = time.getDay(); + var weeks = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"); + var week = weeks[weekDays]; + + return week; +} + +/** + * 获取今天开始时间 + */ +const getTodayStartTime = () => { + + let startTime = 0; + + let myDate = new Date(); + + let current = myDate.getTime(); + + try { + + let format = timeFormat(myDate); + let split = format.split(" "); + let time = split[1].split(":"); + + startTime = current - time[0] * 60 * 60 * 1000 - time[1] * 60 * 1000 - time[2] * 1000 - time[3] + + } catch (e) { + console.log(e) + } + + return startTime; +} + +/** + * 获取今天结束时间 + */ +const getTodayEndTime = () => { + + let endTime = 0; + + let myDate = new Date(); + + let current = myDate.getTime(); + + try { + + let format = timeFormat(myDate); + let split = format.split(" "); + let time = split[1].split(":"); + + let startTime = current - time[0] * 60 * 60 * 1000 - time[1] * 60 * 1000 - time[2] * 1000 - time[3] + endTime = startTime + 86399999; + + } catch (e) { + console.log(e) + } + + return endTime; +} + +/** + * 格式化时间 + * 支持时间戳 以及 date类型 + */ +const timeFormat = (date, formoat) => { + + if (date == undefined || date == null) { + return ""; + } + + if (date instanceof Date) { + console.log("正确") + } else { + let temp = new Date(Number(date)); + date = temp; + } + + let fmt = formoat; + + if (fmt == null) { + fmt = "yyyy-MM-dd HH:mm:ss:SSS" + } + + + let ret; + const opt = { + "y+": date.getFullYear().toString(), // 年 + "M+": (date.getMonth() + 1).toString(), // 月 + "d+": date.getDate().toString(), // 日 + "H+": date.getHours().toString(), // 时 + "m+": date.getMinutes().toString(), // 分 + "s+": date.getSeconds().toString(), // 秒 + "S+": date.getMilliseconds().toString() + + }; + for (let k in opt) { + ret = new RegExp("(" + k + ")").exec(fmt); + if (ret) { + fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) + }; + }; + return fmt; +} + +const currentMillions = () => { + let current = new Date().getTime(); + return current; +} + +export { + timeText, + timeFormat, + currentMillions, + getWeekStr, + getTodayEndTime +} diff --git a/common/Toast.js b/common/Toast.js new file mode 100644 index 0000000..232e7b1 --- /dev/null +++ b/common/Toast.js @@ -0,0 +1,8 @@ +const toast = (msg) => { + uni.showToast({ + title: msg, + icon: 'none' + }) +} + +export default toast diff --git a/common/intent.js b/common/intent.js new file mode 100644 index 0000000..e3bea9f --- /dev/null +++ b/common/intent.js @@ -0,0 +1,12 @@ +const putWEBExtra = (url) => { + return encodeURIComponent(url) +} + +const getWEBExtra = (options) => { + return decodeURIComponent(options.url) +} + +export { + putWEBExtra, + getWEBExtra +} diff --git a/common/utils.js b/common/utils.js new file mode 100644 index 0000000..17762f1 --- /dev/null +++ b/common/utils.js @@ -0,0 +1,353 @@ +/** + * @说明:工具集 + * @作者:陈万照 + * @公司:山东标梵互动技术有限公司 + * @官网:http://biaofun.com/ + * @版本:v1.0.0 + * @时间:2020年4月28日11:28:13 + */ +export default { + /** + * 同步 try catch 的进一步封装处理 + * 使用方法: + * let [err, res] = await this.$utils.asyncTasks(Promise函数); + * if(res) 成功 + * if(err) 失败 + */ + asyncTasks(promise) { + return promise.then(data => { + return [null, data]; + }).catch(err => [err]); + }, + + /** + * 精确判断数据是否是 Object 类型 + * @param {Any} val 要判断的数据 + * @returns {Boolean} true:是;false:不是; + */ + isObject(val) { + return Object.prototype.toString.call(val) === '[object Object]' && val !== null && val !== undefined; + }, + + /** + * 判断数据是否是 Array 类型 + * @param {Any} val 要判断的数据 + * @returns {Boolean} true:是;false:不是; + */ + isArray(val) { + return Object.prototype.toString.call(val) === '[object Array]'; + }, + + /** + * 判断数据是否是 String 类型 + * @param {Any} val 要判断的数据 + * @returns {Boolean} true:是;false:不是; + */ + isString(val) { + return Object.prototype.toString.call(val) === '[object String]'; + }, + + /** + * 精确判断数据是否是 Date 类型 + * @param {Any} val 要判断的数据 + * @returns {Boolean} true:是;false:不是; + */ + isDate(val) { + return Object.prototype.toString.call(val) === '[object Date]'; + }, + + /** + * 精确判断数据是否是 Function 类型 + * @param {Any} val 要判断的数据 + * @returns {Boolean} true:是;false:不是; + */ + isFunction(val) { + return Object.prototype.toString.call(val) === '[object Function]'; + }, + + /** + * 精确判断数据是否是 Number 类型 + * @param {Any} val 要判断的数据 + * @returns {Boolean} true:是;false:不是; + */ + isNumber(val) { + return Object.prototype.toString.call(val) === '[object Number]'; + }, + + /** + * 精确判断数据是否是 Boolean 类型 + * @param {Any} val 要判断的数据 + * @returns {Boolean} true:是;false:不是; + */ + isBoolean(val) { + return Object.prototype.toString.call(val) === '[object Boolean]'; + }, + + /** + * 判断 URL 是否是绝对 URL。 + * @param {String} url 要判断的 URL + * @return {Boolean} true:是绝对URL;false:不是绝对URL; + */ + isAbsoluteURL(url) { + // 如果 URL 以 “://” 或 “//”(协议相对URL)开头,则认为它是绝对的 + // RFC 3986 将方案名称定义为以字母开头的字符序列,然后是字母,数字,加号,句点或连字符的任意组合 + return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); + }, + + /** + * 合并 baseURL 和相对 URL 成一个完整的 URL + * @param {String} baseURL baseURL + * @param {String} relativeURL 相对 URL + * @returns {String} 返回组合后的完整 URL + */ + combineURLs(baseURL, relativeURL) { + return relativeURL && this.isString(relativeURL) && this.isString(baseURL) ? baseURL.replace(/\/+$/, '') + '/' + + relativeURL.replace(/^\/+/, '') : baseURL; + }, + + /** + * 深度合并对象,只支持合并两个对象,该方法不会改变原有的对象 + * @param {Object} FirstOBJ 第一个对象 + * @param {Object} SecondOBJ 第二个对象 + * @return {Object} 返回深度合并后的对象 + */ + deepMargeObject(FirstOBJ, SecondOBJ) { + let ResultOBJ = {}; + for (let key in FirstOBJ) { + ResultOBJ[key] = ResultOBJ[key] && ResultOBJ[key].toString() === "[object Object]" ? this.deepMargeObject( + ResultOBJ[ + key], FirstOBJ[key]) : ResultOBJ[key] = FirstOBJ[key]; + } + for (let key in SecondOBJ) { + ResultOBJ[key] = ResultOBJ[key] && ResultOBJ[key].toString() === "[object Object]" ? this.deepMargeObject( + ResultOBJ[ + key], SecondOBJ[key]) : ResultOBJ[key] = SecondOBJ[key]; + } + return ResultOBJ; + }, + + /** + * 生成指定长度的随机字符串 + * @param {Number} min 最小程度 + * @param {Number} max 最大长度 + * @return {String} 返回生成的字符串 + */ + randomString(min, max) { + let returnStr = "", + range = (max ? Math.round(Math.random() * (max - min)) + min : min), + arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', + 'k', 'l', + 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', + 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' + ]; + for (let i = 0; i < range; i++) { + let index = Math.round(Math.random() * (arr.length - 1)); + returnStr += arr[index]; + } + return returnStr; + }, + + /** + * 格式化日期 + * @param {Date|String} date 日期或日期字符串 + */ + formatDate(date) { + let YYYY = null; + let M = null; + let MM = null; + let D = null; + let DD = null; + let h = null; + let hh = null; + let m = null; + let mm = null; + let s = null; + let ss = null; + let ms = null; + let ms2 = null; + let ms3 = null; + let ms4 = null; + let dt = null; + + // 如果 date 是 String 类型 + if (date && this.isString(date)) { + // 真机运行时,如果直接用 new Date('YYYY-MM-DD hh:mm:ss') 会报 Invalid Date 错误,所以采用下面的方式创建日期 + let dtArr = date.replace(/\//g, '.').replace(/-/g, '.').replace(/:/g, '.').replace(/T/g, ' ').replace(' ', + '.').replace( + 'Z', '').split('.'); + + let year = 2020; + let month = 12; + let day = 18; + let hour = 0; + let minute = 0; + let second = 0; + let millisecond = 0; + + // 年 + if (dtArr.length > 0 && !isNaN(dtArr[0])) { + year = parseInt(dtArr[0]); + } + // 月 + if (dtArr.length > 1 && !isNaN(dtArr[1])) { + month = parseInt(dtArr[1]); + } + // 日 + if (dtArr.length > 2 && !isNaN(dtArr[2])) { + day = parseInt(dtArr[2]); + } + // 时 + if (dtArr.length > 3 && !isNaN(dtArr[3])) { + hour = parseInt(dtArr[3]); + } + // 分 + if (dtArr.length > 4 && !isNaN(dtArr[4])) { + minute = parseInt(dtArr[4]); + } + // 秒 + if (dtArr.length > 5 && !isNaN(dtArr[5])) { + second = parseInt(dtArr[5]); + } + // 毫秒 + if (dtArr.length > 6 && !isNaN(dtArr[6])) { + millisecond = parseInt(dtArr[6]); + } + + date = new Date(year, month - 1, day, hour, minute, second, millisecond); + } + + // 如果 date 是 Date 类型 + if (date && this.isDate(date)) { + YYYY = date.getFullYear(); + M = date.getMonth() + 1; + MM = M >= 10 ? M : '0' + M; + D = date.getDate(); + DD = D >= 10 ? D : '0' + D; + h = date.getHours(); + hh = h >= 10 ? h : '0' + h; + m = date.getMinutes(); + mm = m >= 10 ? m : '0' + m; + s = date.getSeconds(); + ss = s >= 10 ? s : '0' + s; + ms = date.getMilliseconds(); + ms2 = ms; + ms3 = ms; + ms4 = ms; + if (ms < 10) { + ms2 = '0' + ms; + ms3 = '00' + ms; + ms4 = '000' + ms; + } else if (ms < 100) { + ms3 = '0' + ms; + ms4 = '00' + ms; + } else { + ms4 = '0' + ms; + } + } + + // 返回的数据对象 + let result = { + YYYY: YYYY, + MM: MM, + M: M, + DD: DD, + D: D, + hh: hh, + h: h, + mm: mm, + m: m, + ss: ss, + s: s, + ms: ms, + ms2: ms2, + ms3: ms3, + ms4: ms4, + dt: date, + f1: `${YYYY}-${MM}-${DD}`, + f2: `${YYYY}年${M}月${D}日`, + f3: `${YYYY}-${M}-${D} ${hh}:${mm}`, + f4: `${h}:${m}:${s}`, + f5: `${MM}-${DD}`, + f6: `${YYYY}-${MM}`, + f7: `${YYYY}年${M}月`, + f8: `${h}:${m}`, + f9: `${M}月${D}日`, + notes: 'YYYY(年),MM(月,补0),M(月,不补0),DD(日,补0),D(日,不补0),hh(时,补0),h(时,不补0),mm(分,补0),m(分,不补0),ss(秒,补0),s(秒,不补0),ms(毫秒,不补0),ms2(毫秒,补0到2位),ms3(毫秒,补0到3位),ms4(毫秒,补0到4位),其余的f1,f2,... 看格式就知道了!' + }; + return result; + }, + + /** + * 数字转中文 + * @param {Number} num 数字 + */ + numberToChinese(num) { + if (!/^\d*(\.\d*)?$/.test(num)) return "Number is wrong!"; + let AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九"); + let BB = new Array("", "十", "百", "千", "万", "亿", "点", ""); + let a = ("" + num).replace(/(^0*)/g, "").split("."), + k = 0, + re = ""; + for (let i = a[0].length - 1; i >= 0; i--) { + switch (k) { + case 0: + re = BB[7] + re; + break; + case 4: + if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0])) + re = BB[4] + re; + break; + case 8: + re = BB[5] + re; + BB[7] = BB[5]; + k = 0; + break; + } + if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re; + if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re; + k++; + } + if (a.length > 1) //加上小数部分(如果有小数部分) + { + re += BB[6]; + for (let i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)]; + } + return re; + }, + + /** + * 计算两个经纬度点之间的距离 + * @param {Number} lng1 第一个点的经度 + * @param {Number} lat1 第一个点的纬度 + * @param {Number} lng2 第二个点的经度 + * @param {Number} lat2 第二个点的纬度 + */ + calcDistance(lng1, lat1, lng2, lat2) { + var radLat1 = lat1 * Math.PI / 180.0; + var radLat2 = lat2 * Math.PI / 180.0; + var a = radLat1 - radLat2; + var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0; + var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))); + s = s * 6378.137; // EARTH_RADIUS; + s = Math.round(s * 10000) / 10000; + return s; + }, + + /** + * 获取数组最小值的下标 + * @param {Array} arr 数组 + */ + getArrayMixValueIndex(arrar) { + let min = arrar[0]; + let index = 0; + for (let i = 0; i < arrar.length; i++) { + if (min > arrar[i]) { + min = arrar[i]; + index = i; + } + } + return index; + } +} diff --git a/common/wxAuthLogin.js b/common/wxAuthLogin.js new file mode 100644 index 0000000..8c3a503 --- /dev/null +++ b/common/wxAuthLogin.js @@ -0,0 +1,170 @@ +import { + isEmpty +} from './TextUtils.js' + +const wxAuthLogin = () => { + // 判断是否已经登陆 + if (getApp().globalData.isLogin) { + return new Promise((resolve, reject) => { + resolve(getApp().globalData.sysUserSid) + }) + } + + return new Promise((resolve, reject) => { + // 授权登录 + wx.login({ + success: function(res) { + if (res.code) { + + if (getApp().globalData.isDebug) { + console.log('Http网络请求info', { + "wxCode": res.code + }) + } + uni.showLoading({ + title: '加载中...', + mask: true + }); + + uni.request({ + // 组装请求地址 + url: getApp().globalData.wxAuthLoginURL, + // 请求方式 GET POST + method: "GET", + header: { + // 传参方式 + 'content-type': "application/x-www-form-urlencoded" + }, + // 具体参数 + data: { + "wxCode": res.code + }, + + success: res => { + + // 关闭显示框 + uni.hideLoading(); + + console.log(res) + + if (getApp().globalData.isDebug) { + console.log('Http网络路径', getApp().globalData.wxAuthLoginURL) + console.log('Http网络请求结果', JSON.parse(JSON.stringify( + res.data))) + } + + + if (res.statusCode == 200) { + // 下面是接口返回的数据 + if (!res.data.success) { + if ("A01001" == res.data.code || "A01002" == res.data.code ) { + // 绑定手机号 + uni.navigateTo({ + url: '../index/BindPhone?sysUserWxAuthSid=' + res.data.data + }) + // reject("绑定手机号") + } + else { + // 错误提示 + if (isEmpty(res.data)) { + // 未成功获取到服务器返回的json + uni.showToast({ + // 不能超过7个字 + title: "服务器响应为空", + icon: "error" + }) + reject("服务器响应为空") + } else { + + let errorMsg = res.data.msg + + if (isEmpty(errorMsg)) { + errorMsg = url+"服务器未返回错误信息" + } + + uni.showToast({ + title: errorMsg, + // 保证文字长度 + icon: "none", + duration: 3000 + }) + } + + reject(errorMsg) + } + return + } + + // 保存 + uni.setStorageSync("sysUserSid", res.data.data.sysUserSid); + uni.setStorageSync("isLogin", res.data.data.isLogin); + getApp().globalData.isLogin = res.data.data.isLogin + getApp().globalData.sysUserSid = res.data.data.sysUserSid + getApp().globalData.token = res.data.data.token + + // 直接返回Response + resolve(getApp().globalData.sysUserSid) + + + } else { + + uni.showToast({ + title: res.statusCode + ":" + res + .errMsg, + // 保证文字长度 + icon: "none", + duration: 3000 + }) + + reject(res.errMsg) + } + + }, + fail: (err) => { + // 关闭显示框 + uni.hideLoading(); + + if (getApp().globalData.isDebug) { + console.log("Http网络请求fail", err) + } + + + uni.showToast({ + title: '请检查网络', + icon: 'error' + }) + + reject(err) + + }, + complete: () => { + + } + }); + + + } else { + + uni.showToast({ + title: "授权登录获取code失败:" + res.errMsg, + icon: 'none' + }) + + reject(res.errMsg) + } + }, + fail: function(res) { + uni.showToast({ + title: "授权登录失败:" + res.errMsg, + icon: 'none' + }) + + reject(res.errMsg) + } + }); + + }) + +} + +export default wxAuthLogin diff --git a/common/wxSilentLogin.js b/common/wxSilentLogin.js new file mode 100644 index 0000000..b7247d6 --- /dev/null +++ b/common/wxSilentLogin.js @@ -0,0 +1,73 @@ +// 静默登录 +import { + isEmpty +} from './TextUtils.js' +const wxSilentLogin = () => { + return new Promise((resolve, reject) => { + wx.login({ + success: function(res) { + if (res.code) { + if (getApp().globalData.isDebug) { + console.log('Http网络请求信息', { + "wxCode": res.code + }) + } + uni.request({ + // 组装请求地址 + url: getApp().globalData.wxSilentLoginURL, + // 请求方式 GET POST + method: "GET", + header: { + // 传参方式 + 'content-type': "application/x-www-form-urlencoded" + }, + // 具体参数 + data: { + "wxCode": res.code + }, + success: res => { + console.log(res) + if (getApp().globalData.isDebug) { + console.log('Http网络路径', getApp().globalData.wxSilentLoginURL) + } + if (res.statusCode == 200) { + if (!res.data.success) { + return + } + else + { + uni.setStorageSync("sysUserSid", res.data.data.sysUserSid); + uni.setStorageSync("token", res.data.data.token); + uni.setStorageSync("isLogin", res.data.data.isLogin); + + getApp().globalData.isLogin = res.data.data.isLogin + getApp().globalData.sysUserSid = res.data.data.sysUserSid + resolve(res.data.data.sysUserSid) + } + }else + { + getApp().globalData.isLogin = false + } + }, + fail: (err) => { + if (getApp().globalData.isDebug) { + console.log("Http网络请求fail", err) + } + }, + complete: () => { + } + }); + } + }, + fail: function(res) { + uni.showToast({ + title: "静默登录失败:" + res.errMsg, + icon: 'none' + }) + + reject(res.errMsg) + } + }); + }) +} +export default wxSilentLogin diff --git a/components/EditText/EditText.vue b/components/EditText/EditText.vue new file mode 100644 index 0000000..c12cb5d --- /dev/null +++ b/components/EditText/EditText.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/components/PublishItem/PublishItem.vue b/components/PublishItem/PublishItem.vue new file mode 100644 index 0000000..472bfca --- /dev/null +++ b/components/PublishItem/PublishItem.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/components/RefreshView/RefreshView.vue b/components/RefreshView/RefreshView.vue new file mode 100644 index 0000000..252448b --- /dev/null +++ b/components/RefreshView/RefreshView.vue @@ -0,0 +1,585 @@ + + + + + diff --git a/components/RefreshView/mescroll-down.css b/components/RefreshView/mescroll-down.css new file mode 100644 index 0000000..0ab43c8 --- /dev/null +++ b/components/RefreshView/mescroll-down.css @@ -0,0 +1,65 @@ +/*下拉刷新--标语*/ +.mescroll-downwarp .downwarp-slogan { + display: block; + width: 420rpx; + height: 168rpx; + margin: auto; +} + +/*下拉刷新--向下进度动画*/ +.mescroll-downwarp .downwarp-progress { + display: inline-block; + width: 40rpx; + height: 40rpx; + border: none; + margin: auto; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + background-image: url(../../static/img/public/mescroll-progress.png); + transition: all 300ms; +} + +/*下拉刷新--进度条*/ +.mescroll-downwarp .downwarp-loading { + display: inline-block; + width: 32rpx; + height: 32rpx; + border-radius: 50%; + border: 2rpx solid #FF8095; + border-bottom-color: transparent; +} + +/*下拉刷新--吉祥物*/ +.mescroll-downwarp .downwarp-mascot { + position: absolute; + right: 16rpx; + bottom: 0; + width: 100rpx; + height: 100rpx; + background-size: contain; + background-repeat: no-repeat; + animation: animMascot .6s steps(1, end) infinite; +} + +@keyframes animMascot { + 0% { + background-image: url(http://www.mescroll.com/img/beibei/mescroll-bb1.png) + } + + 25% { + background-image: url(http://www.mescroll.com/img/beibei/mescroll-bb2.png) + } + + 50% { + background-image: url(http://www.mescroll.com/img/beibei/mescroll-bb3.png) + } + + 75% { + background-image: url(http://www.mescroll.com/img/beibei/mescroll-bb4.png) + } + + 100% { + background-image: url(http://www.mescroll.com/img/beibei/mescroll-bb1.png) + } +} diff --git a/components/RefreshView/readme.md b/components/RefreshView/readme.md new file mode 100644 index 0000000..51eaa73 --- /dev/null +++ b/components/RefreshView/readme.md @@ -0,0 +1,79 @@ +***********************************下拉框************************************* + + +1.dropLeftList: type: Array, default: [] +// 左边下拉内容名称list + +2.dropRightList: type: Array, default: [] +// 右边下拉内容名称list + +3.@drop :drop(id,isLeft,selectData) +// 监听用户选择的条目id,是否是左侧按钮的下拉,选中的数据 + +4.closeDrop() +// 关闭下拉框 + + +***********************************导航栏************************************* + +1.hasBack: type: Boolean,default: true +// 是否有返回键 + +2.useDownScroll: type: Boolean,default: true +// 是否支持下拉刷新 + +3.useUpScroll: ype: Boolean,default: true +// 是否支持上拉加载 +// 使用上拉加载时 需引入 +// import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js"; +// mixins: [MescrollMixin] + +4.text: type: String,default: "" +// 导航栏标题 + +5.useTitleLeftBtn: type: String,default: "0" +// 导航栏最右边的两个按钮其中左边的按钮 0不使用 1使用文字 2使用图片 + +6.useTitleRightBtn: type: String,default: "0" +// 导航栏最右边的两个按钮其中右边的按钮 0不使用 1使用文字 2使用图片 + +7.titleLeftBtnSource: type: String,default: "" +// 导航栏最右边的两个按钮其中左边的按钮文字或图片资源 + +8.titleRightBtnSource: type: String,default: "" +// 导航栏最右边的两个按钮其中右边的按钮文字或图片资源 + +9.@refresh: refresh(page) +// 下拉或上拉的监听 参数为当前请求的页数 + +10.@leftBtn: +// 导航栏最右边的两个按钮其中左边的按钮点击的监听 + +11.@rightBtn: +// 导航栏最右边的两个按钮其中右边的按钮点击的监听 + +12.方法: refreshFinished() +// 网络请求成功后关闭下拉刷新动画与上拉加载动画 +// 如果为分页请求 参数为当前接口返回list数据的长度(必须) +// 否则参数可不传 + +13.方法: refreshError() +// 网络请求失败后关闭下拉刷新动画与上拉加载动画 + +14.方法: resetPageOne() +// 调用此方法可重置为第一页(比如说退赛需要重新刷新列表,调用此方法会响应 @refresh 监听) + +15.pageBg: type: String,default: "" +// 页面背景色 + +16.barColor: type: String,default: "" +// 顶部导航栏颜色 + +17.isShareIn: type: Boolean,default: true +// 是否是分享进入(分享进入返回键会显示主页) +// h5分享时需加入 isShareIn=true 小程序分享时onShareAppMessage() 也需加入isShareIn=true + +18.isInterceptBack: type: Boolean,default: false +// 是否拦截返回键 +// :isInterceptBack="true" @backClick = "方法名" +// 点击返回时会回调到上面设置方法名的那个方法里 \ No newline at end of file diff --git a/components/RefreshView/refresh-option.js b/components/RefreshView/refresh-option.js new file mode 100644 index 0000000..58a106a --- /dev/null +++ b/components/RefreshView/refresh-option.js @@ -0,0 +1,19 @@ +// 全局配置 +const RefreshOption = { + // 背景色 + pageBg: '#FFFFFF', + // 导航栏颜色 + barColor: '#2fa1f0', + // 是否有返回键(会自动判断是否可返回) + hasBack: true, + // 首页 + homePagePath: '../../pages/home/FindFragment', + // 首页是否是切换的页面 + homePageIsTabBar: true, + // 返回键 + backIcon: '../../static/img/public/back.png', + // 主页 + homeIcon: '../../static/img/public/home.png' +} + +export default RefreshOption diff --git a/components/RichTextEditor/RichTextEditor.vue b/components/RichTextEditor/RichTextEditor.vue new file mode 100644 index 0000000..7683fc1 --- /dev/null +++ b/components/RichTextEditor/RichTextEditor.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/components/RichTextEditor/editor-icon.css b/components/RichTextEditor/editor-icon.css new file mode 100644 index 0000000..0616682 --- /dev/null +++ b/components/RichTextEditor/editor-icon.css @@ -0,0 +1,239 @@ +@font-face { + font-family: 'iconfont'; + src: url('data:font/truetype;charset=utf-8;base64,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AAsAJgFuAAoAQwByAGUAYQB0AGUAZAAgAGIAeQAgAGkAYwBvAG4AZgBvAG4AdAAKAAAKQ3JlYXRlZCBieSBpY29uZm9udAoAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAVmVyc2lvbiAxLjAAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AAEdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC4AAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAGh0dHA6Ly9mb250ZWxsby5jb20AAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAEAAgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkEcmVkbwlzZWxlY3RhbGwHcHJldmlldwR1bmRvBGRhdGUHY2xlYXJ1cBU3MjNiaWFuamlxaV9kdWFuaG91anUWNzIyYmlhbmppcWlfZHVhbnFpYW5qdQotY2hlY2tsaXN0DWRpcmVjdGlvbi1sdHINZGlyZWN0aW9uLXJ0bAtmb250Ymdjb2xvcg1jbGVhcmVkZm9ybWF0BGZvbnQHb3V0ZGVudAhmb250c2l6ZQp0ZXh0X2NvbG9yD2Zvcm1hdC1oZWFkZXItMg9mb3JtYXQtaGVhZGVyLTMLbGluZS1oZWlnaHQPZm9ybWF0LWhlYWRlci0xD2Zvcm1hdC1oZWFkZXItNA9mb3JtYXQtaGVhZGVyLTUPZm9ybWF0LWhlYWRlci02EUNoYXJhY3Rlci1TcGFjaW5nBmluZGVudAZiYW9jdW4IcXVhbnBpbmcFZnV6aGkHc2hhbmNodQxiaWFuamlzZWt1YWkJZmVuZ2V4aWFuB2RpYW56YW4MY2hhcnVsaWFuamllC2NoYXJ1dHVwaWFuCnd1eHVwYWlsaWUManV6aG9uZ2R1aXFpB3lpbnlvbmcLeW91eHVwYWlsaWUIeW91ZHVpcWkJeml0aWRhaW1hCHhpYW9saWFuCXppdGlqaWFjdQ96aXRpc2hhbmNodXhpYW4Neml0aXNoYW5nYmlhbwp6aXRpYmlhb3RpDnppdGl4aWFodWF4aWFuCXppdGl4aWV0aQl6aXRpeWFuc2UIenVvZHVpcWkJeml0aXl1bGFuC3ppdGl4aWFiaWFvC3p1b3lvdWR1aXFpB2R1aWdvdXgGZ3VhbmJpDnNoZW5neWluX3NoaXRpAAAAAAAB//8AAgABAAAADAAAABYAAAACAAEAAwA6AAEABAAAAAIAAAAAAAAAAQAAAADVpCcIAAAAANhk6GIAAAAA2GToYg==') format('truetype'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-redo:before { + content: "\e627"; +} + +.icon-undo:before { + content: "\e633"; +} + +.icon-indent:before { + content: "\eb28"; +} + +.icon-outdent:before { + content: "\e6e8"; +} + +.icon-fontsize:before { + content: "\e6fd"; +} + +.icon-format-header-1:before { + content: "\e860"; +} + +.icon-format-header-4:before { + content: "\e863"; +} + +.icon-format-header-5:before { + content: "\e864"; +} + +.icon-format-header-6:before { + content: "\e865"; +} + +.icon-clearup:before { + content: "\e64d"; +} + +.icon-preview:before { + content: "\e631"; +} + +.icon-date:before { + content: "\e63e"; +} + +.icon-fontbgcolor:before { + content: "\e678"; +} + +.icon-clearedformat:before { + content: "\e67e"; +} + +.icon-font:before { + content: "\e684"; +} + +.icon-723bianjiqi_duanhouju:before { + content: "\e65f"; +} + +.icon-722bianjiqi_duanqianju:before { + content: "\e660"; +} + +.icon-text_color:before { + content: "\e72c"; +} + +.icon-format-header-2:before { + content: "\e75c"; +} + +.icon-format-header-3:before { + content: "\e75d"; +} + +.icon--checklist:before { + content: "\e664"; +} + +.icon-baocun:before { + content: "\ec09"; +} + +.icon-line-height:before { + content: "\e7f8"; +} + +.icon-quanping:before { + content: "\ec13"; +} + +.icon-direction-rtl:before { + content: "\e66e"; +} + +.icon-direction-ltr:before { + content: "\e66d"; +} + +.icon-selectall:before { + content: "\e62b"; +} + +.icon-fuzhi:before { + content: "\ec7a"; +} + +.icon-shanchu:before { + content: "\ec7b"; +} + +.icon-bianjisekuai:before { + content: "\ec7c"; +} + +.icon-fengexian:before { + content: "\ec7f"; +} + +.icon-dianzan:before { + content: "\ec80"; +} + +.icon-charulianjie:before { + content: "\ec81"; +} + +.icon-charutupian:before { + content: "\ec82"; +} + +.icon-wuxupailie:before { + content: "\ec83"; +} + +.icon-juzhongduiqi:before { + content: "\ec84"; +} + +.icon-yinyong:before { + content: "\ec85"; +} + +.icon-youxupailie:before { + content: "\ec86"; +} + +.icon-youduiqi:before { + content: "\ec87"; +} + +.icon-zitidaima:before { + content: "\ec88"; +} + +.icon-xiaolian:before { + content: "\ec89"; +} + +.icon-zitijiacu:before { + content: "\ec8a"; +} + +.icon-zitishanchuxian:before { + content: "\ec8b"; +} + +.icon-zitishangbiao:before { + content: "\ec8c"; +} + +.icon-zitibiaoti:before { + content: "\ec8d"; +} + +.icon-zitixiahuaxian:before { + content: "\ec8e"; +} + +.icon-zitixieti:before { + content: "\ec8f"; +} + +.icon-zitiyanse:before { + content: "\ec90"; +} + +.icon-zuoduiqi:before { + content: "\ec91"; +} + +.icon-zitiyulan:before { + content: "\ec92"; +} + +.icon-zitixiabiao:before { + content: "\ec93"; +} + +.icon-zuoyouduiqi:before { + content: "\ec94"; +} + +.icon-duigoux:before { + content: "\ec9e"; +} + +.icon-guanbi:before { + content: "\eca0"; +} + +.icon-shengyin_shiti:before { + content: "\eca5"; +} + +.icon-Character-Spacing:before { + content: "\e964"; +} diff --git a/components/RichTextEditor/readme.md b/components/RichTextEditor/readme.md new file mode 100644 index 0000000..21d9d82 --- /dev/null +++ b/components/RichTextEditor/readme.md @@ -0,0 +1,30 @@ +## 参数 +| 参数 | 类型 | 解释 | 默认 | 必填 | +| ------------ | ------------ | ------------ | ------------ | ------------ | +| html | String | 默认html(模板内容) | "" | 否 | +| placeholder | String | 提示信息 | "" | 否 | +| removeHeight | String | 移除高度(默认占满屏幕高度) | "0px" | 否 | + +## 方法 + +| 方法名 | 解释 | 参数 | +| ------------ | ------------ | ------------ | +| getHtml | 获取富文本html | 无 | +| getText | 获取富文本text | 无 | +| insertUrlImage | 插入网络图片 | 图片地址 | + +## 事件 + +| 事件名 | 解释 | 参数 | +| ------------ | ------------ | ------------ | +| insertPic | 用户选取本地图片成功后回调 | 选择的本地图片地址 | + +## 支持平台 + +| app | 微信小程序 | +| ------------ | ------------ | +| 未测试 | 支持 | + +| h5-Safari | Android Browser | 微信浏览器(Android) |QQ浏览器(Android) | +| ------------ | ------------ | ------------ | | +| 未测试 | 支持 | 支持 | 支持 | diff --git a/components/SendCodeItem/SendCodeItem.vue b/components/SendCodeItem/SendCodeItem.vue new file mode 100644 index 0000000..e06c274 --- /dev/null +++ b/components/SendCodeItem/SendCodeItem.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/components/TabLayout/TabLayout.vue b/components/TabLayout/TabLayout.vue new file mode 100644 index 0000000..0e6f786 --- /dev/null +++ b/components/TabLayout/TabLayout.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/components/UserItem/UserItem.vue b/components/UserItem/UserItem.vue new file mode 100644 index 0000000..5078e81 --- /dev/null +++ b/components/UserItem/UserItem.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/components/biaofun-datetime-picker/biaofun-datetime-picker.vue b/components/biaofun-datetime-picker/biaofun-datetime-picker.vue new file mode 100644 index 0000000..4dbe443 --- /dev/null +++ b/components/biaofun-datetime-picker/biaofun-datetime-picker.vue @@ -0,0 +1,516 @@ + + + + + + diff --git a/components/biaofun-datetime-picker/使用说明.md b/components/biaofun-datetime-picker/使用说明.md new file mode 100644 index 0000000..35e8e2e --- /dev/null +++ b/components/biaofun-datetime-picker/使用说明.md @@ -0,0 +1,30 @@ +### 组件说明 +* 日期时间选择器 +* 组件的默认日期有效期范围为:"1970-01-01 00:00" - "2300-01-01 00:00"。 +* 注意:如果您传递的日期有效范围的结束日期小于开始日期,则日期有效范围的结束日期会自动修正为开始日期+300年,比如,您传递的日期有效范围的开始日期为 "2020-11-11 18:30", +* 结束日期为 "2018-11-11 18:30",则此时将会自动修正结束日期为 "2320-11-11 18:30"。 +* 注意:如果您传递的默认值不在日期有效范围内,则会自动修正默认值为当前日期时间,如果当前日期时间也不在日期有效范围内,则会再次修正为日期有效范围的开始日期。 +* 注意:该组件用到了我自己封装的 utils.js,位置在 '@/common/js/utils.js'。 + + +### 插件 props 属性 +* disabled: 是否禁用该组件?Boolean类型; +* placeholder: 组件没有选中值时显示的内容,String类型; +* start: 表示有效日期时间范围的开始,String类型,格式为 "YYYY-MM-DD hh:mm"; +* end: 表示有效日期时间范围的结束,String类型,格式必为 "YYYY-MM-DD hh:mm"; +* fields: 选择器的粒度,String类型,有效值为 year、month、day、hour、minute; +* defaultValue: 默认值,String类型,格式为 "YYYY-MM-DD hh:mm"; + +### 插件事件 +- change(date):选择日期时间后的回调事件。 + * date.YYYY: 年; + * date.M: 月; + * date.MM: 月(补0); + * date.D: 日; + * date.DD: 日(补0); + * date.h: 时; + * date.hh: 时(补0); + * date.m: 分; + * date.mm: 分(补0); + * date.dt: Date对象; + * ... 还有一些其他的字段,具体看返回值吧! \ No newline at end of file diff --git a/components/city-select/city-select.vue b/components/city-select/city-select.vue new file mode 100644 index 0000000..dd2cc55 --- /dev/null +++ b/components/city-select/city-select.vue @@ -0,0 +1,422 @@ + + + + + diff --git a/components/city-select/citySelect.js b/components/city-select/citySelect.js new file mode 100644 index 0000000..4391d49 --- /dev/null +++ b/components/city-select/citySelect.js @@ -0,0 +1,36 @@ +const citySelect = { + /* eslint-disable */ + firstletter: 'YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYFZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJXDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLCYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNCMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY', + /** + * 获取汉字的拼音首字母 + * @param str 汉字字符串,如果遇到非汉字则原样返回 + * @return 返回对象 {unicode:NUmber,firstletter:String} + */ + getFirstLetter: (str) => { + if (!str || /^ +$/g.test(str)) { + return '' + } + + // 使用首字母字典文件 + if (citySelect.firstletter) { + const result = [] + const unicode = str.charCodeAt(0) + let ch = str.charAt(0) + if (unicode >= 19968 && unicode <= 40869) { + ch = citySelect.firstletter.charAt(unicode - 19968) + } else if ((unicode >= 97 && unicode <= 122) || (unicode >= 65 && unicode <= 90)) { + ch = ch.toLocaleUpperCase() + } else { + ch = '#' + } + const obj = { + unicode: unicode, + firstletter: ch + } + return obj + } + return '' + } +} + +export default citySelect diff --git a/components/city-select/citys.js b/components/city-select/citys.js new file mode 100644 index 0000000..64dd7ee --- /dev/null +++ b/components/city-select/citys.js @@ -0,0 +1,1024 @@ +export default [{ + 'cityCode': '110100', + 'cityName': '北京' +}, { + 'cityCode': '120100', + 'cityName': '天津' +}, { + 'cityCode': '130100', + 'cityName': '石家庄市' +}, { + 'cityCode': '130200', + 'cityName': '唐山市' +}, { + 'cityCode': '130300', + 'cityName': '秦皇岛市' +}, { + 'cityCode': '130400', + 'cityName': '邯郸市' +}, { + 'cityCode': '130500', + 'cityName': '邢台市' +}, { + 'cityCode': '130600', + 'cityName': '保定市' +}, { + 'cityCode': '130700', + 'cityName': '张家口市' +}, { + 'cityCode': '130800', + 'cityName': '承德市' +}, { + 'cityCode': '130900', + 'cityName': '沧州市' +}, { + 'cityCode': '131000', + 'cityName': '廊坊市' +}, { + 'cityCode': '131100', + 'cityName': '衡水市' +}, { + 'cityCode': '140100', + 'cityName': '太原市' +}, { + 'cityCode': '140200', + 'cityName': '大同市' +}, { + 'cityCode': '140300', + 'cityName': '阳泉市' +}, { + 'cityCode': '140400', + 'cityName': '长治市' +}, { + 'cityCode': '140500', + 'cityName': '晋城市' +}, { + 'cityCode': '140600', + 'cityName': '朔州市' +}, { + 'cityCode': '140700', + 'cityName': '晋中市' +}, { + 'cityCode': '140800', + 'cityName': '运城市' +}, { + 'cityCode': '140900', + 'cityName': '忻州市' +}, { + 'cityCode': '141000', + 'cityName': '临汾市' +}, { + 'cityCode': '141100', + 'cityName': '吕梁市' +}, { + 'cityCode': '150100', + 'cityName': '呼和浩特市' +}, { + 'cityCode': '150200', + 'cityName': '包头市' +}, { + 'cityCode': '150300', + 'cityName': '乌海市' +}, { + 'cityCode': '150400', + 'cityName': '赤峰市' +}, { + 'cityCode': '150500', + 'cityName': '通辽市' +}, { + 'cityCode': '150600', + 'cityName': '鄂尔多斯市' +}, { + 'cityCode': '150700', + 'cityName': '呼伦贝尔市' +}, { + 'cityCode': '150800', + 'cityName': '巴彦淖尔市' +}, { + 'cityCode': '150900', + 'cityName': '乌兰察布市' +}, { + 'cityCode': '152200', + 'cityName': '兴安盟' +}, { + 'cityCode': '152500', + 'cityName': '锡林郭勒盟' +}, { + 'cityCode': '152900', + 'cityName': '阿拉善盟' +}, { + 'cityCode': '210100', + 'cityName': '沈阳市' +}, { + 'cityCode': '210200', + 'cityName': '大连市' +}, { + 'cityCode': '210300', + 'cityName': '鞍山市' +}, { + 'cityCode': '210400', + 'cityName': '抚顺市' +}, { + 'cityCode': '210500', + 'cityName': '本溪市' +}, { + 'cityCode': '210600', + 'cityName': '丹东市' +}, { + 'cityCode': '210700', + 'cityName': '锦州市' +}, { + 'cityCode': '210800', + 'cityName': '营口市' +}, { + 'cityCode': '210900', + 'cityName': '阜新市' +}, { + 'cityCode': '211000', + 'cityName': '辽阳市' +}, { + 'cityCode': '211100', + 'cityName': '盘锦市' +}, { + 'cityCode': '211200', + 'cityName': '铁岭市' +}, { + 'cityCode': '211300', + 'cityName': '朝阳市' +}, { + 'cityCode': '211400', + 'cityName': '葫芦岛市' +}, { + 'cityCode': '220100', + 'cityName': '长春市' +}, { + 'cityCode': '220200', + 'cityName': '吉林市' +}, { + 'cityCode': '220300', + 'cityName': '四平市' +}, { + 'cityCode': '220400', + 'cityName': '辽源市' +}, { + 'cityCode': '220500', + 'cityName': '通化市' +}, { + 'cityCode': '220600', + 'cityName': '白山市' +}, { + 'cityCode': '220700', + 'cityName': '松原市' +}, { + 'cityCode': '220800', + 'cityName': '白城市' +}, { + 'cityCode': '222400', + 'cityName': '延边朝鲜族自治州' +}, { + 'cityCode': '230100', + 'cityName': '哈尔滨市' +}, { + 'cityCode': '230200', + 'cityName': '齐齐哈尔市' +}, { + 'cityCode': '230300', + 'cityName': '鸡西市' +}, { + 'cityCode': '230400', + 'cityName': '鹤岗市' +}, { + 'cityCode': '230500', + 'cityName': '双鸭山市' +}, { + 'cityCode': '230600', + 'cityName': '大庆市' +}, { + 'cityCode': '230700', + 'cityName': '伊春市' +}, { + 'cityCode': '230800', + 'cityName': '佳木斯市' +}, { + 'cityCode': '230900', + 'cityName': '七台河市' +}, { + 'cityCode': '231000', + 'cityName': '牡丹江市' +}, { + 'cityCode': '231100', + 'cityName': '黑河市' +}, { + 'cityCode': '231200', + 'cityName': '绥化市' +}, { + 'cityCode': '232700', + 'cityName': '大兴安岭地区' +}, { + 'cityCode': '310100', + 'cityName': '上海市' +}, { + 'cityCode': '320100', + 'cityName': '南京市' +}, { + 'cityCode': '320200', + 'cityName': '无锡市' +}, { + 'cityCode': '320300', + 'cityName': '徐州市' +}, { + 'cityCode': '320400', + 'cityName': '常州市' +}, { + 'cityCode': '320500', + 'cityName': '苏州市' +}, { + 'cityCode': '320600', + 'cityName': '南通市' +}, { + 'cityCode': '320700', + 'cityName': '连云港市' +}, { + 'cityCode': '320800', + 'cityName': '淮安市' +}, { + 'cityCode': '320900', + 'cityName': '盐城市' +}, { + 'cityCode': '321000', + 'cityName': '扬州市' +}, { + 'cityCode': '321100', + 'cityName': '镇江市' +}, { + 'cityCode': '321200', + 'cityName': '泰州市' +}, { + 'cityCode': '321300', + 'cityName': '宿迁市' +}, { + 'cityCode': '330100', + 'cityName': '杭州市' +}, { + 'cityCode': '330200', + 'cityName': '宁波市' +}, { + 'cityCode': '330300', + 'cityName': '温州市' +}, { + 'cityCode': '330400', + 'cityName': '嘉兴市' +}, { + 'cityCode': '330500', + 'cityName': '湖州市' +}, { + 'cityCode': '330600', + 'cityName': '绍兴市' +}, { + 'cityCode': '330700', + 'cityName': '金华市' +}, { + 'cityCode': '330800', + 'cityName': '衢州市' +}, { + 'cityCode': '330900', + 'cityName': '舟山市' +}, { + 'cityCode': '331000', + 'cityName': '台州市' +}, { + 'cityCode': '331100', + 'cityName': '丽水市' +}, { + 'cityCode': '340100', + 'cityName': '合肥市' +}, { + 'cityCode': '340200', + 'cityName': '芜湖市' +}, { + 'cityCode': '340300', + 'cityName': '蚌埠市' +}, { + 'cityCode': '340400', + 'cityName': '淮南市' +}, { + 'cityCode': '340500', + 'cityName': '马鞍山市' +}, { + 'cityCode': '340600', + 'cityName': '淮北市' +}, { + 'cityCode': '340700', + 'cityName': '铜陵市' +}, { + 'cityCode': '340800', + 'cityName': '安庆市' +}, { + 'cityCode': '341000', + 'cityName': '黄山市' +}, { + 'cityCode': '341100', + 'cityName': '滁州市' +}, { + 'cityCode': '341200', + 'cityName': '阜阳市' +}, { + 'cityCode': '341300', + 'cityName': '宿州市' +}, { + 'cityCode': '341500', + 'cityName': '六安市' +}, { + 'cityCode': '341600', + 'cityName': '亳州市' +}, { + 'cityCode': '341700', + 'cityName': '池州市' +}, { + 'cityCode': '341800', + 'cityName': '宣城市' +}, { + 'cityCode': '350100', + 'cityName': '福州市' +}, { + 'cityCode': '350200', + 'cityName': '厦门市' +}, { + 'cityCode': '350300', + 'cityName': '莆田市' +}, { + 'cityCode': '350400', + 'cityName': '三明市' +}, { + 'cityCode': '350500', + 'cityName': '泉州市' +}, { + 'cityCode': '350600', + 'cityName': '漳州市' +}, { + 'cityCode': '350700', + 'cityName': '南平市' +}, { + 'cityCode': '350800', + 'cityName': '龙岩市' +}, { + 'cityCode': '350900', + 'cityName': '宁德市' +}, { + 'cityCode': '360100', + 'cityName': '南昌市' +}, { + 'cityCode': '360200', + 'cityName': '景德镇市' +}, { + 'cityCode': '360300', + 'cityName': '萍乡市' +}, { + 'cityCode': '360400', + 'cityName': '九江市' +}, { + 'cityCode': '360500', + 'cityName': '新余市' +}, { + 'cityCode': '360600', + 'cityName': '鹰潭市' +}, { + 'cityCode': '360700', + 'cityName': '赣州市' +}, { + 'cityCode': '360800', + 'cityName': '吉安市' +}, { + 'cityCode': '360900', + 'cityName': '宜春市' +}, { + 'cityCode': '361000', + 'cityName': '抚州市' +}, { + 'cityCode': '361100', + 'cityName': '上饶市' +}, { + 'cityCode': '370100', + 'cityName': '济南市' +}, { + 'cityCode': '370200', + 'cityName': '青岛市' +}, { + 'cityCode': '370300', + 'cityName': '淄博市' +}, { + 'cityCode': '370400', + 'cityName': '枣庄市' +}, { + 'cityCode': '370500', + 'cityName': '东营市' +}, { + 'cityCode': '370600', + 'cityName': '烟台市' +}, { + 'cityCode': '370700', + 'cityName': '潍坊市' +}, { + 'cityCode': '370800', + 'cityName': '济宁市' +}, { + 'cityCode': '370900', + 'cityName': '泰安市' +}, { + 'cityCode': '371000', + 'cityName': '威海市' +}, { + 'cityCode': '371100', + 'cityName': '日照市' +}, { + 'cityCode': '371200', + 'cityName': '莱芜市' +}, { + 'cityCode': '371300', + 'cityName': '临沂市' +}, { + 'cityCode': '371400', + 'cityName': '德州市' +}, { + 'cityCode': '371500', + 'cityName': '聊城市' +}, { + 'cityCode': '371600', + 'cityName': '滨州市' +}, { + 'cityCode': '371700', + 'cityName': '菏泽市' +}, { + 'cityCode': '410100', + 'cityName': '郑州市' +}, { + 'cityCode': '410200', + 'cityName': '开封市' +}, { + 'cityCode': '410300', + 'cityName': '洛阳市' +}, { + 'cityCode': '410400', + 'cityName': '平顶山市' +}, { + 'cityCode': '410500', + 'cityName': '安阳市' +}, { + 'cityCode': '410600', + 'cityName': '鹤壁市' +}, { + 'cityCode': '410700', + 'cityName': '新乡市' +}, { + 'cityCode': '410800', + 'cityName': '焦作市' +}, { + 'cityCode': '410900', + 'cityName': '濮阳市' +}, { + 'cityCode': '411000', + 'cityName': '许昌市' +}, { + 'cityCode': '411100', + 'cityName': '漯河市' +}, { + 'cityCode': '411200', + 'cityName': '三门峡市' +}, { + 'cityCode': '411300', + 'cityName': '南阳市' +}, { + 'cityCode': '411400', + 'cityName': '商丘市' +}, { + 'cityCode': '411500', + 'cityName': '信阳市' +}, { + 'cityCode': '411600', + 'cityName': '周口市' +}, { + 'cityCode': '411700', + 'cityName': '驻马店市' +}, { + 'cityCode': '419000', + 'cityName': '省直辖县级行政区划' +}, { + 'cityCode': '420100', + 'cityName': '武汉市' +}, { + 'cityCode': '420200', + 'cityName': '黄石市' +}, { + 'cityCode': '420300', + 'cityName': '十堰市' +}, { + 'cityCode': '420500', + 'cityName': '宜昌市' +}, { + 'cityCode': '420600', + 'cityName': '襄阳市' +}, { + 'cityCode': '420700', + 'cityName': '鄂州市' +}, { + 'cityCode': '420800', + 'cityName': '荆门市' +}, { + 'cityCode': '420900', + 'cityName': '孝感市' +}, { + 'cityCode': '421000', + 'cityName': '荆州市' +}, { + 'cityCode': '421100', + 'cityName': '黄冈市' +}, { + 'cityCode': '421200', + 'cityName': '咸宁市' +}, { + 'cityCode': '421300', + 'cityName': '随州市' +}, { + 'cityCode': '422800', + 'cityName': '恩施土家族苗族自治州' +}, { + 'cityCode': '429000', + 'cityName': '省直辖县级行政区划' +}, { + 'cityCode': '430100', + 'cityName': '长沙市' +}, { + 'cityCode': '430200', + 'cityName': '株洲市' +}, { + 'cityCode': '430300', + 'cityName': '湘潭市' +}, { + 'cityCode': '430400', + 'cityName': '衡阳市' +}, { + 'cityCode': '430500', + 'cityName': '邵阳市' +}, { + 'cityCode': '430600', + 'cityName': '岳阳市' +}, { + 'cityCode': '430700', + 'cityName': '常德市' +}, { + 'cityCode': '430800', + 'cityName': '张家界市' +}, { + 'cityCode': '430900', + 'cityName': '益阳市' +}, { + 'cityCode': '431000', + 'cityName': '郴州市' +}, { + 'cityCode': '431100', + 'cityName': '永州市' +}, { + 'cityCode': '431200', + 'cityName': '怀化市' +}, { + 'cityCode': '431300', + 'cityName': '娄底市' +}, { + 'cityCode': '433100', + 'cityName': '湘西土家族苗族自治州' +}, { + 'cityCode': '440100', + 'cityName': '广州市' +}, { + 'cityCode': '440200', + 'cityName': '韶关市' +}, { + 'cityCode': '440300', + 'cityName': '深圳市' +}, { + 'cityCode': '440400', + 'cityName': '珠海市' +}, { + 'cityCode': '440500', + 'cityName': '汕头市' +}, { + 'cityCode': '440600', + 'cityName': '佛山市' +}, { + 'cityCode': '440700', + 'cityName': '江门市' +}, { + 'cityCode': '440800', + 'cityName': '湛江市' +}, { + 'cityCode': '440900', + 'cityName': '茂名市' +}, { + 'cityCode': '441200', + 'cityName': '肇庆市' +}, { + 'cityCode': '441300', + 'cityName': '惠州市' +}, { + 'cityCode': '441400', + 'cityName': '梅州市' +}, { + 'cityCode': '441500', + 'cityName': '汕尾市' +}, { + 'cityCode': '441600', + 'cityName': '河源市' +}, { + 'cityCode': '441700', + 'cityName': '阳江市' +}, { + 'cityCode': '441800', + 'cityName': '清远市' +}, { + 'cityCode': '441900', + 'cityName': '东莞市' +}, { + 'cityCode': '442000', + 'cityName': '中山市' +}, { + 'cityCode': '445100', + 'cityName': '潮州市' +}, { + 'cityCode': '445200', + 'cityName': '揭阳市' +}, { + 'cityCode': '445300', + 'cityName': '云浮市' +}, { + 'cityCode': '450100', + 'cityName': '南宁市' +}, { + 'cityCode': '450200', + 'cityName': '柳州市' +}, { + 'cityCode': '450300', + 'cityName': '桂林市' +}, { + 'cityCode': '450400', + 'cityName': '梧州市' +}, { + 'cityCode': '450500', + 'cityName': '北海市' +}, { + 'cityCode': '450600', + 'cityName': '防城港市' +}, { + 'cityCode': '450700', + 'cityName': '钦州市' +}, { + 'cityCode': '450800', + 'cityName': '贵港市' +}, { + 'cityCode': '450900', + 'cityName': '玉林市' +}, { + 'cityCode': '451000', + 'cityName': '百色市' +}, { + 'cityCode': '451100', + 'cityName': '贺州市' +}, { + 'cityCode': '451200', + 'cityName': '河池市' +}, { + 'cityCode': '451300', + 'cityName': '来宾市' +}, { + 'cityCode': '451400', + 'cityName': '崇左市' +}, { + 'cityCode': '460100', + 'cityName': '海口市' +}, { + 'cityCode': '460200', + 'cityName': '三亚市' +}, { + 'cityCode': '460300', + 'cityName': '三沙市' +}, { + 'cityCode': '469000', + 'cityName': '省直辖县级行政区划' +}, { + 'cityCode': '500100', + 'cityName': '重庆' +}, { + 'cityCode': '510100', + 'cityName': '成都市' +}, { + 'cityCode': '510300', + 'cityName': '自贡市' +}, { + 'cityCode': '510400', + 'cityName': '攀枝花市' +}, { + 'cityCode': '510500', + 'cityName': '泸州市' +}, { + 'cityCode': '510600', + 'cityName': '德阳市' +}, { + 'cityCode': '510700', + 'cityName': '绵阳市' +}, { + 'cityCode': '510800', + 'cityName': '广元市' +}, { + 'cityCode': '510900', + 'cityName': '遂宁市' +}, { + 'cityCode': '511000', + 'cityName': '内江市' +}, { + 'cityCode': '511100', + 'cityName': '乐山市' +}, { + 'cityCode': '511300', + 'cityName': '南充市' +}, { + 'cityCode': '511400', + 'cityName': '眉山市' +}, { + 'cityCode': '511500', + 'cityName': '宜宾市' +}, { + 'cityCode': '511600', + 'cityName': '广安市' +}, { + 'cityCode': '511700', + 'cityName': '达州市' +}, { + 'cityCode': '511800', + 'cityName': '雅安市' +}, { + 'cityCode': '511900', + 'cityName': '巴中市' +}, { + 'cityCode': '512000', + 'cityName': '资阳市' +}, { + 'cityCode': '513200', + 'cityName': '阿坝藏族羌族自治州' +}, { + 'cityCode': '513300', + 'cityName': '甘孜藏族自治州' +}, { + 'cityCode': '513400', + 'cityName': '凉山彝族自治州' +}, { + 'cityCode': '520100', + 'cityName': '贵阳市' +}, { + 'cityCode': '520200', + 'cityName': '六盘水市' +}, { + 'cityCode': '520300', + 'cityName': '遵义市' +}, { + 'cityCode': '520400', + 'cityName': '安顺市' +}, { + 'cityCode': '520500', + 'cityName': '毕节市' +}, { + 'cityCode': '520600', + 'cityName': '铜仁市' +}, { + 'cityCode': '522300', + 'cityName': '黔西南布依族苗族自治州' +}, { + 'cityCode': '522600', + 'cityName': '黔东南苗族侗族自治州' +}, { + 'cityCode': '522700', + 'cityName': '黔南布依族苗族自治州' +}, { + 'cityCode': '530100', + 'cityName': '昆明市' +}, { + 'cityCode': '530300', + 'cityName': '曲靖市' +}, { + 'cityCode': '530400', + 'cityName': '玉溪市' +}, { + 'cityCode': '530500', + 'cityName': '保山市' +}, { + 'cityCode': '530600', + 'cityName': '昭通市' +}, { + 'cityCode': '530700', + 'cityName': '丽江市' +}, { + 'cityCode': '530800', + 'cityName': '普洱市' +}, { + 'cityCode': '530900', + 'cityName': '临沧市' +}, { + 'cityCode': '532300', + 'cityName': '楚雄彝族自治州' +}, { + 'cityCode': '532500', + 'cityName': '红河哈尼族彝族自治州' +}, { + 'cityCode': '532600', + 'cityName': '文山壮族苗族自治州' +}, { + 'cityCode': '532800', + 'cityName': '西双版纳傣族自治州' +}, { + 'cityCode': '532900', + 'cityName': '大理白族自治州' +}, { + 'cityCode': '533100', + 'cityName': '德宏傣族景颇族自治州' +}, { + 'cityCode': '533300', + 'cityName': '怒江傈僳族自治州' +}, { + 'cityCode': '533400', + 'cityName': '迪庆藏族自治州' +}, { + 'cityCode': '540100', + 'cityName': '拉萨市' +}, { + 'cityCode': '542100', + 'cityName': '昌都地区' +}, { + 'cityCode': '542200', + 'cityName': '山南地区' +}, { + 'cityCode': '542300', + 'cityName': '日喀则地区' +}, { + 'cityCode': '542400', + 'cityName': '那曲地区' +}, { + 'cityCode': '542500', + 'cityName': '阿里地区' +}, { + 'cityCode': '542600', + 'cityName': '林芝地区' +}, { + 'cityCode': '610100', + 'cityName': '西安市' +}, { + 'cityCode': '610200', + 'cityName': '铜川市' +}, { + 'cityCode': '610300', + 'cityName': '宝鸡市' +}, { + 'cityCode': '610400', + 'cityName': '咸阳市' +}, { + 'cityCode': '610500', + 'cityName': '渭南市' +}, { + 'cityCode': '610600', + 'cityName': '延安市' +}, { + 'cityCode': '610700', + 'cityName': '汉中市' +}, { + 'cityCode': '610800', + 'cityName': '榆林市' +}, { + 'cityCode': '610900', + 'cityName': '安康市' +}, { + 'cityCode': '611000', + 'cityName': '商洛市' +}, { + 'cityCode': '620100', + 'cityName': '兰州市' +}, { + 'cityCode': '620200', + 'cityName': '嘉峪关市' +}, { + 'cityCode': '620300', + 'cityName': '金昌市' +}, { + 'cityCode': '620400', + 'cityName': '白银市' +}, { + 'cityCode': '620500', + 'cityName': '天水市' +}, { + 'cityCode': '620600', + 'cityName': '武威市' +}, { + 'cityCode': '620700', + 'cityName': '张掖市' +}, { + 'cityCode': '620800', + 'cityName': '平凉市' +}, { + 'cityCode': '620900', + 'cityName': '酒泉市' +}, { + 'cityCode': '621000', + 'cityName': '庆阳市' +}, { + 'cityCode': '621100', + 'cityName': '定西市' +}, { + 'cityCode': '621200', + 'cityName': '陇南市' +}, { + 'cityCode': '622900', + 'cityName': '临夏回族自治州' +}, { + 'cityCode': '623000', + 'cityName': '甘南藏族自治州' +}, { + 'cityCode': '630100', + 'cityName': '西宁市' +}, { + 'cityCode': '630200', + 'cityName': '海东市' +}, { + 'cityCode': '632200', + 'cityName': '海北藏族自治州' +}, { + 'cityCode': '632300', + 'cityName': '黄南藏族自治州' +}, { + 'cityCode': '632500', + 'cityName': '海南藏族自治州' +}, { + 'cityCode': '632600', + 'cityName': '果洛藏族自治州' +}, { + 'cityCode': '632700', + 'cityName': '玉树藏族自治州' +}, { + 'cityCode': '632800', + 'cityName': '海西蒙古族藏族自治州' +}, { + 'cityCode': '640100', + 'cityName': '银川市' +}, { + 'cityCode': '640200', + 'cityName': '石嘴山市' +}, { + 'cityCode': '640300', + 'cityName': '吴忠市' +}, { + 'cityCode': '640400', + 'cityName': '固原市' +}, { + 'cityCode': '640500', + 'cityName': '中卫市' +}, { + 'cityCode': '650100', + 'cityName': '乌鲁木齐市' +}, { + 'cityCode': '650200', + 'cityName': '克拉玛依市' +}, { + 'cityCode': '652100', + 'cityName': '吐鲁番地区' +}, { + 'cityCode': '652200', + 'cityName': '哈密地区' +}, { + 'cityCode': '652300', + 'cityName': '昌吉回族自治州' +}, { + 'cityCode': '652700', + 'cityName': '博尔塔拉蒙古自治州' +}, { + 'cityCode': '652800', + 'cityName': '巴音郭楞蒙古自治州' +}, { + 'cityCode': '652900', + 'cityName': '阿克苏地区' +}, { + 'cityCode': '653000', + 'cityName': '克孜勒苏柯尔克孜自治州' +}, { + 'cityCode': '653100', + 'cityName': '喀什地区' +}, { + 'cityCode': '653200', + 'cityName': '和田地区' +}, { + 'cityCode': '654000', + 'cityName': '伊犁哈萨克自治州' +}, { + 'cityCode': '654200', + 'cityName': '塔城地区' +}, { + 'cityCode': '654300', + 'cityName': '阿勒泰地区' +}, { + 'cityCode': '659000', + 'cityName': '自治区直辖县级行政区划' +}] diff --git a/components/cropper/cropper.vue b/components/cropper/cropper.vue new file mode 100644 index 0000000..c674942 --- /dev/null +++ b/components/cropper/cropper.vue @@ -0,0 +1,697 @@ + + + + diff --git a/components/cropper/readme.md b/components/cropper/readme.md new file mode 100644 index 0000000..58ce4ed --- /dev/null +++ b/components/cropper/readme.md @@ -0,0 +1,79 @@ +#### 【注意】由于赶时间,只做了功能性测试,兼容性测试暂时无法进行,更不用说优化测试了。欢迎有遇到问题的留言,或者自己动手修改也可以。 +#### 【注意】因为属于业余时间开发的一个项目所依赖的插件,所以更新较缓慢。 + +### 使用方式 + +```javascript +import Cropper from '@/components/cropper/cropper.vue'; +``` + +```html + +``` + +使用v-if控制显示,mounted内执行init方法,使用简单,操作便利。 + +## 参数 +| 参数 | 类型 | 解释 | 默认 | 必填 | 备注 | +| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | +| quality | Number | 返回图片质量 | 1 | 否 | 如返回的图片仅需预览不用上传,请适当调低 | +| imagePath | String | 原始图片路径 |"" | 是 | blob、静态图片资源地址或者base64(未测试) | +| outputFileType | String | 目标文件的类型 | jpg | 否 | jpg:输出jpg格式图片;png:输出png格式图片 | +| aspectRatio | Number, null | 目标图片的宽高比 | null | 否 | null,即不限制剪裁宽高比。aspectRatio需大于0 | +| minBoxWidthRatio | Number | 最小剪裁尺寸与原图尺寸的比率(宽)| 0.15 | 否 | 宽度最小剪裁到原图的0.15宽 | +| minBoxHeightRatio | Number | 最小剪裁尺寸与原图尺寸的比率(高)| 0.15 | 否 | 当设置aspectRatio时,minBoxHeight值设置无效。minBoxHeight值由minBoxWidth 和 aspectRatio自动计算得到 | +| initialBoxWidthRatio | Number | 剪裁框初始大小比率(宽) | 0.8 | 否 | 裁框默认宽度为图片宽度的0.8倍 | +| initialBoxHeightRatio| Number | 剪裁框初始大小比率(高) | 0.8 | 否 | 当设置aspectRatio时,initialBoxHeightRatio值设置无效。initialBoxHeightRatio值由initialBoxWidthRatio 和 aspectRatio自动计算得到| +| saveMode | String | 保存模式 | "None" | 否 | None(无限制)ScaleTo500(缩放到指定的尺寸 如 500宽度) Max500(不超过500宽度) | +## 事件 + +| 事件名 | 解释 | 参数 | 备注 | +| ------------ | ------------ | ------------ | ------------ | +| reset | 用户点击重做后触发 | 无 | 可能无用,但留一个给开发者备用 | +| cancel | 用户点击取消后触发 | 无 | 开发者可以将组件置为消失v-if(尽量不要用v-show) | +| complete | 用户点击裁剪后触发 | path:路径,h5为base64,app与小程序为临时路径;param:裁切参数,见【备注1】 | 核心功能 | + + +### 备注1 +param: +```json +{ + x:Number, //裁切左上角X坐标 + y:Number, //裁切左上角Y坐标 + width:Number, //裁切宽度 + height:Number, //裁切高度 + rotate:Number, //旋转(未实现,预留) + scaleX:Number, //X轴缩放(未实现,预留) + scaleY:Number, //Y轴缩放(未实现,预留) +} +``` + +### 备注2 +本组件样式支持iphone安全范围但需要手动开启 +请在插件被样式中最后备注的地方解除备注即可。 +控制台会报错,无视即可。 +或者复制如下样式样式代码 +```css +// 安全域兼容样式 +page { + --safe-area-inset-top: 0px; + --safe-area-inset-right: 0px; + --safe-area-inset-bottom: 0px; + --safe-area-inset-left: 0px; + + @supports (top: constant(safe-area-inset-top)) { + --safe-area-inset-top: constant(safe-area-inset-top); + --safe-area-inset-right: constant(safe-area-inset-right); + --safe-area-inset-bottom: constant(safe-area-inset-bottom); + --safe-area-inset-left: constant(safe-area-inset-left); + } + + @supports (top: env(safe-area-inset-top)) { + --safe-area-inset-top: env(safe-area-inset-top); + --safe-area-inset-right: env(safe-area-inset-right); + //--safe-area-inset-bottom: 12px; + --safe-area-inset-bottom: env(safe-area-inset-bottom); + --safe-area-inset-left: env(safe-area-inset-left); + } +} +``` \ No newline at end of file diff --git a/components/drop-item/drop-item.vue b/components/drop-item/drop-item.vue new file mode 100644 index 0000000..fdb9c9b --- /dev/null +++ b/components/drop-item/drop-item.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/components/firstui/.DS_Store b/components/firstui/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + + + + + + + diff --git a/components/firstui/fui-dropdown-menu/fui-dropdown-menu.vue b/components/firstui/fui-dropdown-menu/fui-dropdown-menu.vue new file mode 100644 index 0000000..b91525d --- /dev/null +++ b/components/firstui/fui-dropdown-menu/fui-dropdown-menu.vue @@ -0,0 +1,445 @@ + + + + + diff --git a/components/firstui/fui-icon/fui-icon.js b/components/firstui/fui-icon/fui-icon.js new file mode 100644 index 0000000..95f7bd6 --- /dev/null +++ b/components/firstui/fui-icon/fui-icon.js @@ -0,0 +1,154 @@ +export default { + "addressbook":"\ue80c", + "addfriends-fill": "\ue80a", + "addfriends": "\ue80b", + "backspace-fill": "\ue808", + "backspace": "\ue809", + "bankcard-fill": "\ue806", + "bankcard": "\ue807", + "camera-fill": "\ue804", + "camera": "\ue805", + "captcha-fill": "\ue802", + "captcha": "\ue803", + "cart-fill": "\ue800", + "cart": "\ue801", + "classify": "\ue7fe", + "classify-fill": "\ue7ff", + "comment-fill": "\ue7fc", + "comment": "\ue7fd", + "community-fill": "\ue7fa", + "community": "\ue7fb", + "coupon-fill": "\ue7f8", + "coupon": "\ue7f9", + "delete": "\ue7f6", + "delete-fill": "\ue7f7", + "edit": "\ue7f4", + "edit-fill": "\ue7f5", + "fabulous-fill": "\ue7f2", + "fabulous": "\ue7f3", + "find": "\ue7f0", + "find-fill": "\ue7f1", + "help-fill": "\ue7ee", + "help": "\ue7ef", + "home-fill": "\ue7ec", + "home": "\ue7ed", + "idcard-fill": "\ue7ea", + "idcard": "\ue7eb", + "info": "\ue7e8", + "info-fill": "\ue7e9", + "invite-fill": "\ue7e6", + "invite": "\ue7e7", + "kefu-fill": "\ue7e4", + "kefu": "\ue7e5", + "like-fill": "\ue7e2", + "like": "\ue7e3", + "location": "\ue7e0", + "location-fill": "\ue7e1", + "lock": "\ue7de", + "lock-fill": "\ue7df", + "mail-fill": "\ue7dc", + "mail": "\ue7dd", + "message": "\ue7da", + "message-fill": "\ue7db", + "mobile-fill": "\ue7d8", + "mobile": "\ue7d9", + "more": "\ue7d6", + "more-fill": "\ue7d7", + "my-fill": "\ue7d4", + "my": "\ue7d5", + "principal":"\ue80d", + "notice-fill": "\ue7d2", + "notice": "\ue7d3", + "order": "\ue7d0", + "order-fill": "\ue7d1", + "picture": "\ue7ce", + "picture-fill": "\ue7cf", + "setup-fill": "\ue7cc", + "setup": "\ue7cd", + "share": "\ue7ca", + "share-fill": "\ue7cb", + "shop": "\ue7c8", + "shop-fill": "\ue7c9", + "star-fill": "\ue7c5", + "star": "\ue7c6", + "starhalf": "\ue7c7", + "stepon-fill": "\ue7c3", + "stepon": "\ue7c4", + "wait-fill": "\ue7c1", + "wait": "\ue7c2", + "warning": "\ue7bf", + "warning-fill": "\ue7c0", + "plus": "\ue7bc", + "plussign-fill": "\ue7bd", + "plussign": "\ue7be", + "minus": "\ue7b9", + "minussign": "\ue7ba", + "minussign-fill": "\ue7bb", + "close": "\ue7b8", + "clear": "\ue7b6", + "clear-fill": "\ue7b7", + "checkbox-fill": "\ue7b5", + "checkround": "\ue7b4", + "checkbox": "\ue7b3", + "check": "\ue7b2", + "pulldown-fill": "\ue7ae", + "pullup": "\ue7af", + "pullup-fill": "\ue7b0", + "pulldown": "\ue7b1", + "roundright-fill": "\ue7ac", + "roundright": "\ue7ad", + "arrowright": "\ue7a9", + "arrowleft": "\ue7aa", + "arrowdown": "\ue7ab", + "left": "\ue7a6", + "up": "\ue7a7", + "right": "\ue7a8", + "back": "\ue7a3", + "top": "\ue7a4", + "dropdown": "\ue7a5", + "turningleft": "\ue79f", + "turningup": "\ue7a0", + "turningright": "\ue7a1", + "turningdown": "\ue7a2", + "refresh": "\ue79c", + "loading": "\ue79d", + "search": "\ue79e", + "rotate": "\ue79b", + "screen": "\ue79a", + "signin": "\ue799", + "calendar": "\ue798", + "scan": "\ue797", + "qrcode": "\ue796", + "wallet": "\ue795", + "telephone": "\ue794", + "visible": "\ue793", + "invisible": "\ue792", + "menu": "\ue78e", + "operate": "\ue78f", + "slide": "\ue790", + "list": "\ue791", + "nonetwork": "\ue78d", + "partake": "\ue78c", + "qa": "\ue78b", + "barchart": "\ue788", + "piechart": "\ue789", + "linechart": "\ue78a", + "at": "\ue787", + "face": "\ue77f", + "redpacket": "\ue780", + "suspend": "\ue781", + "link": "\ue782", + "keyboard": "\ue783", + "play": "\ue784", + "video": "\ue785", + "voice": "\ue786", + "sina": "\ue77a", + "browser": "\ue77b", + "moments": "\ue77c", + "qq": "\ue77d", + "wechat": "\ue77e", + "balance": "\ue779", + "bankcardpay": "\ue778", + "wxpay": "\ue777", + "alipay": "\ue776" +} diff --git a/components/firstui/fui-icon/fui-icon.ttf b/components/firstui/fui-icon/fui-icon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8452915bbc84e38fb3971efc642809fae96b0c75 GIT binary patch literal 36952 zcmeIbd3+qjnKxe5Ju^M`)pKb^#~hj&UDh>{#+PLIzHj3LjIk`qwyt##gcc-sojL*g0Z5y|?w0GaV=09-#c3ki6 zKioGuwAAWn%(RIy+h-39U%TI){(J*t9+bbPF@i}Yd?B{F}Df#Iu7?;Gs^#g{T}%U3dN7~9Uk<4XyKy{A28#xRzhCvsTu_lw~W{ZDa1? zzVRb0NX3{B7F5e1M%UoH*+e_+aW!*aV6Z4AXxKeenOL|BHkFlQaMl1O0-VFxDi=O}Sap zA-^7Xi6WbD#z?|_69*p=BLVl%y3S#26;99*<)G( zyNlh;-p<~^-pTG^x3gQ>+t_XF7IrhciQT|%WN&2??0WVVb{)HxUBgbY6YMw}XUEtm zJIcn`FgwhSun{)Iu4aeWes+KzWc_S_4YEGAk6p?3u&dZ!wwqnSE@!*g4z`nRXIt4e zb{X5mHnS~k1KY^fvGr^XTgz6mRctj|&Q`FcY#Ce3mas*vmvw_9EMN=SJT{-@*<9Ai zx>$~Nur}7tTEH*nux8c>9MrQ0mSuG;%`z;-YFUCMSq+P`Dpt*6tddoLmxNh_1zCvc zEC4>_XCCHdF6IWmb}}1qsDXQ!!97%9OCj8H;w1ln|8o)owALaTK0q`j6X=N*PRazz zVufpD0*$f4wK9R)SOF4{66lT<-XaqykQJ_%3AD%xH^>C4WQ7}L0)4W=TV(>JvciN+ zpjlS9NhVM)E8Hv-=$I95kqH#d3b)Dx+Gd5f$pk8Ah1+BTy|cpYGJ*10fxdx+F~AD+ z4J3>PR-kVnVO+2ReFF(2gcax;NEj=uK;J;Zs9^>A1`@^(E6_KPFp^k-+K+@W#R}AZ zB#bUrp!OqSoUsD69|Dd5Z;k6GFgH80|{f474DY_ zqm>o@P9}_7R(L=rj9^yypiCIctni>r7}c!skW3igtnjc*80oBVN+yhXR(M1vjDA*l zR3`8NR``%i;0UbnVVS@iSm7fwflIK$V={qXu);@W0_R|bkI4ic!U`Xk3EYGg9+wGx zg%v&_6F3YjJRuW!4J&+7CU6~A_K_^M3csI2gu zOyI4o@J}*<%d*1PWCFisg|Ev5&dUnlkO@4P75-T!aAQ{Z7n#79S>c;9fkU&xw`2mZ zW`%#130#{MzAY2@H!D0Z6YItK1)0FpS>Zb}fxEN9cVz;fXN7;02^^mlz9$oSKP$W_ z6Qlqud|xKW16KHfOppw$@I#p(BUs@_GC^9f!jENw++c-&mkAPt6@DTUWC<($hfI(v ztniXdkT0z8vP_UPtZ+sq$Q)MqsZ5YQtnf3LAct7tKV>3mUHD%zK{m0%D>6Y!vBJ+~ zg1lmdf=rNHtZ-H)$S_uTRVGL?R(MS&$Te2@g-noetnf>jAnRD+S298BvBIxqg8XBJ z-^j$`IR92A$V687olKC9tnho8ASYSj4>Cbwvcex_g6w34Kgk3s$_js$3G$Q`{vs13 zD=YkOnIL0X;lE^pv}J|A$^^N~3jZw=Brq$yE)&@Vg-Mwpm07`%3G$g0&dCHx&43<} zAhX$7E)%3TJFCb9InK_iGC`uVvnH7!+u2#OOr$BDwa5f{&(0PTSrTW9i8QXWR0oM{ ziL+D(33>rLOW!~ued;WI1Bq;$vjh{8(8zEC5BuMIJAYPjDg(-=Rg=0w{esDAy3zD| z^G@@3Ep?W=G{3f8`;xW8`jYL0?U(j;`+oaljylIfj@O(6&evTXt_e4D-|BwN)9m?x zH{|__?`GeZ{Z0Ol`TwYI(?6*HFwhiuH1ONtn&7jcKxkFyy3lvS^TS_=xFdTauUBlT z_+zX+_E_wa zwITIH>btek+WTsMl3tg-EB(uiGt-n=m$@x-I`h|TQ+7Q2SoU=G$JsyDx$B1Om(>4V z{m&Y9H+-#etnt@PFU;9C=Y{6E&7W=lWlOx}@|I^?SF}Ff*4%b)+w1M~+t22<=RVe9 z?|4t=aOd~By1KrXe{62+JZ0YaeEa;LFKAuxfrU|_M`b*1DWmBJmBWZ zX5P`m^GP=kRP**8-qFnUL^9Kfo4Evv1Ot{d9tHy;Ty}NhaVnfjW;(hS@b*x^qOis_ zjg4!z)1k5Zz`}(GuA{?uCx4b~nS0e-p2VTW=*ce0*fphEvuBoMYxcTy-9-oGbg?F? z_ZDlS`eeL?s^Nd4^$aR#cDt5coE_6+et!&fPIPnbjJj7%pglp1+dm zX$gedyE-z|ntYFfyWx-}ooMDs3r{31RXjz9KxhFEPUniP^mSy^bZ4%;tDARZ8hKeR z5ms1sNjAG=10Ax7mX;+gEq54y?+bHf-ku|S<|#aEe2GV#8wNJ;hbNznWm+|xO>33M zOibyCWiqkJXUgujC_S8SD!vh~JwvZt(qfE8yt!>{ZQF9*NN+<|mlDdv9=2(5&2~l{ zpQaZnUx{TV8GpL${wZGU?=cnQ7~{DDd=Aorr=~g>{fX93^`Vx`pq*XqA)v#O?JPd& z?8u|9lbV}r7W92aVP~ehNNGDwop{>q_a8w99kU@G&19l+NBvbDTUIUKrE!mwzid7|j7x8A*|_y80(HaE#o6pd$#vqwcImFGwr*@`#e-~i z@zM=0o%k5q^+n}=aAC+bB0&$gglf1PS444uGuZ-cqh}WJEV`$?hUd{O0S{NNnS96{ zwSCOXy&u)9l>S&c{i>NCGZggp?puPbkXdBOg`Ok12aE zfYjLcB*FS5fc(mn1TPM{vP(4^o6PD9s$D(PI}_wbo+L2okbjcErURi5asfDeMmY_s zqhs7d=a54=(b^MsCO|X}9u^9!6O$~OQ71C5KbDEA$WERz zDgU6D#No8XWW2{@v6%R<$)cRjL?H&3k(%CeQ>Y0f)n0lM>02y5c^YJByiEvz9jhA~S93E43&yx|W7_HSIn(Kw(JRn~f<|xS8c}G+ znnvC=#mY%f0AL?dekx>B6usIFo%appQ#vI%d(x7>DE#SMFvWp!MTs^=qfH%jh?YYd zmxFer@n}r{h#uWH)u73*PfRG)lfBAm{*_`y)b4Fu4ZuYcLXzR_&IKwf1G(}xrcwsu zrx}g)bFZlT)ikt6=)902sZ19C1QXJP*a?T|Upq0Vd{-wp0Y-k=h*t+4)*JS8XDwcH zX5p0+R%ch^x~?Tr{L8Ox?E3OU&V+Nl<_T&m-e(PZln1O%wV^U=vDC#HRHt?L*6Rl@ zU)&W8buGSp;QCt*J>+z*M=>hwf%+)upa@?CcENf;NYDfW#3M1N3DhiTl3=?S$RrqL zqtuy@qbZ7|rF-+fmhAFeuQg!p%`MNg4sPn1W3{9&Y>I5Axkh)dw_~I)zR!k{|FBE> zer+USU2@{c66jE5Lo4U`5H6VuYu%B*vi(QH%6I4X-A}4vG=+#LjFQN}UejlQOFbs0c!3N|v=! zT|W6?ld80*AnE}R)eQSwRPWbJ>Nlr0jzGt2?TzI~LNRx^;6)%jUgw zP)?sY(<|%J3wmc<8SxpHy~XNyM{lt@-hnoQKNs8Vfo<7BHah7x<&q(B-t`5~%k^LW z-suM2K9x0APGz}&x&{2yH2BjwWAAkSd|1&nk0`Igs?9WnJa@XP{fq*dNqqR2M9E@_my}oIK_`84D+y zl|{UnOZ~B(7`0%Hsbp3Ii;$WmG&e0Dp3%(m(Iadr@RIVO^q4E;F`MG`4c!X|hyHMI zaA7wx2e0ejb&r*AJ$U(!Tt{8TS$m&->lNanBe&yn;|r~TAOE?xwbTk^>OT0gHHF zU<#1|c|*#qGwLI19NvSvQhx@fgp}w=9p)nXlUOF&*Ol)9FDZ5$_0-R(2Prd0-*ND= zfW=-BF}pe!cR9_G3Wpk>QACuT{BzraxvkC$yWLrxO4m3Y_6X@HuLLJZ>utc?UWSYDo z9#NKXs(A04YNPc&03Pyq2G39fW*&a8nj6~M8qDgXrIb_tdJ&Wog8AF;n`*db+%f&S zGxUX!XRkc*>(pB`HLzj#hJdQwqRzPJeFIzk!s#P4A!!=GYW{0S zt?`+3hr-C%s9({*H`cGHPcNVBCH+Pr+j;U2I6(J@)>C#e-r>?~dupFY!rl6+=d0@d z%EaW4(j6UXCEJ^hP5!81MLk}qWMk>YR57Yg{!(}G9(u9yEFEXhD{0+jsqL=Cf6_%N z>+35mFtf=PE8;5+Er>i_n}MrTHr1@4HE?F6Kxfc~765-!7=x#$Ba_C63nzNGN+Yg_ zCH*3K_44g@r<$IhdOo=zt;TFS2+(*5F>zcOx#y!*|1| z@rd%($!_|D@>LxFFvsY#Ip=6*8-LhtHFkS6&+edye^}GzYDuCju6DxMxC=CLqY60a3~=+JnlolReaL3U%>hJHE(2Yz^R5 z;??`&aP+}OJaQ#`9|DX3-KXzJKgxq@HO2$v6fqF$s|6g|QD>JlUEr<^k(6%az68{e zMdZ}{!!<6y-*t_$_)e3mnuD>YF zqc+@>X^6y(_IbG-r>ffE+Ary8pH>xN>vzyR73pOX206%7J@4b_h2p&)p6%#SNRoo5 zi?Id9mL|aPubGppBAdw|DDhnodWr0fOGfckt(oenJ?`hX9W>w1!sIgbt+_ zrImDK+-T!BtZ1t7L|nYF>JH6gwsS=>`NBZd1&ZZZ+GL816|ein%U{Ch&8901Deh3u{C7o zCu@uT*OH8$11Y_T=DRLkQtKefbTVbOXexY*`E*xa@5*RX`qL%K?AXHZb@RBwjVCS2 z9!0aLe2vDh;@Xdk`q3qdZ{yYPE&Selu2L+jk7D6#EVeTxy@>Skl0K4zccKaH z6e{3(%12nWXl6?W4MB54b0Vm5wku_{{?GtXG8-zXYOv*}2$7(X^E+ql)j zGva)@XeE{FNmVpcIV)6ZGZc?%?&f(62N0lJkXxSUjs7)5G-IH+6)3yn2K16JhR$qC z-EbhrtDsp_)`cu)&bi;kK}nojJuL~3%T^a}i0M`{$Ef8VJyE})Ypu;1ipQ9zhng?1G?za_*ui=u^&i|UN z;fhWT4@DK(@Nfx9YxF8~K&4W3Nm{AomGJWns2R)xCJ_b6;eq1iPDwKq2O;5TwnsSl zHW_F1PCpLtDE7i@w=va<9?dSR0~g|Fc>@I7_w`ESNGzL;@%t)U+md+Ts#{tI$yL`J@SeRhQ!= z!!4wWCrLeTgcS%)5?q=fEi!L0kyNg@mgo6|HxfyN!~74E3!}BQQRO)tjk{bSRqI;W zWl{W2i_4>GxwIavY@OR$8S>ZWtcv?TCJ2pm&`(j04*c!m1ig!Q)J7*?7cVnKYYm&~ zaV49YQx1WO#$JvDbuZkf&z2+LL)Kia zKO|Zl)YCZ)ZLm0fss%XF)KJv@ND*r{&4LGI!hqE8oq>dwY`3Sp;oe1c?x5;%q?((O zE{`SjSL%aA#xLAv2j)d$ohY+Q<#^cHDh zZrOVw(?42d46W!|@{#{+Mun&86(!qpF8+$<^b1lB86m%$$B8nGGj2@d3w>)!F2yMd zVs`#troU#Bu-r)&%*Nd}OKM33z+S-Qt7hff*AV~`i~~guE_m|q)EiVY<`k-+fzF}m z6`mqDs<6>$WS7l?Kwa!iCw%ZSxA1&67tD5cbfudWi`ERlNJQaZPKY9PX(}EuTEmIT z>iYU>Wvr?pSzSf`^&guYrtk6Hl_?YdpgB?%vsq)+VY6oUr308A3#5HEWif_MBK-D- zDx;^Wp`nUDA4&Gs2Ya3~o_|bd4p zn=g6AKIL_A%0@&e^&v{^INFYZ4uMHZYmqsS_0*ov@kX5ADj;T7%&by*wJFiOWz}^}Cmb z6MWV2rC=ysSI)zW7m_eq$g6|%uIz%bvh?^Wo(L~>`*#~FLhki9q|)is4eQ+@vfnXS z37<*CPHlqaei-qDcLJlBloqiULab=gllXrKw;CZjf&KuOE+Q9BCxLDy?scc;r&9A* zEJ&KHmdFfb&sq6DLiX?S{VUv)FSu9q=eJGaTX{>d3;14Ba>4Qisnmj`+oR0Dza{*p z@DJWKjsNFbwsdxGY3Y^tmwkaQKrF<$@2ekCzCqDiI$2zh>s{bBU^Ydqmz2cf^w+hz z$>i1tdY5$1%Vg#+T-w_oaGOnf@7-H3*L>RL+wSJ$nff_Ri+0)_(MT>Ai8|~%7tLv^ z&y3x@b+y^Ndh6ZP?Ft>#4=aDhH&+0J_UR7+fFcOwbtrmM^H4f4{WcYLA-EwpqBIo& zsO+&Xy4=mH+=0sc@pU_Qt~;Ku47gV{yWN@P5qm5ivqzR^^H(Lf!V_0@>3Z*g?luAP zw*zvocKOz~_ZFL`D^DucMa@0)`c7_Gvu4A|zIi>(i>ykr#)ZF{WN&K&=MAkY+SN3t ztX*Tpc9XqNw$c6SAvFrEq6-m>o2ZS|(Ba_Qv}mM7Wx)iBbBL+1CQK%{0NNLcxy7!| zY+lYG5`E4di^N~wbo*8lU)Xhg)vDvL^0{g29UJ#<+uW8T8zfWPdvb-(T5a{MIN4j9 z!5wpZ`{u2?XPxs^e!TwHjh^M#H|`l4+S7R5a^J>V*Y~zIZ`iz7@m{uWO>XaS%;}5` z@6D}QcbQk&yLm%%>z`+x0H%H|wmTtWIm%~uXKki=YNVr;>LCf`GZ$-x@%|)@iscKE z$p!o=0m#L`JXtJ;VI=zl^me`416iDe_f;K%jVBWEqstnrjm=b#f2z9iA6vKPa$8#`x0vw9KSiMv#y|VrQspD9M*5IS@Kcmb z>Tf|W9CQ-i;NJvxz4XeyF?6qycX-0?@z{&-Jgs~I-n9rtf?}FJTNY;$%0rlunxkPh zL>d!HlinIIu1?1&uEbbqvG6BsG4CYv#B9omP(?*!MFr2hF^^)@VCpu;U;2gF%-dWZ zx6`;N<7~TA1QTH14wKu1P~YRbW_=58`F@ z<7yoAmKQ#V_G-lqPYhE z;2eGH&Fd-umg8oT0ygHCJM|C0kUtN9q-|Y)k#*S~? zvNN|mU@o6^vYP_il`}nK_uPN$cDy5~C?|SWcI7wRa+yu-RUHE#ykhZ0=fe)Ks`$Mo z*Wd$R*s=AN+RWr#^IB$1N)_jG&i$MEIAS`YV$2sC1T}>kB$_E2G}{~*|JLpg4mxaM zlamXeFWY&={reowM9tfF?LH>v%FMQk$n?~cTH);f;O@n5CD2S<4?6+c75%$+y{#rO z`Kt@3%mg1kjRq|St<)l#n&ys4lK^SLojB#^?nbx|LSj18Q}&zC&&UDU(WOfkEc7z9 zH<6DUBk_D3|M|P(`NZS|y!I2^fYJlUtnus96x4XyVz*yCHIt}(-iKOLc2u5g<4P=k zwY0#zc9+fOvQIXaCNbe5VCSAz7puL9EUtn5GDpn9E`z^*1C9GK!*XUL;8bnqW`uE7 zQSefi8DjtjJXlr&`en8l<0vLx^=W_NRRpSqfZk^mq2u=oD29UYq{X`o-Hh7I{1ahd(&NM{GTN=0ak%$u^A`9=g<97-CK-Lm0y4gB!Z7Y zvDBaBZz)Yh&4@hZznnaqYFl);_iXRsMQ!ErrIYV(OW__KrLgFLbd$d#=Gih8^DK0e z*|iKJevprlgZMD1$umNpFA_DHZ`s)Fv`(J2I-57PoD~42ln6nmd~No~=0BpK)#r+i5STz1nS!AM5zv~%)E=Ufz2bzCZb(8ZZTUA*3dZ=ph{b*^a@%B2|c)W2f z8b7#}qFQ&H7&~@cG@krSXF%Tx@U}2UdL4Y#!cSdtmSt!1H*^`PUI9x!tfuwibncW( zP6>aWELb|U-$%Loz*F{~W0b|bpRRwFlhah`p=k4Bg!yU7wLUGqI>pmzKDn4HPxm7J zd`T&IT#OS5s|V7fj@IsA{LRoK%DHj2)C7_m6hc=5U9Bnmyzw7XApb83uN#o_cp1=Y zyc~?lQxf18&>ZNG4@$U+j(|%Hj;|^&<79(xX(z2p#+P`8O0 zbC*JT7T6;kH8H>2>f>2|qDC`eQq-*L&YG+q_nIAup|Qz}xYguytLA|2sNq4(2{>-V z8=<9%&{oXL<6;8-K|vP^j)JG)@FC^f7=sZZZO-dib4e562^m(?l_O)c6xJlMm{a$m z5foy48t_hj71@qVMroaVi^o@;YObz|#Jt_!Xebs-g6}%o2w6Oq_zJzjug9V7<4?21QBq$K$AfT0 zv*yyhzeo$?uP^MqLzjM@7*UxYkkBx7%LPI?@W85T?HaelX)gtnN7|}0957Y zs>|w*x;3{-#2O4c)e@~@9fS;~7cucu5&e?(UR5_Ke}Vlm53!VMA@N`sr!j`pFuLTK|4T?*|1cDISg-M&(u47QZ$5!~cITrWe*zcr>JK@! zL{}owg%|Lb6V35>bHcc(c>bL{6QAN3W3ruy+P!ECF?MEaAX?GtGk$qtD^ks}5lyM- zMo4J=rvg*Z+MFK(&;;yhjF64# z&P57o9W@HAL4th_l?2Nbi-}y*2;40#oT2GIp=+LhUcl9_ax5?z)oMeNe+|`YM{V3} zvgqD$u2$Jx+Y#{S7SrpeO{0pUDhSX}jw%REQPgmar@FDbvAdzC0msH_Pfb`=l&`w& zlb^D?v?>J5TNFJvFBiaS0&!N%I9ECNuQZqaSD|P$^qb0982>%SUx|St3LzM)412iy zR~i=R{LZAA-A;Gh-z@(8agW2ejRwxI!|(wF!{tYbzjLpvgg^4PtOWjM@wSA|$7waD zH!gw}BKLfkx(a6V9h0Mxcs!!O%1rE@1yyzP;umRdM^(-Iti^;-k-7XEy_gHjhU4)t z|4}5qa|ROf$@1pNd@^5&1;j+Fzdeh;|Z&`MSVOaU3BQVqE( zJ-{3}j|dVHC2q(lHwTdlVFkGZNkL)^$S2W6;0oZ0-W9eEtncx+=w4IR2O=Gj4^)}F z`dc0cS6$}}n$K%eRCm}!n`{m}dS0W(AqRY(5p za?EUPpxR80HCG2_w$(vPmPxO{0KHpnhD}G2h-J`Dw+?e-Gz!CrcC%pW30bdM z0JicL=d%)1S)ah0dV`AxeBZbG%zGi@0+y@HKKu8*0VpUBI22w>x{4TbCWV%+nN){n zdfFbeJ#EK&8?{!kSmyv+)%QF7^Bj%QPw*F=i3+ubyKK)oT+~t*uTe0rY(C5ToL;l} zMYD!?AcRgaBZ-%*17`DpY`xYj(50#Tmt&C{Q$)7^+@I73l`lbiN4%b1^ihg=p*wgImTcf?l5PNe>6(t8`;wE|tKFA)DrLH->!_n`m-) z@2qOz@Kx6|tuSuk@A!m>-9x;q(FP;xd1I9GdnS7;=S1t4C1C6ePfOpehdr_c-xdfJ$o(79{RB|S_$-5sqJ}Oh z)JniARvyCzLiXjQh6naaV|04ea#5{g$^;*Hy4j5(Mpg4>ToHxa5l<#mqc348^x1+i3S9H zUw3`I6cI==i-1uk;EiA+j-ne5COVM8GdTUrMOS8qxrfL z-L+nn-eJNJ$rs5Ch7I|cFHZVI)2Ha`rOfOjU`7#9_J2AK%A77(x&Nk#XQMGeP;)x| ze;Wy>i?vO9(H6PdQ`sijSSfk?)l>F_YGa54?%7L%TVYTuzrbTFM*z zCdd4Fv=axUv+~LrKwTL6RSv=IR8qo>pj9BKQhC4dTf@SD-3{?C!sZj0eI$D*j3{~w zx516ce@CuZ!)@oUxa?Su2_Gf@y-gp4Czt=8yqkvGh8+23ks~HdJoshxQ}9jdn8%`3 zmB4t+7+E6#%?XrE@;rKG4@8ci0 z`Ad5HY1>owxcw;t>Ej;<{)H|HTqcw=&{gAzI7GxAsBqdM(aR8-Ya^!}1$yVpK%sd` z;_WZGY~T78eeflR*Xwx6=6~teWe_u6g)66&XYdms z`;2lH@L=!78L-U80gJrNTh=JF@c_Oitd>bwE#1?2hyg35F?T|_P1rhSOgNfDVy;*j zG+t9x9x^+f%1wV(t?Hl6W()k)=3*VytyGITIuv+4B!W%2`!A}d{>5ar7&;~eOgyZr z#;YcBlFG6D1Ld&%4n!_i7ZPguQ#^!HuhDl7{zbJae=(Uf{wquAJBq>oOm$+kC;`hV zDL(OB2_8e&%>0!pK!GlN2ll{&@O{t6Wc#!Ypg_!rvl-zc!&Vn=g{%X)NJH2Kv=9g? zH0E4MqgIsFx6j*>%{U!BZTCF>=&~-v;)3OP@eq$IAK|f(Qu?sfTKcRKDt(q9ty`N_9r_GNEfiz`NNZ{qlCrg^qQZ;G7pKQ$ z!$-RmtJ@k+06JyKV#V&kM{z^RrxgjLNpZPKAS$iv*6*TGyKOzTTS9-GdjYYcZDQ>e z?KF4Eo~DwOrfZCkzIYtW6?7qg@rP@ z#q*S^^V9?>trt6}82-nrLT5CePdgK;dUls1>M=Vm_xS$FVtU!%+z^R0H2YsRn~l4{ z(%&sv_y=a3O7dj_q*H?!=)9OKqLpRj5k&B(IG-2uY!+Q0qCusrFqr79;8^E4MMEX+ zMD5*$&l%*sTPdPjCUBhmBrb)(+eIO-#wUD^4O9E9Ss!vLr)#KBYUB|C)u%;Ogva#8 z2^(>F{P2gd72j^-!|TPyYu4qo@fvDVKZ@WuRkkUGHZ8@TLswvj?qjrb`INu&BCS&? zd^gdVJHL_T9h)ob*z$b&V$JgV<@s505|zQfE2l7HgyR$*Plv~AC|84!`N!$tpo8)D zH++0?6e7TQckhSG@o2oy6ZD+-f8xArToPU({xDu2#yUjWzi1)m+Az<9I6_(*K+`-T zvW51HvFJe1)Cva@0C<)tA&qw85sqJ!6U8Xjs5tLHmCJWldBla4V;`Yz|A@n@|Jz40 zoj{S-L3jB5kJ0_d93I^247%tx5e}8XY5;ns(viP{%G33XcxSq-BIk~?`EeM>;$xsK&OUK>qNW`Zcx+3#zTk# zd&B2{t3HBHr?Cc?^z;QLH>NKx@d>|!Ch9*e4xgsEeLC>#XSr!CoaN?|z$z3_vtROo9TdTFJ*D~zTYj& zy8SUec*x&XG4Sw;`eE!>K=W!F z-;9o+LpOz#(-5{ILIOzoQQSbdEhyp{I}tX}!xeS!mQBsAtzv=2bq5@3Zmrj13i#}Hhdtxhoi5JTF6v$Dcfwh&{QTm}x8){iVrwx&Ls_VTKF_*# zMRnM-KHZPkX%V-&_C_pNbKpxQId@7qg&o%$5i7j7*m4n2m&ua%z37k^E9j;c1d2`B zpnb|dmeFxj>j)IKV_@6r)!PRCUY>UB+OvA)oQ%binX_`$RiC|TRq0~&o?TdinOuMc zpjdZS?9ja{7Vg=zaD_bf&TUxTlCuSDxt7%pb7x#&k3d-wwNICNQu5-@DV^v?S|KNA z8D?AQgHSN)7Yglga~L?#xDkBVWZD2(@c8AI{%61o|tcq=q7F1bB4!Z zwyx5mA+xs1if9v8*pyOT6*!t)m?W`nv+_X9w$-LgzTomIK_wXTU{~A_UominE#fiR zH}2T6$!79IY*!4#w5a21huIT#3^~k)OfJ`3Tw%>g$G2G(`(As@r`Y@K(fgE;>qeK? zB#zJ$@dsO&=D;ZCo0VJKYMIG9BacBx+(DSZWud#}VZ6FhoHskih_OZW(z&>%MCrvh zFS1@EJhcR7I)_0o*K72icUJbwaOD4_5?gcy`1DO~abShzE0~h#%rw znC1psOA%j_xARj4@*;>*3nLa6hA0ZE8O#mR&Wse~udS{4da{8Y*2QBx_k_D#+cx48hKbviC&YM}+-8r$ zNeL7PS$B_GhcPmrV(sdomXKd#T1hMI7cs3ms6vkrD}tmVCw5MRh6a8iX2x(=O;7$~ zrn58i3h7y|kQ+%^1GNn5(l1%of&0KQT>|yN2>F4 zD)sYBC&x<1FSlPtTh}7c^2@MMuCm{ZmZFmQ2?EiMf5&>j2G}Nb^s6-Jq~hEnMX-_g zBqZleG0RB7lxPEKmRRJ0-X!0Fh&Gtoh>3!&5hyLguc@NwSS;cB=9L>a4A@=G9<$BA zzPh`zWB$TLdp2+C=x|~I;cYvwY>@<47c#?Y2e_){Zceyej{5k53Xj;O$?x_h>K1gZ zx7&kZwaS^xJ#^*R!T9Rb(ty?Cu5>spwp`nWO?w990>kx^a9@Yht=g#(Iz07}ITfC0 zs5O=e#;{itb|=b&V{@CE>M^M*dHv0*3A#%aXgW{(f6&4Z>QjnpNl=^Nikt4u89d_R z7g%-xj)cLaoB|XE>2Mfl*W(0@?t0m3y24Erixa4jYm#{74bZNL2qx$b7mmZ?!V_^@ z4)JM+qNK?)>M8h8`d_rm=I6aa?OtMeS5p+ znoM)Mc3p9`S7;-u@u<}iR-&tpCN0)Tg{5k5x6^Kqe8>3DWb5t?>zbNPEzN5;>|Fh} zj<)==1@rd}j$eJnF1&;GCOsO8IyAnUe4&(>D*J}G_W8Y{li$lDgD#1|EFzwhpNV%X zv5JQuvSI&z8uAZ4jND9g^OuPOJp8at?AR|d_$=rGens-lKdS3L})i{v5){p zIN=Oij=OD zcK(c!!h=yCS7z*@b=8gs+O!xJ56u7kf$5*D=oX5u_;HgzK}P~@LB+u_x!_|Czhbrf ztkICkYt~#Y^UUpSj{*>%8g%)6dy88F$=zqStP*;~_PwX4e@lZ;Os^F*z6%wM$QCj< zMrVBW6_+D6H)1z?Vp!!IrbUw)a63I`PWu>jVE$@3==PF*YKTE2sR0+t^h(Y!kVh!J z#F?z$mDYWh6p0D3OUorrXc;d+)12P*``qD8U*3@ECD3qCY)O-s+B^;N5xfDm))x^6)I`6#1_oV{rPbu@rUj;CLy_xHOil^4ycj(W$0I!x#o9?* z7gJ`Ua4}LFk4V;$RS!V9}Y8;EUeOzycdRZm-tg2DtKj#W=+b*RVVDQ^}x*_ez)%i?AY_( zH#5G>rS%^eW4TMnzuEE{c=?-*gEO9=T9!WihB@PnA5TB+5c_?&crQ5BB~s&WOB(=O z>^yO?2c`SJC4n!(iO-wEf3s1z(<;h&`yyZBaQqHh4NyKOPnX#KNeZ51#M#T%!iqe` zq|~KeP~HLUGKf`F^h+pM9nqk_BfE{CC)vYX*<(=Go3* z7(48AYRb*Mz1;70J^Af#f5z>rz=G2sAogyd&5gM8=j^WDT&=ONHkYgA&(-GOxk2Hp z(#O(gYzNnzG#);=X1}#I%7W#@O%u|M5IHH;HiUrwzlCvHuor@NEtdaJt*R0sQE=3FGSH8n!)dMypsn<%~ z%L0q10^TjmGe8ju=9)1N4owthKr_~nYuH%~Loz#C=jaJ4)|Jn>;h)W7jV=As1SBR| zhFXuZfRIlsO`sklDVExN9I*Wf{}l}5QRoh zZF?lxy(Uz>q&jO)xvrY)s0_uLR@OVMSg0DWZkW^QgQixJn+kZc1^x{Oc1%iQkKXy% z_iQUTz}5KO+?(;+zqbQdZK-fuHV4P7-WG0CXTy)$Dd-eo2VI>lV!3fJ)1q`~KnqM1 z%($ky!a>lt*klL`rm`L~%7DZi)D<20%yvR65r#Ibn@|q-f!Y)*3!5X2@22>1zGVx4 zj&HvELOfPfh8_69BnuYW9CbOac51I}TNb?Kb?P5_Zux*{^n( zxbtDFX5L3-t-zJ_DPWIsL_V+pR6Ot1GLE;2FO{X{Yse=cW=|l?yCZf(0e2 zAOD)v_axm0#60S3ct>nEHc6o1PT+~qh(rzwLN0G^;_`MX^IWM3x#;|`_d@|Ih(4ev&HO9{%hFj3`L@T zi^c9$Rj=J*@kb+}NQ7g-Tez~KJ+QT7?%doqJy(H!bTKxk`KR1thjv4nhn+hI#0ZrJ zPq;Mwk(K5TmU2y*LbDSioJ?9?Y)B*atIWu~VZs)3nDA4!g`4ZAz^L^IlKyZa~ zg~R8Ae)-9O(?{3uy^zqJ(36fu{?%>U+L|_WX*O%)%6e=;uDaUN{)Uwe4J)^-Z1j5- zE4?M`!_ThKYc}}sg|M$*euIDFLOPn9)UXgbx2j=fePTX-W?@Md6OFyim9|v(%I;LE zySA#bqD*(%jNi_@gPj77QnVbDd}{DQS;z@bXE9G0qTM^EugYc*$!`Z8m;6@UkQCEb z6qhh7LN#pu1xf<>h!`Tl>mZuMb~nN~ki!fuh)w?d4qiAVvy=rMlTxABkj&VQ5lc!< zCTvw>QbQ_&r*ITmlUa4CI213Zp4jj^cr}W7(S_ac8EoC|H)|HV&1|t_9i7=8NL89m zm3GfP9!Is;7J2luu?pCP(Tvk~zu%b(g)74q{1$VY$<$`Hs&h@6$zrBekqG3%)^>i{ z4$qIw^i9n)SJn7K7xvY^n^X@LW?DUn%L193tW{Ofgu|I?(M-mbUT<4CoolXhxwFmf znMkV_VVcrDCfifR>e-}N*_+aGvtpVidxdhCz)vEQx`?<4<*AXTk#}8)1LIKyp z&aaMFM4{SOrs8wB$Ex|t?U>D3Ud%i2#!=8SH__}!hTT%k(|q{Hi+T8K*%ym>75Beh%#+{w z2gSUZg;=4OC+&>3Kcsis*>>(K<{d1<`AZb#?AXxAk$78kYw6a?!6SoXrPmxgaiD#Ce1ClZ*vR4d3cPP{cz7f}IyQ3k zVE=gY!SV6Y`7JH<9lGD#KXMpu<}tVy`q(&*11yf8GPoAUA#8s$f-M~Oi{tnO*IQ8f z09>iVs5y4Q)AMU@N9i$y77dBF#qne8%?KYmztl>UIwDG*56v;CZ3obOT_33Kg&g|4QvCm2Vd9gkcEYA^wD8t(Y%A z-H(lIRYb;uJ>sVat=z`#+`*mP1=o^?d%2JMxy}PT$U{8LBfNq~d5l-WYNRO7I8X2- zPhlB+nrC>H*YSGZfJv4nJ_oi=3vcCZyq)KG2k+!v_yNbcd>)?_^@*#dTKg5UmVSa><@KJu0kMU!C9O~!^ev)6qujSYAxA5!v z4g5y_RzAUR;y3eK_^teH{5F0&zk}b&@8Wm!xAS-Kck+Aqz5HGLKK^e09{yhbKK_3G z0e(OKJ7yal8#>ZIG}<@p=o=Uq8$5Pw-^j=z5AyrRh6axe9GkO$Xn5E@eeK@Y*MI2P zXkY)Jcw(EnbnWXqa;U#=Y(U(%maZKAeTPB&;-*FBo&9~I2V?+C|b(J#WnG?g|@Zb?yP%B=z>3sai(D=2YjBV=D(LZv0bmU0!+ahln7#toP zA9To*{NCWe(725b;?lLhZ{P9Zk>j%E*3y+}|Im>E8y)0F4h{~F%IcJ}9UM6<5n`g8 zV`yLs6Bd~_4S{#q=pbr2hK`&V8kbcpGH*LHxc|6(CFN|xLx+m5q?~nlq`z+*e8pAD z$fCG9WTS()v>omn8kP?zryWLz_8k~>7SG~|hAo8!J9Q&PtaD`-b;Bj*Smab)wAMPWBZ$%S1WtWZ&44p(6*J#j||L z=iBt84|wY_g_ zY~-YPWE0up!TsYhN3S-~rE+}KEJ~PY5US%Nqt=13kx_c?Kz|TQM6F`}_^7j(6O~Fu zsJJ#ZxF2Kxpf)_xH-KuEV`zH+LCe_4IHZ>4SpV4I;1LUND|tiSJw z<>*-d$iSfGWZy8xl?^g$aP;8FkwNXm(6OO?!-JssV$Otddt4hC6@t)wY#mU@Y;PN;6tX-;l69lC-9vS^NA4B)xcC+t)YTccg#NQDR-AsDAPq94≺E>ls*8IQnQ7aw* literal 0 HcmV?d00001 diff --git a/components/firstui/fui-icon/fui-icon.vue b/components/firstui/fui-icon/fui-icon.vue new file mode 100644 index 0000000..452b742 --- /dev/null +++ b/components/firstui/fui-icon/fui-icon.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/components/firstui/fui-list-cell/fui-list-cell.vue b/components/firstui/fui-list-cell/fui-list-cell.vue new file mode 100644 index 0000000..bc5f7e6 --- /dev/null +++ b/components/firstui/fui-list-cell/fui-list-cell.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/components/firstui/fui-theme/fui-theme.css b/components/firstui/fui-theme/fui-theme.css new file mode 100644 index 0000000..9fbfb2a --- /dev/null +++ b/components/firstui/fui-theme/fui-theme.css @@ -0,0 +1,85 @@ +/* + FirstUI组件内置的基础变量 + 1.如果你是组件使用者,你可以通过修改这些变量的值来定制自己的组件主题,实现自定义主题功能 + 2.如果全局修改需要在项目根目录下App.vue文件中引入此css文件 + 3.如果组件中有props属性是针对颜色设置(默认为空值),则优先级:props变量(如果有传值)> 全局主题色 +*/ + +/* #ifndef APP-NVUE */ +page { + /* 行为相关颜色 */ + --fui-color-primary: #465CFF; + --fui-color-success: #09BE4F; + --fui-color-warning: #FFB703; + --fui-color-danger: #FF2B2B; + --fui-color-purple: #6831FF; + + /* 文字基本颜色、其他辅助色 */ + /* 用于重量级文字信息、标题 */ + --fui-color-title: #181818; + /* 用于普通级段落信息、引导词 */ + --fui-color-section: #333333; + /* 用于次要标题内容 */ + --fui-color-subtitle: #7F7F7F; + /* 用于底部标签、描述、次要文字信息 */ + --fui-color-label: #B2B2B2; + /* 用于辅助、次要信息、禁用文字等。如:待输入状态描述文字,已点击按钮文字 */ + --fui-color-minor: #CCCCCC; + --fui-color-white: #FFFFFF; + /* 链接颜色 */ + --fui-color-link: #465CFF; + + + /* 背景颜色 */ + --fui-bg-color: #ffffff; + /* 页面背景底色 */ + --fui-bg-color-grey: #F1F4FA; + /* 内容模块底色 */ + --fui-bg-color-content: #F8F8F8; + --fui-bg-color-red: rgba(255, 43, 43, .05); + --fui-bg-color-yellow: rgba(255, 183, 3, .1); + --fui-bg-color-purple: rgba(104, 49, 255, .05); + --fui-bg-color-green: rgba(9, 190, 79, .05); + /* 点击背景色 */ + --fui-bg-color-hover: rgba(0, 0, 0, 0.2); + /* 遮罩颜色 */ + --fui-bg-color-mask: rgba(0, 0, 0, 0.6); + + + /* 边框颜色 */ + --fui-color-border: #EEEEEE; + + /* 阴影颜色 */ + --fui-color-shadow: rgba(2, 4, 38, 0.05); + + /*禁用态的透明度 */ + --fui-opacity-disabled: 0.5; + + /* 图标尺寸 */ + --fui-img-size-sm: 48rpx; + --fui-img-size-base: 56rpx; + --fui-img-size-middle: 64rpx; + --fui-img-size-lg: 96rpx; + + /* 图片尺寸 */ + --fui-img-sm: 60rpx; + --fui-img-base: 120rpx; + --fui-img-lg: 240rpx; + + /* Border Radius */ + --fui-border-radius-sm: 16rpx; + --fui-border-radius-base: 24rpx; + --fui-border-radius-lg: 48rpx; + --fui-border-radius-circle: 50%; + + /* 水平间距 */ + --fui-spacing-row-sm: 16rpx; + --fui-spacing-row-base: 24rpx; + --fui-spacing-row-lg: 32rpx; + + /* 垂直间距 */ + --fui-spacing-col-sm: 8rpx; + --fui-spacing-col-base: 16rpx; + --fui-spacing-col-lg: 24rpx; +} +/* #endif */ diff --git a/components/grid/grid.vue b/components/grid/grid.vue new file mode 100644 index 0000000..7b04232 --- /dev/null +++ b/components/grid/grid.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/components/helang-asyncSwitch/helang-asyncSwitch.vue b/components/helang-asyncSwitch/helang-asyncSwitch.vue new file mode 100644 index 0000000..641c270 --- /dev/null +++ b/components/helang-asyncSwitch/helang-asyncSwitch.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/components/item-drop/item-drop.vue b/components/item-drop/item-drop.vue new file mode 100644 index 0000000..b80264d --- /dev/null +++ b/components/item-drop/item-drop.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/components/item-scan/item-scan.vue b/components/item-scan/item-scan.vue new file mode 100644 index 0000000..56a56e8 --- /dev/null +++ b/components/item-scan/item-scan.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/components/loading/loading.vue b/components/loading/loading.vue new file mode 100644 index 0000000..436c271 --- /dev/null +++ b/components/loading/loading.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/components/mescroll-uni/components/mescroll-down.css b/components/mescroll-uni/components/mescroll-down.css new file mode 100644 index 0000000..5c43853 --- /dev/null +++ b/components/mescroll-uni/components/mescroll-down.css @@ -0,0 +1,56 @@ +/* 下拉刷新区域 */ +.mescroll-downwarp { + position: absolute; + top: -100%; + left: 0; + width: 100%; + height: 100%; + text-align: center; +} + +/* 下拉刷新--内容区,定位于区域底部 */ +.mescroll-downwarp .downwarp-content { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + min-height: 60rpx; + padding: 20rpx 0; + text-align: center; +} + +/* 下拉刷新--提示文本 */ +.mescroll-downwarp .downwarp-tip { + display: inline-block; + font-size: 28rpx; + vertical-align: middle; + margin-left: 16rpx; + /* color: gray; 已在style设置color,此处删去*/ +} + +/* 下拉刷新--旋转进度条 */ +.mescroll-downwarp .downwarp-progress { + display: inline-block; + width: 32rpx; + height: 32rpx; + border-radius: 50%; + border: 2rpx solid gray; + border-bottom-color: transparent !important; + /*已在style设置border-color,此处需加 !important*/ + vertical-align: middle; +} + +/* 旋转动画 */ +.mescroll-downwarp .mescroll-rotate { + animation: mescrollDownRotate 0.6s linear infinite; +} + +@keyframes mescrollDownRotate { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} diff --git a/components/mescroll-uni/components/mescroll-down.vue b/components/mescroll-uni/components/mescroll-down.vue new file mode 100644 index 0000000..3f8b15e --- /dev/null +++ b/components/mescroll-uni/components/mescroll-down.vue @@ -0,0 +1,54 @@ + + + + + + diff --git a/components/mescroll-uni/components/mescroll-empty.vue b/components/mescroll-uni/components/mescroll-empty.vue new file mode 100644 index 0000000..e6c0726 --- /dev/null +++ b/components/mescroll-uni/components/mescroll-empty.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/components/mescroll-uni/components/mescroll-top.vue b/components/mescroll-uni/components/mescroll-top.vue new file mode 100644 index 0000000..5485436 --- /dev/null +++ b/components/mescroll-uni/components/mescroll-top.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/components/mescroll-uni/components/mescroll-up.css b/components/mescroll-uni/components/mescroll-up.css new file mode 100644 index 0000000..c744389 --- /dev/null +++ b/components/mescroll-uni/components/mescroll-up.css @@ -0,0 +1,47 @@ +/* 上拉加载区域 */ +.mescroll-upwarp { + min-height: 60rpx; + padding: 30rpx 0; + text-align: center; + clear: both; +} + +/*提示文本 */ +.mescroll-upwarp .upwarp-tip, +.mescroll-upwarp .upwarp-nodata { + display: inline-block; + font-size: 28rpx; + vertical-align: middle; + /* color: gray; 已在style设置color,此处删去*/ +} + +.mescroll-upwarp .upwarp-tip { + margin-left: 16rpx; +} + +/*旋转进度条 */ +.mescroll-upwarp .upwarp-progress { + display: inline-block; + width: 32rpx; + height: 32rpx; + border-radius: 50%; + border: 2rpx solid gray; + border-bottom-color: transparent !important; + /*已在style设置border-color,此处需加 !important*/ + vertical-align: middle; +} + +/* 旋转动画 */ +.mescroll-upwarp .mescroll-rotate { + animation: mescrollUpRotate 0.6s linear infinite; +} + +@keyframes mescrollUpRotate { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} diff --git a/components/mescroll-uni/components/mescroll-up.vue b/components/mescroll-uni/components/mescroll-up.vue new file mode 100644 index 0000000..9754c9d --- /dev/null +++ b/components/mescroll-uni/components/mescroll-up.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/components/mescroll-uni/mescroll-body.css b/components/mescroll-uni/mescroll-body.css new file mode 100644 index 0000000..86cd5f8 --- /dev/null +++ b/components/mescroll-uni/mescroll-body.css @@ -0,0 +1,15 @@ +page { + -webkit-overflow-scrolling: touch; + /* 使iOS滚动流畅 */ +} + +.mescroll-body { + position: relative; + /* 下拉刷新区域相对自身定位 */ + height: auto; + /* 不可固定高度,否则overflow: hidden, 可通过设置最小高度使列表不满屏仍可下拉*/ + overflow: hidden; + /* 遮住顶部下拉刷新区域 */ + box-sizing: border-box; + /* 避免设置padding出现双滚动条的问题 */ +} diff --git a/components/mescroll-uni/mescroll-body.vue b/components/mescroll-uni/mescroll-body.vue new file mode 100644 index 0000000..2067042 --- /dev/null +++ b/components/mescroll-uni/mescroll-body.vue @@ -0,0 +1,309 @@ + + + + + diff --git a/components/mescroll-uni/mescroll-mixins.js b/components/mescroll-uni/mescroll-mixins.js new file mode 100644 index 0000000..4b3ba3f --- /dev/null +++ b/components/mescroll-uni/mescroll-mixins.js @@ -0,0 +1,60 @@ +// mescroll-body 和 mescroll-uni 通用 + +// import MescrollUni from "./mescroll-uni.vue"; +// import MescrollBody from "./mescroll-body.vue"; + +const MescrollMixin = { + // components: { // 非H5端无法通过mixin注册组件, 只能在main.js中注册全局组件或具体界面中注册 + // MescrollUni, + // MescrollBody + // }, + data() { + return { + mescroll: null //mescroll实例对象 + } + }, + // 注册系统自带的下拉刷新 (配置down.native为true时生效, 还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + onPullDownRefresh() { + this.mescroll && this.mescroll.onPullDownRefresh(); + }, + // 注册列表滚动事件,用于判定在顶部可下拉刷新,在指定位置可显示隐藏回到顶部按钮 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效) + onPageScroll(e) { + this.mescroll && this.mescroll.onPageScroll(e); + }, + // 注册滚动到底部的事件,用于上拉加载 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效) + onReachBottom() { + this.mescroll && this.mescroll.onReachBottom(); + }, + methods: { + // mescroll组件初始化的回调,可获取到mescroll对象 + mescrollInit(mescroll) { + this.mescroll = mescroll; + this.mescrollInitByRef(); // 兼容字节跳动小程序 + }, + // 以ref的方式初始化mescroll对象 (兼容字节跳动小程序: http://www.mescroll.com/qa.html?v=20200107#q26) + mescrollInitByRef() { + if (!this.mescroll || !this.mescroll.resetUpScroll) { + let mescrollRef = this.$refs.mescrollRef; + if (mescrollRef) this.mescroll = mescrollRef.mescroll + } + }, + // 下拉刷新的回调 + downCallback() { + // mixin默认resetUpScroll + this.mescroll.resetUpScroll() + }, + // 上拉加载的回调 + upCallback() { + // mixin默认延时500自动结束加载 + setTimeout(() => { + this.mescroll.endErr(); + }, 500) + } + }, + mounted() { + this.mescrollInitByRef(); // 兼容字节跳动小程序, 避免未设置@init或@init此时未能取到ref的情况 + } + +} + +export default MescrollMixin; diff --git a/components/mescroll-uni/mescroll-uni-option.js b/components/mescroll-uni/mescroll-uni-option.js new file mode 100644 index 0000000..fea7850 --- /dev/null +++ b/components/mescroll-uni/mescroll-uni-option.js @@ -0,0 +1,34 @@ +// 全局配置 +// mescroll-body 和 mescroll-uni 通用 +const GlobalOption = { + down: { + // 其他down的配置参数也可以写,这里只展示了常用的配置: + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 + offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 + native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + }, + up: { + // 其他up的配置参数也可以写,这里只展示了常用的配置: + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + offset: 80, // 距底部多远时,触发upCallback + isBounce: false, // 默认禁止橡皮筋的回弹效果, 必读事项: http://www.mescroll.com/qa.html?v=190725#q25 + toTop: { + // 回到顶部按钮,需配置src才显示 + src: "/static/img/uniapp/mescrollTotop.png", // 图片路径 (建议放入static目录, 如 /static/img/mescroll-totop.png ) + offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000px + right: 20, // 到右边的距离, 默认20 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + bottom: 120, // 到底部的距离, 默认120 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + width: 72 // 回到顶部图标的宽度, 默认72 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + }, + empty: { + use: true, // 是否显示空布局 + icon: "/static/img/uniapp/zanwushuju.png", // 图标路径 (建议放入static目录, 如 /static/img/mescroll-empty.png ) + tip: '' // 提示 + } + } +} + +export default GlobalOption diff --git a/components/mescroll-uni/mescroll-uni.css b/components/mescroll-uni/mescroll-uni.css new file mode 100644 index 0000000..1c97a00 --- /dev/null +++ b/components/mescroll-uni/mescroll-uni.css @@ -0,0 +1,33 @@ +page { + height: 100%; + box-sizing: border-box; + /* 避免设置padding出现双滚动条的问题 */ +} + +.mescroll-uni-warp { + height: 100%; +} + +.mescroll-uni { + position: relative; + width: 100%; + height: 100%; + min-height: 200rpx; + overflow-y: auto; + box-sizing: border-box; + /* 避免设置padding出现双滚动条的问题 */ +} + +/* 定位的方式固定高度 */ +.mescroll-uni-fixed { + z-index: 1; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: auto; + /* 使right生效 */ + height: auto; + /* 使bottom生效 */ +} diff --git a/components/mescroll-uni/mescroll-uni.js b/components/mescroll-uni/mescroll-uni.js new file mode 100644 index 0000000..e0aa330 --- /dev/null +++ b/components/mescroll-uni/mescroll-uni.js @@ -0,0 +1,869 @@ +/* mescroll + * version 1.2.5 + * 2020-03-15 wenju + * http://www.mescroll.com + */ + +export default function MeScroll(options, isScrollBody) { + let me = this; + me.version = '1.2.5'; // mescroll版本号 + me.options = options || {}; // 配置 + me.isScrollBody = isScrollBody || false; // 滚动区域是否为原生页面滚动; 默认为scroll-view + + me.isDownScrolling = false; // 是否在执行下拉刷新的回调 + me.isUpScrolling = false; // 是否在执行上拉加载的回调 + let hasDownCallback = me.options.down && me.options.down.callback; // 是否配置了down的callback + + // 初始化下拉刷新 + me.initDownScroll(); + // 初始化上拉加载,则初始化 + me.initUpScroll(); + + // 自动加载 + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + // 自动触发下拉刷新 (只有配置了down的callback才自动触发下拉刷新) + if (me.optDown.use && me.optDown.auto && hasDownCallback) { + if (me.optDown.autoShowLoading) { + me.triggerDownScroll(); // 显示下拉进度,执行下拉回调 + } else { + me.optDown.callback && me.optDown.callback(me); // 不显示下拉进度,直接执行下拉回调 + } + } + // 自动触发上拉加载 + setTimeout(function() { // 延时确保先执行down的callback,再执行up的callback,因为部分小程序emit是异步,会导致isUpAutoLoad判断有误 + me.optUp.use && me.optUp.auto && !me.isUpAutoLoad && me.triggerUpScroll(); + }, 100) + }, 30); // 需让me.optDown.inited和me.optUp.inited先执行 +} + +/* 配置参数:下拉刷新 */ +MeScroll.prototype.extendDownScroll = function(optDown) { + // 下拉刷新的配置 + MeScroll.extend(optDown, { + use: true, // 是否启用下拉刷新; 默认true + auto: true, // 是否在初始化完毕之后自动执行下拉刷新的回调; 默认true + native: false, // 是否使用系统自带的下拉刷新; 默认false; 仅mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + autoShowLoading: false, // 如果设置auto=true(在初始化完毕之后自动执行下拉刷新的回调),那么是否显示下拉刷新的进度; 默认false + isLock: false, // 是否锁定下拉刷新,默认false; + offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 + startTop: 100, // scroll-view滚动到顶部时,此时的scroll-top不一定为0, 此值用于控制最大的误差 + fps: 80, // 下拉节流 (值越大每秒刷新频率越高) + inOffsetRate: 1, // 在列表顶部,下拉的距离小于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 + outOffsetRate: 0.2, // 在列表顶部,下拉的距离大于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 + bottomOffset: 20, // 当手指touchmove位置在距离body底部20px范围内的时候结束上拉刷新,避免Webview嵌套导致touchend事件不执行 + minAngle: 45, // 向下滑动最少偏移的角度,取值区间 [0,90];默认45度,即向下滑动的角度大于45度则触发下拉;而小于45度,将不触发下拉,避免与左右滑动的轮播等组件冲突; + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 + bgColor: "transparent", // 背景颜色 (建议在pages.json中再设置一下backgroundColorTop) + textColor: "gray", // 文本颜色 (当bgColor配置了颜色,而textColor未配置时,则textColor会默认为白色) + inited: null, // 下拉刷新初始化完毕的回调 + inOffset: null, // 下拉的距离进入offset范围内那一刻的回调 + outOffset: null, // 下拉的距离大于offset那一刻的回调 + onMoving: null, // 下拉过程中的回调,滑动过程一直在执行; rate下拉区域当前高度与指定距离的比值(inOffset: rate<1; outOffset: rate>=1); downHight当前下拉区域的高度 + beforeLoading: null, // 准备触发下拉刷新的回调: 如果return true,将不触发showLoading和callback回调; 常用来完全自定义下拉刷新, 参考案例【淘宝 v6.8.0】 + showLoading: null, // 显示下拉刷新进度的回调 + afterLoading: null, // 准备结束下拉的回调. 返回结束下拉的延时执行时间,默认0ms; 常用于结束下拉之前再显示另外一小段动画,才去隐藏下拉刷新的场景, 参考案例【dotJump】 + endDownScroll: null, // 结束下拉刷新的回调 + callback: function(mescroll) { + // 下拉刷新的回调;默认重置上拉加载列表为第一页 + mescroll.resetUpScroll(); + } + }) +} + +/* 配置参数:上拉加载 */ +MeScroll.prototype.extendUpScroll = function(optUp) { + // 上拉加载的配置 + MeScroll.extend(optUp, { + use: true, // 是否启用上拉加载; 默认true + auto: true, // 是否在初始化完毕之后自动执行上拉加载的回调; 默认true + isLock: false, // 是否锁定上拉加载,默认false; + isBoth: true, // 上拉加载时,如果滑动到列表顶部是否可以同时触发下拉刷新;默认true,两者可同时触发; + isBounce: false, // 默认禁止橡皮筋的回弹效果, 必读事项: http://www.mescroll.com/qa.html?v=190725#q25 + callback: null, // 上拉加载的回调;function(page,mescroll){ } + page: { + num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始 + size: 10, // 每页数据的数量 + time: null // 加载第一页数据服务器返回的时间; 防止用户翻页时,后台新增了数据从而导致下一页数据重复; + }, + noMoreSize: 5, // 如果列表已无数据,可设置列表的总数量要大于等于5条才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看 + offset: 80, // 距底部多远时,触发upCallback + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + bgColor: "transparent", // 背景颜色 (建议在pages.json中再设置一下backgroundColorBottom) + textColor: "gray", // 文本颜色 (当bgColor配置了颜色,而textColor未配置时,则textColor会默认为白色) + inited: null, // 初始化完毕的回调 + showLoading: null, // 显示加载中的回调 + showNoMore: null, // 显示无更多数据的回调 + hideUpScroll: null, // 隐藏上拉加载的回调 + errDistance: 60, // endErr的时候需往上滑动一段距离,使其往下滑动时再次触发onReachBottom,仅mescroll-body生效 + toTop: { + // 回到顶部按钮,需配置src才显示 + src: null, // 图片路径,默认null (绝对路径或网络图) + offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000 + duration: 300, // 回到顶部的动画时长,默认300ms (当值为0或300则使用系统自带回到顶部,更流畅; 其他值则通过step模拟,部分机型可能不够流畅,所以非特殊情况不建议修改此项) + btnClick: null, // 点击按钮的回调 + onShow: null, // 是否显示的回调 + zIndex: 9990, // fixed定位z-index值 + left: null, // 到左边的距离, 默认null. 此项有值时,right不生效. (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + right: 20, // 到右边的距离, 默认20 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + bottom: 120, // 到底部的距离, 默认120 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + safearea: false, // bottom的偏移量是否加上底部安全区的距离, 默认false, 需要适配iPhoneX时使用 (具体的界面如果不配置此项,则取本vue的safearea值) + width: 72, // 回到顶部图标的宽度, 默认72 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + radius: "50%" // 圆角, 默认"50%" (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + }, + empty: { + use: true, // 是否显示空布局 + icon: null, // 图标路径 + tip: '~ 暂无相关数据 ~', // 提示 + btnText: '', // 按钮 + btnClick: null, // 点击按钮的回调 + onShow: null, // 是否显示的回调 + fixed: false, // 是否使用fixed定位,默认false; 配置fixed为true,以下的top和zIndex才生效 (transform会使fixed失效,最终会降级为absolute) + top: "100rpx", // fixed定位的top值 (完整的单位值,如 "10%"; "100rpx") + zIndex: 99 // fixed定位z-index值 + }, + onScroll: false // 是否监听滚动事件 + }) +} + +/* 配置参数 */ +MeScroll.extend = function(userOption, defaultOption) { + if (!userOption) return defaultOption; + for (let key in defaultOption) { + if (userOption[key] == null) { + let def = defaultOption[key]; + if (def != null && typeof def === 'object') { + userOption[key] = MeScroll.extend({}, def); // 深度匹配 + } else { + userOption[key] = def; + } + } else if (typeof userOption[key] === 'object') { + MeScroll.extend(userOption[key], defaultOption[key]); // 深度匹配 + } + } + return userOption; +} + +/* 简单判断是否配置了颜色 (非透明,非白色) */ +MeScroll.prototype.hasColor = function(color) { + if (!color) return false; + let c = color.toLowerCase(); + return c != "#fff" && c != "#ffffff" && c != "transparent" && c != "white" +} + +/* -------初始化下拉刷新------- */ +MeScroll.prototype.initDownScroll = function() { + let me = this; + // 配置参数 + me.optDown = me.options.down || {}; + if (!me.optDown.textColor && me.hasColor(me.optDown.bgColor)) me.optDown.textColor = + "#fff"; // 当bgColor有值且textColor未设置,则textColor默认白色 + me.extendDownScroll(me.optDown); + + // 如果是mescroll-body且配置了native,则禁止自定义的下拉刷新 + if (me.isScrollBody && me.optDown.native) { + me.optDown.use = false + } else { + me.optDown.native = false // 仅mescroll-body支持,mescroll-uni不支持 + } + + me.downHight = 0; // 下拉区域的高度 + + // 在页面中加入下拉布局 + if (me.optDown.use && me.optDown.inited) { + // 初始化完毕的回调 + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + me.optDown.inited(me); + }, 0) + } +} + +/* 列表touchstart事件 */ +MeScroll.prototype.touchstartEvent = function(e) { + if (!this.optDown.use) return; + + this.startPoint = this.getPoint(e); // 记录起点 + this.startTop = this.getScrollTop(); // 记录此时的滚动条位置 + this.lastPoint = this.startPoint; // 重置上次move的点 + this.maxTouchmoveY = this.getBodyHeight() - this.optDown.bottomOffset; // 手指触摸的最大范围(写在touchstart避免body获取高度为0的情况) + this.inTouchend = false; // 标记不是touchend +} + +/* 列表touchmove事件 */ +MeScroll.prototype.touchmoveEvent = function(e) { + // #ifdef H5 + window.isPreventDefault = false // 标记不需要阻止window事件 + // #endif + + if (!this.optDown.use) return; + if (!this.startPoint) return; + let me = this; + + // 节流 + let t = new Date().getTime(); + if (me.moveTime && t - me.moveTime < me.moveTimeDiff) { // 小于节流时间,则不处理 + return; + } else { + me.moveTime = t + if (!me.moveTimeDiff) me.moveTimeDiff = 1000 / me.optDown.fps + } + + let scrollTop = me.getScrollTop(); // 当前滚动条的距离 + let curPoint = me.getPoint(e); // 当前点 + + let moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + + // 向下拉 && 在顶部 + // mescroll-body,直接判定在顶部即可 + // scroll-view在滚动时不会触发touchmove,当触顶/底/左/右时,才会触发touchmove + // scroll-view滚动到顶部时,scrollTop不一定为0; 在iOS的APP中scrollTop可能为负数,不一定和startTop相等 + if (moveY > 0 && ( + (me.isScrollBody && scrollTop <= 0) || + (!me.isScrollBody && (scrollTop <= 0 || (scrollTop <= me.optDown.startTop && scrollTop === me + .startTop))) + )) { + // 可下拉的条件 + if (!me.inTouchend && !me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me + .isUpScrolling && + me.optUp.isBoth))) { + + // 下拉的角度是否在配置的范围内 + let angle = me.getAngle(me.lastPoint, curPoint); // 两点之间的角度,区间 [0,90] + if (angle < me.optDown.minAngle) return; // 如果小于配置的角度,则不往下执行下拉刷新 + + // 如果手指的位置超过配置的距离,则提前结束下拉,避免Webview嵌套导致touchend无法触发 + if (me.maxTouchmoveY > 0 && curPoint.y >= me.maxTouchmoveY) { + me.inTouchend = true; // 标记执行touchend + me.touchendEvent(); // 提前触发touchend + return; + } + + // #ifdef H5 + window.isPreventDefault = true // 标记阻止window事件 + // #endif + me.preventDefault(e); // 阻止默认事件 + + let diff = curPoint.y - me.lastPoint.y; // 和上次比,移动的距离 (大于0向下,小于0向上) + + // 下拉距离 < 指定距离 + if (me.downHight < me.optDown.offset) { + if (me.movetype !== 1) { + me.movetype = 1; // 加入标记,保证只执行一次 + me.optDown.inOffset && me.optDown.inOffset(me); // 进入指定距离范围内那一刻的回调,只执行一次 + me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 + } + me.downHight += diff * me.optDown.inOffsetRate; // 越往下,高度变化越小 + + // 指定距离 <= 下拉距离 + } else { + if (me.movetype !== 2) { + me.movetype = 2; // 加入标记,保证只执行一次 + me.optDown.outOffset && me.optDown.outOffset(me); // 下拉超过指定距离那一刻的回调,只执行一次 + me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 + } + if (diff > 0) { // 向下拉 + me.downHight += Math.round(diff * me.optDown.outOffsetRate); // 越往下,高度变化越小 + } else { // 向上收 + me.downHight += diff; // 向上收回高度,则向上滑多少收多少高度 + } + } + + let rate = me.downHight / me.optDown.offset; // 下拉区域当前高度与指定距离的比值 + me.optDown.onMoving && me.optDown.onMoving(me, rate, me.downHight); // 下拉过程中的回调,一直在执行 + } + } + + me.lastPoint = curPoint; // 记录本次移动的点 +} + +/* 列表touchend事件 */ +MeScroll.prototype.touchendEvent = function(e) { + if (!this.optDown.use) return; + // 如果下拉区域高度已改变,则需重置回来 + if (this.isMoveDown) { + if (this.downHight >= this.optDown.offset) { + // 符合触发刷新的条件 + this.triggerDownScroll(); + } else { + // 不符合的话 则重置 + this.downHight = 0; + this.optDown.endDownScroll && this.optDown.endDownScroll(this); + } + this.movetype = 0; + this.isMoveDown = false; + } else if (!this.isScrollBody && this.getScrollTop() === this.startTop) { // scroll-view到顶/左/右/底的滑动事件 + let isScrollUp = this.getPoint(e).y - this.startPoint.y < 0; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + // 上滑 + if (isScrollUp) { + // 需检查滑动的角度 + let angle = this.getAngle(this.getPoint(e), this.startPoint); // 两点之间的角度,区间 [0,90] + if (angle > 80) { + // 检查并触发上拉 + this.triggerUpScroll(true); + } + } + } +} + +/* 根据点击滑动事件获取第一个手指的坐标 */ +MeScroll.prototype.getPoint = function(e) { + if (!e) { + return { + x: 0, + y: 0 + } + } + if (e.touches && e.touches[0]) { + return { + x: e.touches[0].pageX, + y: e.touches[0].pageY + } + } else if (e.changedTouches && e.changedTouches[0]) { + return { + x: e.changedTouches[0].pageX, + y: e.changedTouches[0].pageY + } + } else { + return { + x: e.clientX, + y: e.clientY + } + } +} + +/* 计算两点之间的角度: 区间 [0,90]*/ +MeScroll.prototype.getAngle = function(p1, p2) { + let x = Math.abs(p1.x - p2.x); + let y = Math.abs(p1.y - p2.y); + let z = Math.sqrt(x * x + y * y); + let angle = 0; + if (z !== 0) { + angle = Math.asin(y / z) / Math.PI * 180; + } + return angle +} + +/* 触发下拉刷新 */ +MeScroll.prototype.triggerDownScroll = function() { + if (this.optDown.beforeLoading && this.optDown.beforeLoading(this)) { + //return true则处于完全自定义状态 + } else { + this.showDownScroll(); // 下拉刷新中... + this.optDown.callback && this.optDown.callback(this); // 执行回调,联网加载数据 + } +} + +/* 显示下拉进度布局 */ +MeScroll.prototype.showDownScroll = function() { + this.isDownScrolling = true; // 标记下拉中 + if (this.optDown.native) { + uni.startPullDownRefresh(); // 系统自带的下拉刷新 + this.optDown.showLoading && this.optDown.showLoading(this, 0); // 仍触发showLoading,因为上拉加载用到 + } else { + this.downHight = this.optDown.offset; // 更新下拉区域高度 + this.optDown.showLoading && this.optDown.showLoading(this, this.downHight); // 下拉刷新中... + } +} + +/* 显示系统自带的下拉刷新时需要处理的业务 */ +MeScroll.prototype.onPullDownRefresh = function() { + this.isDownScrolling = true; // 标记下拉中 + this.optDown.showLoading && this.optDown.showLoading(this, 0); // 仍触发showLoading,因为上拉加载用到 + this.optDown.callback && this.optDown.callback(this); // 执行回调,联网加载数据 +} + +/* 结束下拉刷新 */ +MeScroll.prototype.endDownScroll = function() { + if (this.optDown.native) { // 结束原生下拉刷新 + this.isDownScrolling = false; + this.optDown.endDownScroll && this.optDown.endDownScroll(this); + uni.stopPullDownRefresh(); + return + } + let me = this; + // 结束下拉刷新的方法 + let endScroll = function() { + me.downHight = 0; + me.isDownScrolling = false; + me.optDown.endDownScroll && me.optDown.endDownScroll(me); + !me.isScrollBody && me.setScrollHeight(0) // scroll-view重置滚动区域,使数据不满屏时仍可检查触发翻页 + } + // 结束下拉刷新时的回调 + let delay = 0; + if (me.optDown.afterLoading) delay = me.optDown.afterLoading(me); // 结束下拉刷新的延时,单位ms + if (typeof delay === 'number' && delay > 0) { + setTimeout(endScroll, delay); + } else { + endScroll(); + } +} + +/* 锁定下拉刷新:isLock=ture,null锁定;isLock=false解锁 */ +MeScroll.prototype.lockDownScroll = function(isLock) { + if (isLock == null) isLock = true; + this.optDown.isLock = isLock; +} + +/* 锁定上拉加载:isLock=ture,null锁定;isLock=false解锁 */ +MeScroll.prototype.lockUpScroll = function(isLock) { + if (isLock == null) isLock = true; + this.optUp.isLock = isLock; +} + +/* -------初始化上拉加载------- */ +MeScroll.prototype.initUpScroll = function() { + let me = this; + // 配置参数 + me.optUp = me.options.up || { + use: false + } + if (!me.optUp.textColor && me.hasColor(me.optUp.bgColor)) me.optUp.textColor = + "#fff"; // 当bgColor有值且textColor未设置,则textColor默认白色 + me.extendUpScroll(me.optUp); + + if (!me.optUp.isBounce) me.setBounce(false); // 不允许bounce时,需禁止window的touchmove事件 + + if (me.optUp.use === false) return; // 配置不使用上拉加载时,则不初始化上拉布局 + me.optUp.hasNext = true; // 如果使用上拉,则默认有下一页 + me.startNum = me.optUp.page.num + 1; // 记录page开始的页码 + + // 初始化完毕的回调 + if (me.optUp.inited) { + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + me.optUp.inited(me); + }, 0) + } +} + +/*滚动到底部的事件 (仅mescroll-body生效)*/ +MeScroll.prototype.onReachBottom = function() { + if (this.isScrollBody && !this.isUpScrolling) { // 只能支持下拉刷新的时候同时可以触发上拉加载,否则滚动到底部就需要上滑一点才能触发onReachBottom + if (!this.optUp.isLock && this.optUp.hasNext) { + this.triggerUpScroll(); + } + } +} + +/*列表滚动事件 (仅mescroll-body生效)*/ +MeScroll.prototype.onPageScroll = function(e) { + if (!this.isScrollBody) return; + + // 更新滚动条的位置 (主要用于判断下拉刷新时,滚动条是否在顶部) + this.setScrollTop(e.scrollTop); + + // 顶部按钮的显示隐藏 + if (e.scrollTop >= this.optUp.toTop.offset) { + this.showTopBtn(); + } else { + this.hideTopBtn(); + } +} + +/*列表滚动事件*/ +MeScroll.prototype.scroll = function(e, onScroll) { + // 更新滚动条的位置 + this.setScrollTop(e.scrollTop); + // 更新滚动内容高度 + this.setScrollHeight(e.scrollHeight); + + // 向上滑还是向下滑动 + if (this.preScrollY == null) this.preScrollY = 0; + this.isScrollUp = e.scrollTop - this.preScrollY > 0; + this.preScrollY = e.scrollTop; + + // 上滑 && 检查并触发上拉 + this.isScrollUp && this.triggerUpScroll(true); + + // 顶部按钮的显示隐藏 + if (e.scrollTop >= this.optUp.toTop.offset) { + this.showTopBtn(); + } else { + this.hideTopBtn(); + } + + // 滑动监听 + this.optUp.onScroll && onScroll && onScroll() +} + +/* 触发上拉加载 */ +MeScroll.prototype.triggerUpScroll = function(isCheck) { + if (!this.isUpScrolling && this.optUp.use && this.optUp.callback) { + // 是否校验在底部; 默认不校验 + if (isCheck === true) { + let canUp = false; + // 还有下一页 && 没有锁定 && 不在下拉中 + if (this.optUp.hasNext && !this.optUp.isLock && !this.isDownScrolling) { + if (this.getScrollBottom() <= this.optUp.offset) { // 到底部 + canUp = true; // 标记可上拉 + } + } + if (canUp === false) return; + } + this.showUpScroll(); // 上拉加载中... + this.optUp.page.num++; // 预先加一页,如果失败则减回 + this.isUpAutoLoad = true; // 标记上拉已经自动执行过,避免初始化时多次触发上拉回调 + this.num = this.optUp.page.num; // 把最新的页数赋值在mescroll上,避免对page的影响 + this.size = this.optUp.page.size; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.time = this.optUp.page.time; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.optUp.callback(this); // 执行回调,联网加载数据 + } +} + +/* 显示上拉加载中 */ +MeScroll.prototype.showUpScroll = function() { + this.isUpScrolling = true; // 标记上拉加载中 + this.optUp.showLoading && this.optUp.showLoading(this); // 回调 +} + +/* 显示上拉无更多数据 */ +MeScroll.prototype.showNoMore = function() { + this.optUp.hasNext = false; // 标记无更多数据 + this.optUp.showNoMore && this.optUp.showNoMore(this); // 回调 +} + +/* 隐藏上拉区域**/ +MeScroll.prototype.hideUpScroll = function() { + this.optUp.hideUpScroll && this.optUp.hideUpScroll(this); // 回调 +} + +/* 结束上拉加载 */ +MeScroll.prototype.endUpScroll = function(isShowNoMore) { + if (isShowNoMore != null) { // isShowNoMore=null,不处理下拉状态,下拉刷新的时候调用 + if (isShowNoMore) { + this.showNoMore(); // isShowNoMore=true,显示无更多数据 + } else { + this.hideUpScroll(); // isShowNoMore=false,隐藏上拉加载 + } + } + this.isUpScrolling = false; // 标记结束上拉加载 +} + +/* 重置上拉加载列表为第一页 + *isShowLoading 是否显示进度布局; + * 1.默认null,不传参,则显示上拉加载的进度布局 + * 2.传参true, 则显示下拉刷新的进度布局 + * 3.传参false,则不显示上拉和下拉的进度 (常用于静默更新列表数据) + */ +MeScroll.prototype.resetUpScroll = function(isShowLoading) { + if (this.optUp && this.optUp.use) { + let page = this.optUp.page; + this.prePageNum = page.num; // 缓存重置前的页码,加载失败可退回 + this.prePageTime = page.time; // 缓存重置前的时间,加载失败可退回 + page.num = this.startNum; // 重置为第一页 + page.time = null; // 重置时间为空 + if (!this.isDownScrolling && isShowLoading !== false) { // 如果不是下拉刷新触发的resetUpScroll并且不配置列表静默更新,则显示进度; + if (isShowLoading == null) { + this.removeEmpty(); // 移除空布局 + this.showUpScroll(); // 不传参,默认显示上拉加载的进度布局 + } else { + this.showDownScroll(); // 传true,显示下拉刷新的进度布局,不清空列表 + } + } + this.isUpAutoLoad = true; // 标记上拉已经自动执行过,避免初始化时多次触发上拉回调 + this.num = page.num; // 把最新的页数赋值在mescroll上,避免对page的影响 + this.size = page.size; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.time = page.time; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.optUp.callback && this.optUp.callback(this); // 执行上拉回调 + } +} + +/* 设置page.num的值 */ +MeScroll.prototype.setPageNum = function(num) { + this.optUp.page.num = num - 1; +} + +/* 设置page.size的值 */ +MeScroll.prototype.setPageSize = function(size) { + this.optUp.page.size = size; +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据量(必传) + * totalPage: 总页数(必传) + * systime: 服务器时间 (可空) + */ +MeScroll.prototype.endByPage = function(dataSize, totalPage, systime) { + let hasNext; + if (this.optUp.use && totalPage != null) hasNext = this.optUp.page.num < totalPage; // 是否还有下一页 + this.endSuccess(dataSize, hasNext, systime); +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据量(必传) + * totalSize: 列表所有数据总数量(必传) + * systime: 服务器时间 (可空) + */ +MeScroll.prototype.endBySize = function(dataSize, totalSize, systime) { + let hasNext; + if (this.optUp.use && totalSize != null) { + let loadSize = (this.optUp.page.num - 1) * this.optUp.page.size + dataSize; // 已加载的数据总数 + hasNext = loadSize < totalSize; // 是否还有下一页 + } + this.endSuccess(dataSize, hasNext, systime); +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据个数(不是所有页的数据总和),用于上拉加载判断是否还有下一页.如果不传,则会判断还有下一页 + * hasNext: 是否还有下一页,布尔类型;用来解决这个小问题:比如列表共有20条数据,每页加载10条,共2页.如果只根据dataSize判断,则需翻到第三页才会知道无更多数据,如果传了hasNext,则翻到第二页即可显示无更多数据. + * systime: 服务器时间(可空);用来解决这个小问题:当准备翻下一页时,数据库新增了几条记录,此时翻下一页,前面的几条数据会和上一页的重复;这里传入了systime,那么upCallback的page.time就会有值,把page.time传给服务器,让后台过滤新加入的那几条记录 + */ +MeScroll.prototype.endSuccess = function(dataSize, hasNext, systime) { + let me = this; + // 结束下拉刷新 + if (me.isDownScrolling) me.endDownScroll(); + + // 结束上拉加载 + if (me.optUp.use) { + let isShowNoMore; // 是否已无更多数据 + if (dataSize != null) { + let pageNum = me.optUp.page.num; // 当前页码 + let pageSize = me.optUp.page.size; // 每页长度 + // 如果是第一页 + if (pageNum === 1) { + if (systime) me.optUp.page.time = systime; // 设置加载列表数据第一页的时间 + } + if (dataSize < pageSize || hasNext === false) { + // 返回的数据不满一页时,则说明已无更多数据 + me.optUp.hasNext = false; + if (dataSize === 0 && pageNum === 1) { + // 如果第一页无任何数据且配置了空布局 + isShowNoMore = false; + me.showEmpty(); + } else { + // 总列表数少于配置的数量,则不显示无更多数据 + let allDataSize = (pageNum - 1) * pageSize + dataSize; + if (allDataSize < me.optUp.noMoreSize) { + isShowNoMore = false; + } else { + isShowNoMore = true; + } + me.removeEmpty(); // 移除空布局 + } + } else { + // 还有下一页 + isShowNoMore = false; + me.optUp.hasNext = true; + me.removeEmpty(); // 移除空布局 + } + } + + // 隐藏上拉 + me.endUpScroll(isShowNoMore); + } +} + +/* 回调失败,结束下拉刷新和上拉加载 */ +MeScroll.prototype.endErr = function(errDistance) { + // 结束下拉,回调失败重置回原来的页码和时间 + if (this.isDownScrolling) { + let page = this.optUp.page; + if (page && this.prePageNum) { + page.num = this.prePageNum; + page.time = this.prePageTime; + } + this.endDownScroll(); + } + // 结束上拉,回调失败重置回原来的页码 + if (this.isUpScrolling) { + this.optUp.page.num--; + this.endUpScroll(false); + // 如果是mescroll-body,则需往回滚一定距离 + if (this.isScrollBody && errDistance !== 0) { // 不处理0 + if (!errDistance) errDistance = this.optUp.errDistance; // 不传,则取默认 + this.scrollTo(this.getScrollTop() - errDistance, 0) // 往上回滚的距离 + } + } +} + +/* 显示空布局 */ +MeScroll.prototype.showEmpty = function() { + this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(true) +} + +/* 移除空布局 */ +MeScroll.prototype.removeEmpty = function() { + this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(false) +} + +/* 显示回到顶部的按钮 */ +MeScroll.prototype.showTopBtn = function() { + if (!this.topBtnShow) { + this.topBtnShow = true; + this.optUp.toTop.onShow && this.optUp.toTop.onShow(true); + } +} + +/* 隐藏回到顶部的按钮 */ +MeScroll.prototype.hideTopBtn = function() { + if (this.topBtnShow) { + this.topBtnShow = false; + this.optUp.toTop.onShow && this.optUp.toTop.onShow(false); + } +} + +/* 获取滚动条的位置 */ +MeScroll.prototype.getScrollTop = function() { + return this.scrollTop || 0 +} + +/* 记录滚动条的位置 */ +MeScroll.prototype.setScrollTop = function(y) { + this.scrollTop = y; +} + +/* 滚动到指定位置 */ +MeScroll.prototype.scrollTo = function(y, t) { + this.myScrollTo && this.myScrollTo(y, t) // scrollview需自定义回到顶部方法 +} + +/* 自定义scrollTo */ +MeScroll.prototype.resetScrollTo = function(myScrollTo) { + this.myScrollTo = myScrollTo +} + +/* 滚动条到底部的距离 */ +MeScroll.prototype.getScrollBottom = function() { + return this.getScrollHeight() - this.getClientHeight() - this.getScrollTop() +} + +/* 计步器 + star: 开始值 + end: 结束值 + callback(step,timer): 回调step值,计步器timer,可自行通过window.clearInterval(timer)结束计步器; + t: 计步时长,传0则直接回调end值;不传则默认300ms + rate: 周期;不传则默认30ms计步一次 + * */ +MeScroll.prototype.getStep = function(star, end, callback, t, rate) { + let diff = end - star; // 差值 + if (t === 0 || diff === 0) { + callback && callback(end); + return; + } + t = t || 300; // 时长 300ms + rate = rate || 30; // 周期 30ms + let count = t / rate; // 次数 + let step = diff / count; // 步长 + let i = 0; // 计数 + let timer = setInterval(function() { + if (i < count - 1) { + star += step; + callback && callback(star, timer); + i++; + } else { + callback && callback(end, timer); // 最后一次直接设置end,避免计算误差 + clearInterval(timer); + } + }, rate); +} + +/* 滚动容器的高度 */ +MeScroll.prototype.getClientHeight = function(isReal) { + let h = this.clientHeight || 0 + if (h === 0 && isReal !== true) { // 未获取到容器的高度,可临时取body的高度 (可能会有误差) + h = this.getBodyHeight() + } + return h +} +MeScroll.prototype.setClientHeight = function(h) { + this.clientHeight = h; +} + +/* 滚动内容的高度 */ +MeScroll.prototype.getScrollHeight = function() { + return this.scrollHeight || 0; +} +MeScroll.prototype.setScrollHeight = function(h) { + this.scrollHeight = h; +} + +/* body的高度 */ +MeScroll.prototype.getBodyHeight = function() { + return this.bodyHeight || 0; +} +MeScroll.prototype.setBodyHeight = function(h) { + this.bodyHeight = h; +} + +/* 阻止浏览器默认滚动事件 */ +MeScroll.prototype.preventDefault = function(e) { + // 小程序不支持e.preventDefault + // app的bounce只能通过配置pages.json的style.app-plus.bounce为"none"来禁止 + // cancelable:是否可以被禁用; defaultPrevented:是否已经被禁用 + if (e && e.cancelable && !e.defaultPrevented) e.preventDefault() +} + +/* 是否允许下拉回弹(橡皮筋效果); true或null为允许; false禁止bounce */ +MeScroll.prototype.setBounce = function(isBounce) { + // #ifdef H5 + if (isBounce === false) { + this.optUp.isBounce = false; // 禁止 + // 标记当前页使用了mescroll (需延时,确保page已切换) + setTimeout(function() { + let uniPageDom = document.getElementsByTagName('uni-page')[0]; + uniPageDom && uniPageDom.setAttribute('use_mescroll', true) + }, 30); + // 避免重复添加事件 + if (window.isSetBounce) return; + window.isSetBounce = true; + // 需禁止window的touchmove事件才能有效的阻止bounce + window.bounceTouchmove = function(e) { + if (!window.isPreventDefault) return; // 根据标记判断是否阻止 + + let el = e.target; + // 当前touch的元素及父元素是否要拦截touchmove事件 + let isPrevent = true; + while (el !== document.body && el !== document) { + if (el.tagName === 'UNI-PAGE') { // 只扫描当前页 + if (!el.getAttribute('use_mescroll')) { + isPrevent = false; // 如果当前页没有使用mescroll,则不阻止 + } + break; + } + let cls = el.classList; + if (cls) { + if (cls.contains('mescroll-touch')) { // 采用scroll-view 此处不能过滤mescroll-uni,否则下拉仍然有回弹 + isPrevent = false; // mescroll-touch无需拦截touchmove事件 + break; + } else if (cls.contains('mescroll-touch-x') || cls.contains('mescroll-touch-y')) { + // 如果配置了水平或者垂直滑动 + let curX = e.touches ? e.touches[0].pageX : e.clientX; // 当前第一个手指距离列表顶部的距离x + let curY = e.touches ? e.touches[0].pageY : e.clientY; // 当前第一个手指距离列表顶部的距离y + if (!this.preWinX) this.preWinX = curX; // 设置上次移动的距离x + if (!this.preWinY) this.preWinY = curY; // 设置上次移动的距离y + // 计算两点之间的角度 + let x = Math.abs(this.preWinX - curX); + let y = Math.abs(this.preWinY - curY); + let z = Math.sqrt(x * x + y * y); + this.preWinX = curX; // 记录本次curX的值 + this.preWinY = curY; // 记录本次curY的值 + if (z !== 0) { + let angle = Math.asin(y / z) / Math.PI * 180; // 角度区间 [0,90] + if ((angle <= 45 && cls.contains('mescroll-touch-x')) || (angle > 45 && cls + .contains('mescroll-touch-y'))) { + isPrevent = false; // 水平滑动或者垂直滑动,不拦截touchmove事件 + break; + } + } + } + } + el = el.parentNode; // 继续检查其父元素 + } + // 拦截touchmove事件:是否可以被禁用&&是否已经被禁用 (这里不使用me.preventDefault(e)的方法,因为某些情况下会报找不到方法的异常) + if (isPrevent && e.cancelable && !e.defaultPrevented && typeof e.preventDefault === "function") e + .preventDefault(); + } + window.addEventListener('touchmove', window.bounceTouchmove, { + passive: false + }); + } else { + this.optUp.isBounce = true; // 允许 + if (window.bounceTouchmove) { + window.removeEventListener('touchmove', window.bounceTouchmove); + window.bounceTouchmove = null; + window.isSetBounce = false; + } + } + // #endif +} diff --git a/components/mescroll-uni/mescroll-uni.vue b/components/mescroll-uni/mescroll-uni.vue new file mode 100644 index 0000000..880f3a9 --- /dev/null +++ b/components/mescroll-uni/mescroll-uni.vue @@ -0,0 +1,386 @@ + + + + + diff --git a/components/mescroll-uni/mixins/mescroll-comp.js b/components/mescroll-uni/mixins/mescroll-comp.js new file mode 100644 index 0000000..5151dbc --- /dev/null +++ b/components/mescroll-uni/mixins/mescroll-comp.js @@ -0,0 +1,23 @@ +/** + * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期: + * 当一个页面只有一个mescroll-body写在子组件时, 则使用mescroll-comp.js (参考 mescroll-comp 案例) + * 当一个页面有多个mescroll-body写在子组件时, 则使用mescroll-more.js (参考 mescroll-more 案例) + */ +const MescrollCompMixin = { + // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件 + onPageScroll(e) { + let item = this.$refs["mescrollItem"]; + if (item && item.mescroll) item.mescroll.onPageScroll(e); + }, + onReachBottom() { + let item = this.$refs["mescrollItem"]; + if (item && item.mescroll) item.mescroll.onReachBottom(); + }, + // 当down的native: true时, 还需传递此方法进到子组件 + onPullDownRefresh() { + let item = this.$refs["mescrollItem"]; + if (item && item.mescroll) item.mescroll.onPullDownRefresh(); + } +} + +export default MescrollCompMixin; diff --git a/components/mescroll-uni/mixins/mescroll-more-item.js b/components/mescroll-uni/mixins/mescroll-more-item.js new file mode 100644 index 0000000..acdd290 --- /dev/null +++ b/components/mescroll-uni/mixins/mescroll-more-item.js @@ -0,0 +1,48 @@ +/** + * mescroll-more-item的mixins, 仅在多个 mescroll-body 写在子组件时使用 (参考 mescroll-more 案例) + */ +const MescrollMoreItemMixin = { + props: { + i: Number, // 每个tab页的专属下标 + index: { // 当前tab的下标 + type: Number, + default () { + return 0 + } + } + }, + data() { + return { + downOption: { + auto: false // 不自动加载 + }, + upOption: { + auto: false // 不自动加载 + }, + isInit: false // 当前tab是否已初始化 + } + }, + watch: { + // 监听下标的变化 + index(val) { + if (this.i === val && !this.isInit) { + this.isInit = true; // 标记为true + this.mescroll && this.mescroll.triggerDownScroll(); + } + } + }, + methods: { + // mescroll组件初始化的回调,可获取到mescroll对象 + mescrollInit(mescroll) { + this.mescroll = mescroll; + this.mescrollInitByRef && this.mescrollInitByRef(); // 兼容字节跳动小程序 (mescroll-mixins.js) + // 自动加载当前tab的数据 + if (this.i === this.index) { + this.isInit = true; // 标记为true + this.mescroll.triggerDownScroll(); + } + }, + } +} + +export default MescrollMoreItemMixin; diff --git a/components/mescroll-uni/mixins/mescroll-more.js b/components/mescroll-uni/mixins/mescroll-more.js new file mode 100644 index 0000000..8a11d40 --- /dev/null +++ b/components/mescroll-uni/mixins/mescroll-more.js @@ -0,0 +1,56 @@ +/** + * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期: + * 当一个页面只有一个mescroll-body写在子组件时, 则使用mescroll-comp.js (参考 mescroll-comp 案例) + * 当一个页面有多个mescroll-body写在子组件时, 则使用mescroll-more.js (参考 mescroll-more 案例) + */ +const MescrollMoreMixin = { + data() { + return { + tabIndex: 0 // 当前tab下标 + } + }, + // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件 + onPageScroll(e) { + let mescroll = this.getMescroll(this.tabIndex); + mescroll && mescroll.onPageScroll(e); + }, + onReachBottom() { + let mescroll = this.getMescroll(this.tabIndex); + mescroll && mescroll.onReachBottom(); + }, + // 当down的native: true时, 还需传递此方法进到子组件 + onPullDownRefresh() { + let mescroll = this.getMescroll(this.tabIndex); + mescroll && mescroll.onPullDownRefresh(); + }, + methods: { + // 根据下标获取对应子组件的mescroll + getMescroll(i) { + if (!this.mescrollItems) this.mescrollItems = []; + if (!this.mescrollItems[i]) { + // v-for中的refs + let vForItem = this.$refs["mescrollItem"]; + if (vForItem) { + this.mescrollItems[i] = vForItem[i] + } else { + // 普通的refs,不可重复 + this.mescrollItems[i] = this.$refs["mescrollItem" + i]; + } + } + let item = this.mescrollItems[i] + return item ? item.mescroll : null + }, + // 切换tab,恢复滚动条位置 + tabChange(i) { + let mescroll = this.getMescroll(i); + if (mescroll) { + // 延时(比$nextTick靠谱一些),确保元素已渲染 + setTimeout(() => { + mescroll.scrollTo(mescroll.getScrollTop(), 0) + }, 30) + } + } + } +} + +export default MescrollMoreMixin; diff --git a/components/noData/noData.vue b/components/noData/noData.vue new file mode 100644 index 0000000..300d1ae --- /dev/null +++ b/components/noData/noData.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/components/pick-regions/pick-regions.vue b/components/pick-regions/pick-regions.vue new file mode 100644 index 0000000..2b21017 --- /dev/null +++ b/components/pick-regions/pick-regions.vue @@ -0,0 +1,135 @@ + + + diff --git a/components/pick-regions/regions.json b/components/pick-regions/regions.json new file mode 100644 index 0000000..23dfc35 --- /dev/null +++ b/components/pick-regions/regions.json @@ -0,0 +1,10330 @@ +[{ + "code": "11", + "name": "北京市", + "childs": [{ + "code": "1101", + "name": "市辖区", + "childs": [{ + "code": "110101", + "name": "东城区" + }, { + "code": "110102", + "name": "西城区" + }, { + "code": "110105", + "name": "朝阳区" + }, { + "code": "110106", + "name": "丰台区" + }, { + "code": "110107", + "name": "石景山区" + }, { + "code": "110108", + "name": "海淀区" + }, { + "code": "110109", + "name": "门头沟区" + }, { + "code": "110111", + "name": "房山区" + }, { + "code": "110112", + "name": "通州区" + }, { + "code": "110113", + "name": "顺义区" + }, { + "code": "110114", + "name": "昌平区" + }, { + "code": "110115", + "name": "大兴区" + }, { + "code": "110116", + "name": "怀柔区" + }, { + "code": "110117", + "name": "平谷区" + }, { + "code": "110118", + "name": "密云区" + }, { + "code": "110119", + "name": "延庆区" + }] + }] +}, { + "code": "12", + "name": "天津市", + "childs": [{ + "code": "1201", + "name": "市辖区", + "childs": [{ + "code": "120101", + "name": "和平区" + }, { + "code": "120102", + "name": "河东区" + }, { + "code": "120103", + "name": "河西区" + }, { + "code": "120104", + "name": "南开区" + }, { + "code": "120105", + "name": "河北区" + }, { + "code": "120106", + "name": "红桥区" + }, { + "code": "120110", + "name": "东丽区" + }, { + "code": "120111", + "name": "西青区" + }, { + "code": "120112", + "name": "津南区" + }, { + "code": "120113", + "name": "北辰区" + }, { + "code": "120114", + "name": "武清区" + }, { + "code": "120115", + "name": "宝坻区" + }, { + "code": "120116", + "name": "滨海新区" + }, { + "code": "120117", + "name": "宁河区" + }, { + "code": "120118", + "name": "静海区" + }, { + "code": "120119", + "name": "蓟州区" + }] + }] +}, { + "code": "13", + "name": "河北省", + "childs": [{ + "code": "1301", + "name": "石家庄市", + "childs": [{ + "code": "130102", + "name": "长安区" + }, { + "code": "130104", + "name": "桥西区" + }, { + "code": "130105", + "name": "新华区" + }, { + "code": "130107", + "name": "井陉矿区" + }, { + "code": "130108", + "name": "裕华区" + }, { + "code": "130109", + "name": "藁城区" + }, { + "code": "130110", + "name": "鹿泉区" + }, { + "code": "130111", + "name": "栾城区" + }, { + "code": "130121", + "name": "井陉县" + }, { + "code": "130123", + "name": "正定县" + }, { + "code": "130125", + "name": "行唐县" + }, { + "code": "130126", + "name": "灵寿县" + }, { + "code": "130127", + "name": "高邑县" + }, { + "code": "130128", + "name": "深泽县" + }, { + "code": "130129", + "name": "赞皇县" + }, { + "code": "130130", + "name": "无极县" + }, { + "code": "130131", + "name": "平山县" + }, { + "code": "130132", + "name": "元氏县" + }, { + "code": "130133", + "name": "赵县" + }, { + "code": "130183", + "name": "晋州市" + }, { + "code": "130184", + "name": "新乐市" + }] + }, { + "code": "1302", + "name": "唐山市", + "childs": [{ + "code": "130202", + "name": "路南区" + }, { + "code": "130203", + "name": "路北区" + }, { + "code": "130204", + "name": "古冶区" + }, { + "code": "130205", + "name": "开平区" + }, { + "code": "130207", + "name": "丰南区" + }, { + "code": "130208", + "name": "丰润区" + }, { + "code": "130209", + "name": "曹妃甸区" + }, { + "code": "130223", + "name": "滦县" + }, { + "code": "130224", + "name": "滦南县" + }, { + "code": "130225", + "name": "乐亭县" + }, { + "code": "130227", + "name": "迁西县" + }, { + "code": "130229", + "name": "玉田县" + }, { + "code": "130281", + "name": "遵化市" + }, { + "code": "130283", + "name": "迁安市" + }] + }, { + "code": "1303", + "name": "秦皇岛市", + "childs": [{ + "code": "130302", + "name": "海港区" + }, { + "code": "130303", + "name": "山海关区" + }, { + "code": "130304", + "name": "北戴河区" + }, { + "code": "130306", + "name": "抚宁区" + }, { + "code": "130321", + "name": "青龙满族自治县" + }, { + "code": "130322", + "name": "昌黎县" + }, { + "code": "130324", + "name": "卢龙县" + }] + }, { + "code": "1304", + "name": "邯郸市", + "childs": [{ + "code": "130402", + "name": "邯山区" + }, { + "code": "130403", + "name": "丛台区" + }, { + "code": "130404", + "name": "复兴区" + }, { + "code": "130406", + "name": "峰峰矿区" + }, { + "code": "130421", + "name": "邯郸县" + }, { + "code": "130423", + "name": "临漳县" + }, { + "code": "130424", + "name": "成安县" + }, { + "code": "130425", + "name": "大名县" + }, { + "code": "130426", + "name": "涉县" + }, { + "code": "130427", + "name": "磁县" + }, { + "code": "130428", + "name": "肥乡县" + }, { + "code": "130429", + "name": "永年县" + }, { + "code": "130430", + "name": "邱县" + }, { + "code": "130431", + "name": "鸡泽县" + }, { + "code": "130432", + "name": "广平县" + }, { + "code": "130433", + "name": "馆陶县" + }, { + "code": "130434", + "name": "魏县" + }, { + "code": "130435", + "name": "曲周县" + }, { + "code": "130481", + "name": "武安市" + }] + }, { + "code": "1305", + "name": "邢台市", + "childs": [{ + "code": "130502", + "name": "桥东区" + }, { + "code": "130503", + "name": "桥西区" + }, { + "code": "130521", + "name": "邢台县" + }, { + "code": "130522", + "name": "临城县" + }, { + "code": "130523", + "name": "内丘县" + }, { + "code": "130524", + "name": "柏乡县" + }, { + "code": "130525", + "name": "隆尧县" + }, { + "code": "130526", + "name": "任县" + }, { + "code": "130527", + "name": "南和县" + }, { + "code": "130528", + "name": "宁晋县" + }, { + "code": "130529", + "name": "巨鹿县" + }, { + "code": "130530", + "name": "新河县" + }, { + "code": "130531", + "name": "广宗县" + }, { + "code": "130532", + "name": "平乡县" + }, { + "code": "130533", + "name": "威县" + }, { + "code": "130534", + "name": "清河县" + }, { + "code": "130535", + "name": "临西县" + }, { + "code": "130581", + "name": "南宫市" + }, { + "code": "130582", + "name": "沙河市" + }] + }, { + "code": "1306", + "name": "保定市", + "childs": [{ + "code": "130602", + "name": "竞秀区" + }, { + "code": "130606", + "name": "莲池区" + }, { + "code": "130607", + "name": "满城区" + }, { + "code": "130608", + "name": "清苑区" + }, { + "code": "130609", + "name": "徐水区" + }, { + "code": "130623", + "name": "涞水县" + }, { + "code": "130624", + "name": "阜平县" + }, { + "code": "130626", + "name": "定兴县" + }, { + "code": "130627", + "name": "唐县" + }, { + "code": "130628", + "name": "高阳县" + }, { + "code": "130629", + "name": "容城县" + }, { + "code": "130630", + "name": "涞源县" + }, { + "code": "130631", + "name": "望都县" + }, { + "code": "130632", + "name": "安新县" + }, { + "code": "130633", + "name": "易县" + }, { + "code": "130634", + "name": "曲阳县" + }, { + "code": "130635", + "name": "蠡县" + }, { + "code": "130636", + "name": "顺平县" + }, { + "code": "130637", + "name": "博野县" + }, { + "code": "130638", + "name": "雄县" + }, { + "code": "130681", + "name": "涿州市" + }, { + "code": "130683", + "name": "安国市" + }, { + "code": "130684", + "name": "高碑店市" + }] + }, { + "code": "1307", + "name": "张家口市", + "childs": [{ + "code": "130702", + "name": "桥东区" + }, { + "code": "130703", + "name": "桥西区" + }, { + "code": "130705", + "name": "宣化区" + }, { + "code": "130706", + "name": "下花园区" + }, { + "code": "130708", + "name": "万全区" + }, { + "code": "130709", + "name": "崇礼区" + }, { + "code": "130722", + "name": "张北县" + }, { + "code": "130723", + "name": "康保县" + }, { + "code": "130724", + "name": "沽源县" + }, { + "code": "130725", + "name": "尚义县" + }, { + "code": "130726", + "name": "蔚县" + }, { + "code": "130727", + "name": "阳原县" + }, { + "code": "130728", + "name": "怀安县" + }, { + "code": "130730", + "name": "怀来县" + }, { + "code": "130731", + "name": "涿鹿县" + }, { + "code": "130732", + "name": "赤城县" + }] + }, { + "code": "1308", + "name": "承德市", + "childs": [{ + "code": "130802", + "name": "双桥区" + }, { + "code": "130803", + "name": "双滦区" + }, { + "code": "130804", + "name": "鹰手营子矿区" + }, { + "code": "130821", + "name": "承德县" + }, { + "code": "130822", + "name": "兴隆县" + }, { + "code": "130823", + "name": "平泉县" + }, { + "code": "130824", + "name": "滦平县" + }, { + "code": "130825", + "name": "隆化县" + }, { + "code": "130826", + "name": "丰宁满族自治县" + }, { + "code": "130827", + "name": "宽城满族自治县" + }, { + "code": "130828", + "name": "围场满族蒙古族自治县" + }] + }, { + "code": "1309", + "name": "沧州市", + "childs": [{ + "code": "130902", + "name": "新华区" + }, { + "code": "130903", + "name": "运河区" + }, { + "code": "130921", + "name": "沧县" + }, { + "code": "130922", + "name": "青县" + }, { + "code": "130923", + "name": "东光县" + }, { + "code": "130924", + "name": "海兴县" + }, { + "code": "130925", + "name": "盐山县" + }, { + "code": "130926", + "name": "肃宁县" + }, { + "code": "130927", + "name": "南皮县" + }, { + "code": "130928", + "name": "吴桥县" + }, { + "code": "130929", + "name": "献县" + }, { + "code": "130930", + "name": "孟村回族自治县" + }, { + "code": "130981", + "name": "泊头市" + }, { + "code": "130982", + "name": "任丘市" + }, { + "code": "130983", + "name": "黄骅市" + }, { + "code": "130984", + "name": "河间市" + }] + }, { + "code": "1310", + "name": "廊坊市", + "childs": [{ + "code": "131002", + "name": "安次区" + }, { + "code": "131003", + "name": "广阳区" + }, { + "code": "131022", + "name": "固安县" + }, { + "code": "131023", + "name": "永清县" + }, { + "code": "131024", + "name": "香河县" + }, { + "code": "131025", + "name": "大城县" + }, { + "code": "131026", + "name": "文安县" + }, { + "code": "131028", + "name": "大厂回族自治县" + }, { + "code": "131081", + "name": "霸州市" + }, { + "code": "131082", + "name": "三河市" + }] + }, { + "code": "1311", + "name": "衡水市", + "childs": [{ + "code": "131102", + "name": "桃城区" + }, { + "code": "131103", + "name": "冀州区" + }, { + "code": "131121", + "name": "枣强县" + }, { + "code": "131122", + "name": "武邑县" + }, { + "code": "131123", + "name": "武强县" + }, { + "code": "131124", + "name": "饶阳县" + }, { + "code": "131125", + "name": "安平县" + }, { + "code": "131126", + "name": "故城县" + }, { + "code": "131127", + "name": "景县" + }, { + "code": "131128", + "name": "阜城县" + }, { + "code": "131182", + "name": "深州市" + }] + }, { + "code": "1390", + "name": "省直辖县级行政区划", + "childs": [{ + "code": "139001", + "name": "定州市" + }, { + "code": "139002", + "name": "辛集市" + }] + }] +}, { + "code": "14", + "name": "山西省", + "childs": [{ + "code": "1401", + "name": "太原市", + "childs": [{ + "code": "140105", + "name": "小店区" + }, { + "code": "140106", + "name": "迎泽区" + }, { + "code": "140107", + "name": "杏花岭区" + }, { + "code": "140108", + "name": "尖草坪区" + }, { + "code": "140109", + "name": "万柏林区" + }, { + "code": "140110", + "name": "晋源区" + }, { + "code": "140121", + "name": "清徐县" + }, { + "code": "140122", + "name": "阳曲县" + }, { + "code": "140123", + "name": "娄烦县" + }, { + "code": "140181", + "name": "古交市" + }] + }, { + "code": "1402", + "name": "大同市", + "childs": [{ + "code": "140202", + "name": "城区" + }, { + "code": "140203", + "name": "矿区" + }, { + "code": "140211", + "name": "南郊区" + }, { + "code": "140212", + "name": "新荣区" + }, { + "code": "140221", + "name": "阳高县" + }, { + "code": "140222", + "name": "天镇县" + }, { + "code": "140223", + "name": "广灵县" + }, { + "code": "140224", + "name": "灵丘县" + }, { + "code": "140225", + "name": "浑源县" + }, { + "code": "140226", + "name": "左云县" + }, { + "code": "140227", + "name": "大同县" + }] + }, { + "code": "1403", + "name": "阳泉市", + "childs": [{ + "code": "140302", + "name": "城区" + }, { + "code": "140303", + "name": "矿区" + }, { + "code": "140311", + "name": "郊区" + }, { + "code": "140321", + "name": "平定县" + }, { + "code": "140322", + "name": "盂县" + }] + }, { + "code": "1404", + "name": "长治市", + "childs": [{ + "code": "140402", + "name": "城区" + }, { + "code": "140411", + "name": "郊区" + }, { + "code": "140421", + "name": "长治县" + }, { + "code": "140423", + "name": "襄垣县" + }, { + "code": "140424", + "name": "屯留县" + }, { + "code": "140425", + "name": "平顺县" + }, { + "code": "140426", + "name": "黎城县" + }, { + "code": "140427", + "name": "壶关县" + }, { + "code": "140428", + "name": "长子县" + }, { + "code": "140429", + "name": "武乡县" + }, { + "code": "140430", + "name": "沁县" + }, { + "code": "140431", + "name": "沁源县" + }, { + "code": "140481", + "name": "潞城市" + }] + }, { + "code": "1405", + "name": "晋城市", + "childs": [{ + "code": "140502", + "name": "城区" + }, { + "code": "140521", + "name": "沁水县" + }, { + "code": "140522", + "name": "阳城县" + }, { + "code": "140524", + "name": "陵川县" + }, { + "code": "140525", + "name": "泽州县" + }, { + "code": "140581", + "name": "高平市" + }] + }, { + "code": "1406", + "name": "朔州市", + "childs": [{ + "code": "140602", + "name": "朔城区" + }, { + "code": "140603", + "name": "平鲁区" + }, { + "code": "140621", + "name": "山阴县" + }, { + "code": "140622", + "name": "应县" + }, { + "code": "140623", + "name": "右玉县" + }, { + "code": "140624", + "name": "怀仁县" + }] + }, { + "code": "1407", + "name": "晋中市", + "childs": [{ + "code": "140702", + "name": "榆次区" + }, { + "code": "140721", + "name": "榆社县" + }, { + "code": "140722", + "name": "左权县" + }, { + "code": "140723", + "name": "和顺县" + }, { + "code": "140724", + "name": "昔阳县" + }, { + "code": "140725", + "name": "寿阳县" + }, { + "code": "140726", + "name": "太谷县" + }, { + "code": "140727", + "name": "祁县" + }, { + "code": "140728", + "name": "平遥县" + }, { + "code": "140729", + "name": "灵石县" + }, { + "code": "140781", + "name": "介休市" + }] + }, { + "code": "1408", + "name": "运城市", + "childs": [{ + "code": "140802", + "name": "盐湖区" + }, { + "code": "140821", + "name": "临猗县" + }, { + "code": "140822", + "name": "万荣县" + }, { + "code": "140823", + "name": "闻喜县" + }, { + "code": "140824", + "name": "稷山县" + }, { + "code": "140825", + "name": "新绛县" + }, { + "code": "140826", + "name": "绛县" + }, { + "code": "140827", + "name": "垣曲县" + }, { + "code": "140828", + "name": "夏县" + }, { + "code": "140829", + "name": "平陆县" + }, { + "code": "140830", + "name": "芮城县" + }, { + "code": "140881", + "name": "永济市" + }, { + "code": "140882", + "name": "河津市" + }] + }, { + "code": "1409", + "name": "忻州市", + "childs": [{ + "code": "140902", + "name": "忻府区" + }, { + "code": "140921", + "name": "定襄县" + }, { + "code": "140922", + "name": "五台县" + }, { + "code": "140923", + "name": "代县" + }, { + "code": "140924", + "name": "繁峙县" + }, { + "code": "140925", + "name": "宁武县" + }, { + "code": "140926", + "name": "静乐县" + }, { + "code": "140927", + "name": "神池县" + }, { + "code": "140928", + "name": "五寨县" + }, { + "code": "140929", + "name": "岢岚县" + }, { + "code": "140930", + "name": "河曲县" + }, { + "code": "140931", + "name": "保德县" + }, { + "code": "140932", + "name": "偏关县" + }, { + "code": "140981", + "name": "原平市" + }] + }, { + "code": "1410", + "name": "临汾市", + "childs": [{ + "code": "141002", + "name": "尧都区" + }, { + "code": "141021", + "name": "曲沃县" + }, { + "code": "141022", + "name": "翼城县" + }, { + "code": "141023", + "name": "襄汾县" + }, { + "code": "141024", + "name": "洪洞县" + }, { + "code": "141025", + "name": "古县" + }, { + "code": "141026", + "name": "安泽县" + }, { + "code": "141027", + "name": "浮山县" + }, { + "code": "141028", + "name": "吉县" + }, { + "code": "141029", + "name": "乡宁县" + }, { + "code": "141030", + "name": "大宁县" + }, { + "code": "141031", + "name": "隰县" + }, { + "code": "141032", + "name": "永和县" + }, { + "code": "141033", + "name": "蒲县" + }, { + "code": "141034", + "name": "汾西县" + }, { + "code": "141081", + "name": "侯马市" + }, { + "code": "141082", + "name": "霍州市" + }] + }, { + "code": "1411", + "name": "吕梁市", + "childs": [{ + "code": "141102", + "name": "离石区" + }, { + "code": "141121", + "name": "文水县" + }, { + "code": "141122", + "name": "交城县" + }, { + "code": "141123", + "name": "兴县" + }, { + "code": "141124", + "name": "临县" + }, { + "code": "141125", + "name": "柳林县" + }, { + "code": "141126", + "name": "石楼县" + }, { + "code": "141127", + "name": "岚县" + }, { + "code": "141128", + "name": "方山县" + }, { + "code": "141129", + "name": "中阳县" + }, { + "code": "141130", + "name": "交口县" + }, { + "code": "141181", + "name": "孝义市" + }, { + "code": "141182", + "name": "汾阳市" + }] + }] +}, { + "code": "15", + "name": "内蒙古自治区", + "childs": [{ + "code": "1501", + "name": "呼和浩特市", + "childs": [{ + "code": "150102", + "name": "新城区" + }, { + "code": "150103", + "name": "回民区" + }, { + "code": "150104", + "name": "玉泉区" + }, { + "code": "150105", + "name": "赛罕区" + }, { + "code": "150121", + "name": "土默特左旗" + }, { + "code": "150122", + "name": "托克托县" + }, { + "code": "150123", + "name": "和林格尔县" + }, { + "code": "150124", + "name": "清水河县" + }, { + "code": "150125", + "name": "武川县" + }] + }, { + "code": "1502", + "name": "包头市", + "childs": [{ + "code": "150202", + "name": "东河区" + }, { + "code": "150203", + "name": "昆都仑区" + }, { + "code": "150204", + "name": "青山区" + }, { + "code": "150205", + "name": "石拐区" + }, { + "code": "150206", + "name": "白云鄂博矿区" + }, { + "code": "150207", + "name": "九原区" + }, { + "code": "150221", + "name": "土默特右旗" + }, { + "code": "150222", + "name": "固阳县" + }, { + "code": "150223", + "name": "达尔罕茂明安联合旗" + }] + }, { + "code": "1503", + "name": "乌海市", + "childs": [{ + "code": "150302", + "name": "海勃湾区" + }, { + "code": "150303", + "name": "海南区" + }, { + "code": "150304", + "name": "乌达区" + }] + }, { + "code": "1504", + "name": "赤峰市", + "childs": [{ + "code": "150402", + "name": "红山区" + }, { + "code": "150403", + "name": "元宝山区" + }, { + "code": "150404", + "name": "松山区" + }, { + "code": "150421", + "name": "阿鲁科尔沁旗" + }, { + "code": "150422", + "name": "巴林左旗" + }, { + "code": "150423", + "name": "巴林右旗" + }, { + "code": "150424", + "name": "林西县" + }, { + "code": "150425", + "name": "克什克腾旗" + }, { + "code": "150426", + "name": "翁牛特旗" + }, { + "code": "150428", + "name": "喀喇沁旗" + }, { + "code": "150429", + "name": "宁城县" + }, { + "code": "150430", + "name": "敖汉旗" + }] + }, { + "code": "1505", + "name": "通辽市", + "childs": [{ + "code": "150502", + "name": "科尔沁区" + }, { + "code": "150521", + "name": "科尔沁左翼中旗" + }, { + "code": "150522", + "name": "科尔沁左翼后旗" + }, { + "code": "150523", + "name": "开鲁县" + }, { + "code": "150524", + "name": "库伦旗" + }, { + "code": "150525", + "name": "奈曼旗" + }, { + "code": "150526", + "name": "扎鲁特旗" + }, { + "code": "150581", + "name": "霍林郭勒市" + }] + }, { + "code": "1506", + "name": "鄂尔多斯市", + "childs": [{ + "code": "150602", + "name": "东胜区" + }, { + "code": "150603", + "name": "康巴什区" + }, { + "code": "150621", + "name": "达拉特旗" + }, { + "code": "150622", + "name": "准格尔旗" + }, { + "code": "150623", + "name": "鄂托克前旗" + }, { + "code": "150624", + "name": "鄂托克旗" + }, { + "code": "150625", + "name": "杭锦旗" + }, { + "code": "150626", + "name": "乌审旗" + }, { + "code": "150627", + "name": "伊金霍洛旗" + }] + }, { + "code": "1507", + "name": "呼伦贝尔市", + "childs": [{ + "code": "150702", + "name": "海拉尔区" + }, { + "code": "150703", + "name": "扎赉诺尔区" + }, { + "code": "150721", + "name": "阿荣旗" + }, { + "code": "150722", + "name": "莫力达瓦达斡尔族自治旗" + }, { + "code": "150723", + "name": "鄂伦春自治旗" + }, { + "code": "150724", + "name": "鄂温克族自治旗" + }, { + "code": "150725", + "name": "陈巴尔虎旗" + }, { + "code": "150726", + "name": "新巴尔虎左旗" + }, { + "code": "150727", + "name": "新巴尔虎右旗" + }, { + "code": "150781", + "name": "满洲里市" + }, { + "code": "150782", + "name": "牙克石市" + }, { + "code": "150783", + "name": "扎兰屯市" + }, { + "code": "150784", + "name": "额尔古纳市" + }, { + "code": "150785", + "name": "根河市" + }] + }, { + "code": "1508", + "name": "巴彦淖尔市", + "childs": [{ + "code": "150802", + "name": "临河区" + }, { + "code": "150821", + "name": "五原县" + }, { + "code": "150822", + "name": "磴口县" + }, { + "code": "150823", + "name": "乌拉特前旗" + }, { + "code": "150824", + "name": "乌拉特中旗" + }, { + "code": "150825", + "name": "乌拉特后旗" + }, { + "code": "150826", + "name": "杭锦后旗" + }] + }, { + "code": "1509", + "name": "乌兰察布市", + "childs": [{ + "code": "150902", + "name": "集宁区" + }, { + "code": "150921", + "name": "卓资县" + }, { + "code": "150922", + "name": "化德县" + }, { + "code": "150923", + "name": "商都县" + }, { + "code": "150924", + "name": "兴和县" + }, { + "code": "150925", + "name": "凉城县" + }, { + "code": "150926", + "name": "察哈尔右翼前旗" + }, { + "code": "150927", + "name": "察哈尔右翼中旗" + }, { + "code": "150928", + "name": "察哈尔右翼后旗" + }, { + "code": "150929", + "name": "四子王旗" + }, { + "code": "150981", + "name": "丰镇市" + }] + }, { + "code": "1522", + "name": "兴安盟", + "childs": [{ + "code": "152201", + "name": "乌兰浩特市" + }, { + "code": "152202", + "name": "阿尔山市" + }, { + "code": "152221", + "name": "科尔沁右翼前旗" + }, { + "code": "152222", + "name": "科尔沁右翼中旗" + }, { + "code": "152223", + "name": "扎赉特旗" + }, { + "code": "152224", + "name": "突泉县" + }] + }, { + "code": "1525", + "name": "锡林郭勒盟", + "childs": [{ + "code": "152501", + "name": "二连浩特市" + }, { + "code": "152502", + "name": "锡林浩特市" + }, { + "code": "152522", + "name": "阿巴嘎旗" + }, { + "code": "152523", + "name": "苏尼特左旗" + }, { + "code": "152524", + "name": "苏尼特右旗" + }, { + "code": "152525", + "name": "东乌珠穆沁旗" + }, { + "code": "152526", + "name": "西乌珠穆沁旗" + }, { + "code": "152527", + "name": "太仆寺旗" + }, { + "code": "152528", + "name": "镶黄旗" + }, { + "code": "152529", + "name": "正镶白旗" + }, { + "code": "152530", + "name": "正蓝旗" + }, { + "code": "152531", + "name": "多伦县" + }] + }, { + "code": "1529", + "name": "阿拉善盟", + "childs": [{ + "code": "152921", + "name": "阿拉善左旗" + }, { + "code": "152922", + "name": "阿拉善右旗" + }, { + "code": "152923", + "name": "额济纳旗" + }] + }] +}, { + "code": "21", + "name": "辽宁省", + "childs": [{ + "code": "2101", + "name": "沈阳市", + "childs": [{ + "code": "210102", + "name": "和平区" + }, { + "code": "210103", + "name": "沈河区" + }, { + "code": "210104", + "name": "大东区" + }, { + "code": "210105", + "name": "皇姑区" + }, { + "code": "210106", + "name": "铁西区" + }, { + "code": "210111", + "name": "苏家屯区" + }, { + "code": "210112", + "name": "浑南区" + }, { + "code": "210113", + "name": "沈北新区" + }, { + "code": "210114", + "name": "于洪区" + }, { + "code": "210115", + "name": "辽中区" + }, { + "code": "210123", + "name": "康平县" + }, { + "code": "210124", + "name": "法库县" + }, { + "code": "210181", + "name": "新民市" + }] + }, { + "code": "2102", + "name": "大连市", + "childs": [{ + "code": "210202", + "name": "中山区" + }, { + "code": "210203", + "name": "西岗区" + }, { + "code": "210204", + "name": "沙河口区" + }, { + "code": "210211", + "name": "甘井子区" + }, { + "code": "210212", + "name": "旅顺口区" + }, { + "code": "210213", + "name": "金州区" + }, { + "code": "210214", + "name": "普兰店区" + }, { + "code": "210224", + "name": "长海县" + }, { + "code": "210281", + "name": "瓦房店市" + }, { + "code": "210283", + "name": "庄河市" + }] + }, { + "code": "2103", + "name": "鞍山市", + "childs": [{ + "code": "210302", + "name": "铁东区" + }, { + "code": "210303", + "name": "铁西区" + }, { + "code": "210304", + "name": "立山区" + }, { + "code": "210311", + "name": "千山区" + }, { + "code": "210321", + "name": "台安县" + }, { + "code": "210323", + "name": "岫岩满族自治县" + }, { + "code": "210381", + "name": "海城市" + }] + }, { + "code": "2104", + "name": "抚顺市", + "childs": [{ + "code": "210402", + "name": "新抚区" + }, { + "code": "210403", + "name": "东洲区" + }, { + "code": "210404", + "name": "望花区" + }, { + "code": "210411", + "name": "顺城区" + }, { + "code": "210421", + "name": "抚顺县" + }, { + "code": "210422", + "name": "新宾满族自治县" + }, { + "code": "210423", + "name": "清原满族自治县" + }] + }, { + "code": "2105", + "name": "本溪市", + "childs": [{ + "code": "210502", + "name": "平山区" + }, { + "code": "210503", + "name": "溪湖区" + }, { + "code": "210504", + "name": "明山区" + }, { + "code": "210505", + "name": "南芬区" + }, { + "code": "210521", + "name": "本溪满族自治县" + }, { + "code": "210522", + "name": "桓仁满族自治县" + }] + }, { + "code": "2106", + "name": "丹东市", + "childs": [{ + "code": "210602", + "name": "元宝区" + }, { + "code": "210603", + "name": "振兴区" + }, { + "code": "210604", + "name": "振安区" + }, { + "code": "210624", + "name": "宽甸满族自治县" + }, { + "code": "210681", + "name": "东港市" + }, { + "code": "210682", + "name": "凤城市" + }] + }, { + "code": "2107", + "name": "锦州市", + "childs": [{ + "code": "210702", + "name": "古塔区" + }, { + "code": "210703", + "name": "凌河区" + }, { + "code": "210711", + "name": "太和区" + }, { + "code": "210726", + "name": "黑山县" + }, { + "code": "210727", + "name": "义县" + }, { + "code": "210781", + "name": "凌海市" + }, { + "code": "210782", + "name": "北镇市" + }] + }, { + "code": "2108", + "name": "营口市", + "childs": [{ + "code": "210802", + "name": "站前区" + }, { + "code": "210803", + "name": "西市区" + }, { + "code": "210804", + "name": "鲅鱼圈区" + }, { + "code": "210811", + "name": "老边区" + }, { + "code": "210881", + "name": "盖州市" + }, { + "code": "210882", + "name": "大石桥市" + }] + }, { + "code": "2109", + "name": "阜新市", + "childs": [{ + "code": "210902", + "name": "海州区" + }, { + "code": "210903", + "name": "新邱区" + }, { + "code": "210904", + "name": "太平区" + }, { + "code": "210905", + "name": "清河门区" + }, { + "code": "210911", + "name": "细河区" + }, { + "code": "210921", + "name": "阜新蒙古族自治县" + }, { + "code": "210922", + "name": "彰武县" + }] + }, { + "code": "2110", + "name": "辽阳市", + "childs": [{ + "code": "211002", + "name": "白塔区" + }, { + "code": "211003", + "name": "文圣区" + }, { + "code": "211004", + "name": "宏伟区" + }, { + "code": "211005", + "name": "弓长岭区" + }, { + "code": "211011", + "name": "太子河区" + }, { + "code": "211021", + "name": "辽阳县" + }, { + "code": "211081", + "name": "灯塔市" + }] + }, { + "code": "2111", + "name": "盘锦市", + "childs": [{ + "code": "211102", + "name": "双台子区" + }, { + "code": "211103", + "name": "兴隆台区" + }, { + "code": "211104", + "name": "大洼区" + }, { + "code": "211122", + "name": "盘山县" + }] + }, { + "code": "2112", + "name": "铁岭市", + "childs": [{ + "code": "211202", + "name": "银州区" + }, { + "code": "211204", + "name": "清河区" + }, { + "code": "211221", + "name": "铁岭县" + }, { + "code": "211223", + "name": "西丰县" + }, { + "code": "211224", + "name": "昌图县" + }, { + "code": "211281", + "name": "调兵山市" + }, { + "code": "211282", + "name": "开原市" + }] + }, { + "code": "2113", + "name": "朝阳市", + "childs": [{ + "code": "211302", + "name": "双塔区" + }, { + "code": "211303", + "name": "龙城区" + }, { + "code": "211321", + "name": "朝阳县" + }, { + "code": "211322", + "name": "建平县" + }, { + "code": "211324", + "name": "喀喇沁左翼蒙古族自治县" + }, { + "code": "211381", + "name": "北票市" + }, { + "code": "211382", + "name": "凌源市" + }] + }, { + "code": "2114", + "name": "葫芦岛市", + "childs": [{ + "code": "211402", + "name": "连山区" + }, { + "code": "211403", + "name": "龙港区" + }, { + "code": "211404", + "name": "南票区" + }, { + "code": "211421", + "name": "绥中县" + }, { + "code": "211422", + "name": "建昌县" + }, { + "code": "211481", + "name": "兴城市" + }] + }] +}, { + "code": "22", + "name": "吉林省", + "childs": [{ + "code": "2201", + "name": "长春市", + "childs": [{ + "code": "220102", + "name": "南关区" + }, { + "code": "220103", + "name": "宽城区" + }, { + "code": "220104", + "name": "朝阳区" + }, { + "code": "220105", + "name": "二道区" + }, { + "code": "220106", + "name": "绿园区" + }, { + "code": "220112", + "name": "双阳区" + }, { + "code": "220113", + "name": "九台区" + }, { + "code": "220122", + "name": "农安县" + }, { + "code": "220182", + "name": "榆树市" + }, { + "code": "220183", + "name": "德惠市" + }] + }, { + "code": "2202", + "name": "吉林市", + "childs": [{ + "code": "220202", + "name": "昌邑区" + }, { + "code": "220203", + "name": "龙潭区" + }, { + "code": "220204", + "name": "船营区" + }, { + "code": "220211", + "name": "丰满区" + }, { + "code": "220221", + "name": "永吉县" + }, { + "code": "220281", + "name": "蛟河市" + }, { + "code": "220282", + "name": "桦甸市" + }, { + "code": "220283", + "name": "舒兰市" + }, { + "code": "220284", + "name": "磐石市" + }] + }, { + "code": "2203", + "name": "四平市", + "childs": [{ + "code": "220302", + "name": "铁西区" + }, { + "code": "220303", + "name": "铁东区" + }, { + "code": "220322", + "name": "梨树县" + }, { + "code": "220323", + "name": "伊通满族自治县" + }, { + "code": "220381", + "name": "公主岭市" + }, { + "code": "220382", + "name": "双辽市" + }] + }, { + "code": "2204", + "name": "辽源市", + "childs": [{ + "code": "220402", + "name": "龙山区" + }, { + "code": "220403", + "name": "西安区" + }, { + "code": "220421", + "name": "东丰县" + }, { + "code": "220422", + "name": "东辽县" + }] + }, { + "code": "2205", + "name": "通化市", + "childs": [{ + "code": "220502", + "name": "东昌区" + }, { + "code": "220503", + "name": "二道江区" + }, { + "code": "220521", + "name": "通化县" + }, { + "code": "220523", + "name": "辉南县" + }, { + "code": "220524", + "name": "柳河县" + }, { + "code": "220581", + "name": "梅河口市" + }, { + "code": "220582", + "name": "集安市" + }] + }, { + "code": "2206", + "name": "白山市", + "childs": [{ + "code": "220602", + "name": "浑江区" + }, { + "code": "220605", + "name": "江源区" + }, { + "code": "220621", + "name": "抚松县" + }, { + "code": "220622", + "name": "靖宇县" + }, { + "code": "220623", + "name": "长白朝鲜族自治县" + }, { + "code": "220681", + "name": "临江市" + }] + }, { + "code": "2207", + "name": "松原市", + "childs": [{ + "code": "220702", + "name": "宁江区" + }, { + "code": "220721", + "name": "前郭尔罗斯蒙古族自治县" + }, { + "code": "220722", + "name": "长岭县" + }, { + "code": "220723", + "name": "乾安县" + }, { + "code": "220781", + "name": "扶余市" + }] + }, { + "code": "2208", + "name": "白城市", + "childs": [{ + "code": "220802", + "name": "洮北区" + }, { + "code": "220821", + "name": "镇赉县" + }, { + "code": "220822", + "name": "通榆县" + }, { + "code": "220881", + "name": "洮南市" + }, { + "code": "220882", + "name": "大安市" + }] + }, { + "code": "2224", + "name": "延边朝鲜族自治州", + "childs": [{ + "code": "222401", + "name": "延吉市" + }, { + "code": "222402", + "name": "图们市" + }, { + "code": "222403", + "name": "敦化市" + }, { + "code": "222404", + "name": "珲春市" + }, { + "code": "222405", + "name": "龙井市" + }, { + "code": "222406", + "name": "和龙市" + }, { + "code": "222424", + "name": "汪清县" + }, { + "code": "222426", + "name": "安图县" + }] + }] +}, { + "code": "23", + "name": "黑龙江省", + "childs": [{ + "code": "2301", + "name": "哈尔滨市", + "childs": [{ + "code": "230102", + "name": "道里区" + }, { + "code": "230103", + "name": "南岗区" + }, { + "code": "230104", + "name": "道外区" + }, { + "code": "230108", + "name": "平房区" + }, { + "code": "230109", + "name": "松北区" + }, { + "code": "230110", + "name": "香坊区" + }, { + "code": "230111", + "name": "呼兰区" + }, { + "code": "230112", + "name": "阿城区" + }, { + "code": "230113", + "name": "双城区" + }, { + "code": "230123", + "name": "依兰县" + }, { + "code": "230124", + "name": "方正县" + }, { + "code": "230125", + "name": "宾县" + }, { + "code": "230126", + "name": "巴彦县" + }, { + "code": "230127", + "name": "木兰县" + }, { + "code": "230128", + "name": "通河县" + }, { + "code": "230129", + "name": "延寿县" + }, { + "code": "230183", + "name": "尚志市" + }, { + "code": "230184", + "name": "五常市" + }] + }, { + "code": "2302", + "name": "齐齐哈尔市", + "childs": [{ + "code": "230202", + "name": "龙沙区" + }, { + "code": "230203", + "name": "建华区" + }, { + "code": "230204", + "name": "铁锋区" + }, { + "code": "230205", + "name": "昂昂溪区" + }, { + "code": "230206", + "name": "富拉尔基区" + }, { + "code": "230207", + "name": "碾子山区" + }, { + "code": "230208", + "name": "梅里斯达斡尔族区" + }, { + "code": "230221", + "name": "龙江县" + }, { + "code": "230223", + "name": "依安县" + }, { + "code": "230224", + "name": "泰来县" + }, { + "code": "230225", + "name": "甘南县" + }, { + "code": "230227", + "name": "富裕县" + }, { + "code": "230229", + "name": "克山县" + }, { + "code": "230230", + "name": "克东县" + }, { + "code": "230231", + "name": "拜泉县" + }, { + "code": "230281", + "name": "讷河市" + }] + }, { + "code": "2303", + "name": "鸡西市", + "childs": [{ + "code": "230302", + "name": "鸡冠区" + }, { + "code": "230303", + "name": "恒山区" + }, { + "code": "230304", + "name": "滴道区" + }, { + "code": "230305", + "name": "梨树区" + }, { + "code": "230306", + "name": "城子河区" + }, { + "code": "230307", + "name": "麻山区" + }, { + "code": "230321", + "name": "鸡东县" + }, { + "code": "230381", + "name": "虎林市" + }, { + "code": "230382", + "name": "密山市" + }] + }, { + "code": "2304", + "name": "鹤岗市", + "childs": [{ + "code": "230402", + "name": "向阳区" + }, { + "code": "230403", + "name": "工农区" + }, { + "code": "230404", + "name": "南山区" + }, { + "code": "230405", + "name": "兴安区" + }, { + "code": "230406", + "name": "东山区" + }, { + "code": "230407", + "name": "兴山区" + }, { + "code": "230421", + "name": "萝北县" + }, { + "code": "230422", + "name": "绥滨县" + }] + }, { + "code": "2305", + "name": "双鸭山市", + "childs": [{ + "code": "230502", + "name": "尖山区" + }, { + "code": "230503", + "name": "岭东区" + }, { + "code": "230505", + "name": "四方台区" + }, { + "code": "230506", + "name": "宝山区" + }, { + "code": "230521", + "name": "集贤县" + }, { + "code": "230522", + "name": "友谊县" + }, { + "code": "230523", + "name": "宝清县" + }, { + "code": "230524", + "name": "饶河县" + }] + }, { + "code": "2306", + "name": "大庆市", + "childs": [{ + "code": "230602", + "name": "萨尔图区" + }, { + "code": "230603", + "name": "龙凤区" + }, { + "code": "230604", + "name": "让胡路区" + }, { + "code": "230605", + "name": "红岗区" + }, { + "code": "230606", + "name": "大同区" + }, { + "code": "230621", + "name": "肇州县" + }, { + "code": "230622", + "name": "肇源县" + }, { + "code": "230623", + "name": "林甸县" + }, { + "code": "230624", + "name": "杜尔伯特蒙古族自治县" + }] + }, { + "code": "2307", + "name": "伊春市", + "childs": [{ + "code": "230702", + "name": "伊春区" + }, { + "code": "230703", + "name": "南岔区" + }, { + "code": "230704", + "name": "友好区" + }, { + "code": "230705", + "name": "西林区" + }, { + "code": "230706", + "name": "翠峦区" + }, { + "code": "230707", + "name": "新青区" + }, { + "code": "230708", + "name": "美溪区" + }, { + "code": "230709", + "name": "金山屯区" + }, { + "code": "230710", + "name": "五营区" + }, { + "code": "230711", + "name": "乌马河区" + }, { + "code": "230712", + "name": "汤旺河区" + }, { + "code": "230713", + "name": "带岭区" + }, { + "code": "230714", + "name": "乌伊岭区" + }, { + "code": "230715", + "name": "红星区" + }, { + "code": "230716", + "name": "上甘岭区" + }, { + "code": "230722", + "name": "嘉荫县" + }, { + "code": "230781", + "name": "铁力市" + }] + }, { + "code": "2308", + "name": "佳木斯市", + "childs": [{ + "code": "230803", + "name": "向阳区" + }, { + "code": "230804", + "name": "前进区" + }, { + "code": "230805", + "name": "东风区" + }, { + "code": "230811", + "name": "郊区" + }, { + "code": "230822", + "name": "桦南县" + }, { + "code": "230826", + "name": "桦川县" + }, { + "code": "230828", + "name": "汤原县" + }, { + "code": "230881", + "name": "同江市" + }, { + "code": "230882", + "name": "富锦市" + }, { + "code": "230883", + "name": "抚远市" + }] + }, { + "code": "2309", + "name": "七台河市", + "childs": [{ + "code": "230902", + "name": "新兴区" + }, { + "code": "230903", + "name": "桃山区" + }, { + "code": "230904", + "name": "茄子河区" + }, { + "code": "230921", + "name": "勃利县" + }] + }, { + "code": "2310", + "name": "牡丹江市", + "childs": [{ + "code": "231002", + "name": "东安区" + }, { + "code": "231003", + "name": "阳明区" + }, { + "code": "231004", + "name": "爱民区" + }, { + "code": "231005", + "name": "西安区" + }, { + "code": "231025", + "name": "林口县" + }, { + "code": "231081", + "name": "绥芬河市" + }, { + "code": "231083", + "name": "海林市" + }, { + "code": "231084", + "name": "宁安市" + }, { + "code": "231085", + "name": "穆棱市" + }, { + "code": "231086", + "name": "东宁市" + }] + }, { + "code": "2311", + "name": "黑河市", + "childs": [{ + "code": "231102", + "name": "爱辉区" + }, { + "code": "231121", + "name": "嫩江县" + }, { + "code": "231123", + "name": "逊克县" + }, { + "code": "231124", + "name": "孙吴县" + }, { + "code": "231181", + "name": "北安市" + }, { + "code": "231182", + "name": "五大连池市" + }] + }, { + "code": "2312", + "name": "绥化市", + "childs": [{ + "code": "231202", + "name": "北林区" + }, { + "code": "231221", + "name": "望奎县" + }, { + "code": "231222", + "name": "兰西县" + }, { + "code": "231223", + "name": "青冈县" + }, { + "code": "231224", + "name": "庆安县" + }, { + "code": "231225", + "name": "明水县" + }, { + "code": "231226", + "name": "绥棱县" + }, { + "code": "231281", + "name": "安达市" + }, { + "code": "231282", + "name": "肇东市" + }, { + "code": "231283", + "name": "海伦市" + }] + }, { + "code": "2327", + "name": "大兴安岭地区", + "childs": [{ + "code": "232721", + "name": "呼玛县" + }, { + "code": "232722", + "name": "塔河县" + }, { + "code": "232723", + "name": "漠河县" + }] + }] +}, { + "code": "31", + "name": "上海市", + "childs": [{ + "code": "3101", + "name": "市辖区", + "childs": [{ + "code": "310101", + "name": "黄浦区" + }, { + "code": "310104", + "name": "徐汇区" + }, { + "code": "310105", + "name": "长宁区" + }, { + "code": "310106", + "name": "静安区" + }, { + "code": "310107", + "name": "普陀区" + }, { + "code": "310109", + "name": "虹口区" + }, { + "code": "310110", + "name": "杨浦区" + }, { + "code": "310112", + "name": "闵行区" + }, { + "code": "310113", + "name": "宝山区" + }, { + "code": "310114", + "name": "嘉定区" + }, { + "code": "310115", + "name": "浦东新区" + }, { + "code": "310116", + "name": "金山区" + }, { + "code": "310117", + "name": "松江区" + }, { + "code": "310118", + "name": "青浦区" + }, { + "code": "310120", + "name": "奉贤区" + }, { + "code": "310151", + "name": "崇明区" + }] + }] +}, { + "code": "32", + "name": "江苏省", + "childs": [{ + "code": "3201", + "name": "南京市", + "childs": [{ + "code": "320102", + "name": "玄武区" + }, { + "code": "320104", + "name": "秦淮区" + }, { + "code": "320105", + "name": "建邺区" + }, { + "code": "320106", + "name": "鼓楼区" + }, { + "code": "320111", + "name": "浦口区" + }, { + "code": "320113", + "name": "栖霞区" + }, { + "code": "320114", + "name": "雨花台区" + }, { + "code": "320115", + "name": "江宁区" + }, { + "code": "320116", + "name": "六合区" + }, { + "code": "320117", + "name": "溧水区" + }, { + "code": "320118", + "name": "高淳区" + }] + }, { + "code": "3202", + "name": "无锡市", + "childs": [{ + "code": "320205", + "name": "锡山区" + }, { + "code": "320206", + "name": "惠山区" + }, { + "code": "320211", + "name": "滨湖区" + }, { + "code": "320213", + "name": "梁溪区" + }, { + "code": "320214", + "name": "新吴区" + }, { + "code": "320281", + "name": "江阴市" + }, { + "code": "320282", + "name": "宜兴市" + }] + }, { + "code": "3203", + "name": "徐州市", + "childs": [{ + "code": "320302", + "name": "鼓楼区" + }, { + "code": "320303", + "name": "云龙区" + }, { + "code": "320305", + "name": "贾汪区" + }, { + "code": "320311", + "name": "泉山区" + }, { + "code": "320312", + "name": "铜山区" + }, { + "code": "320321", + "name": "丰县" + }, { + "code": "320322", + "name": "沛县" + }, { + "code": "320324", + "name": "睢宁县" + }, { + "code": "320381", + "name": "新沂市" + }, { + "code": "320382", + "name": "邳州市" + }] + }, { + "code": "3204", + "name": "常州市", + "childs": [{ + "code": "320402", + "name": "天宁区" + }, { + "code": "320404", + "name": "钟楼区" + }, { + "code": "320411", + "name": "新北区" + }, { + "code": "320412", + "name": "武进区" + }, { + "code": "320413", + "name": "金坛区" + }, { + "code": "320481", + "name": "溧阳市" + }] + }, { + "code": "3205", + "name": "苏州市", + "childs": [{ + "code": "320505", + "name": "虎丘区" + }, { + "code": "320506", + "name": "吴中区" + }, { + "code": "320507", + "name": "相城区" + }, { + "code": "320508", + "name": "姑苏区" + }, { + "code": "320509", + "name": "吴江区" + }, { + "code": "320581", + "name": "常熟市" + }, { + "code": "320582", + "name": "张家港市" + }, { + "code": "320583", + "name": "昆山市" + }, { + "code": "320585", + "name": "太仓市" + }] + }, { + "code": "3206", + "name": "南通市", + "childs": [{ + "code": "320602", + "name": "崇川区" + }, { + "code": "320611", + "name": "港闸区" + }, { + "code": "320612", + "name": "通州区" + }, { + "code": "320621", + "name": "海安县" + }, { + "code": "320623", + "name": "如东县" + }, { + "code": "320681", + "name": "启东市" + }, { + "code": "320682", + "name": "如皋市" + }, { + "code": "320684", + "name": "海门市" + }] + }, { + "code": "3207", + "name": "连云港市", + "childs": [{ + "code": "320703", + "name": "连云区" + }, { + "code": "320706", + "name": "海州区" + }, { + "code": "320707", + "name": "赣榆区" + }, { + "code": "320722", + "name": "东海县" + }, { + "code": "320723", + "name": "灌云县" + }, { + "code": "320724", + "name": "灌南县" + }] + }, { + "code": "3208", + "name": "淮安市", + "childs": [{ + "code": "320803", + "name": "淮安区" + }, { + "code": "320804", + "name": "淮阴区" + }, { + "code": "320812", + "name": "清江浦区" + }, { + "code": "320813", + "name": "洪泽区" + }, { + "code": "320826", + "name": "涟水县" + }, { + "code": "320830", + "name": "盱眙县" + }, { + "code": "320831", + "name": "金湖县" + }] + }, { + "code": "3209", + "name": "盐城市", + "childs": [{ + "code": "320902", + "name": "亭湖区" + }, { + "code": "320903", + "name": "盐都区" + }, { + "code": "320904", + "name": "大丰区" + }, { + "code": "320921", + "name": "响水县" + }, { + "code": "320922", + "name": "滨海县" + }, { + "code": "320923", + "name": "阜宁县" + }, { + "code": "320924", + "name": "射阳县" + }, { + "code": "320925", + "name": "建湖县" + }, { + "code": "320981", + "name": "东台市" + }] + }, { + "code": "3210", + "name": "扬州市", + "childs": [{ + "code": "321002", + "name": "广陵区" + }, { + "code": "321003", + "name": "邗江区" + }, { + "code": "321012", + "name": "江都区" + }, { + "code": "321023", + "name": "宝应县" + }, { + "code": "321081", + "name": "仪征市" + }, { + "code": "321084", + "name": "高邮市" + }] + }, { + "code": "3211", + "name": "镇江市", + "childs": [{ + "code": "321102", + "name": "京口区" + }, { + "code": "321111", + "name": "润州区" + }, { + "code": "321112", + "name": "丹徒区" + }, { + "code": "321181", + "name": "丹阳市" + }, { + "code": "321182", + "name": "扬中市" + }, { + "code": "321183", + "name": "句容市" + }] + }, { + "code": "3212", + "name": "泰州市", + "childs": [{ + "code": "321202", + "name": "海陵区" + }, { + "code": "321203", + "name": "高港区" + }, { + "code": "321204", + "name": "姜堰区" + }, { + "code": "321281", + "name": "兴化市" + }, { + "code": "321282", + "name": "靖江市" + }, { + "code": "321283", + "name": "泰兴市" + }] + }, { + "code": "3213", + "name": "宿迁市", + "childs": [{ + "code": "321302", + "name": "宿城区" + }, { + "code": "321311", + "name": "宿豫区" + }, { + "code": "321322", + "name": "沭阳县" + }, { + "code": "321323", + "name": "泗阳县" + }, { + "code": "321324", + "name": "泗洪县" + }] + }] +}, { + "code": "33", + "name": "浙江省", + "childs": [{ + "code": "3301", + "name": "杭州市", + "childs": [{ + "code": "330102", + "name": "上城区" + }, { + "code": "330103", + "name": "下城区" + }, { + "code": "330104", + "name": "江干区" + }, { + "code": "330105", + "name": "拱墅区" + }, { + "code": "330106", + "name": "西湖区" + }, { + "code": "330108", + "name": "滨江区" + }, { + "code": "330109", + "name": "萧山区" + }, { + "code": "330110", + "name": "余杭区" + }, { + "code": "330111", + "name": "富阳区" + }, { + "code": "330122", + "name": "桐庐县" + }, { + "code": "330127", + "name": "淳安县" + }, { + "code": "330182", + "name": "建德市" + }, { + "code": "330185", + "name": "临安市" + }] + }, { + "code": "3302", + "name": "宁波市", + "childs": [{ + "code": "330203", + "name": "海曙区" + }, { + "code": "330204", + "name": "江东区" + }, { + "code": "330205", + "name": "江北区" + }, { + "code": "330206", + "name": "北仑区" + }, { + "code": "330211", + "name": "镇海区" + }, { + "code": "330212", + "name": "鄞州区" + }, { + "code": "330225", + "name": "象山县" + }, { + "code": "330226", + "name": "宁海县" + }, { + "code": "330281", + "name": "余姚市" + }, { + "code": "330282", + "name": "慈溪市" + }, { + "code": "330283", + "name": "奉化市" + }] + }, { + "code": "3303", + "name": "温州市", + "childs": [{ + "code": "330302", + "name": "鹿城区" + }, { + "code": "330303", + "name": "龙湾区" + }, { + "code": "330304", + "name": "瓯海区" + }, { + "code": "330305", + "name": "洞头区" + }, { + "code": "330324", + "name": "永嘉县" + }, { + "code": "330326", + "name": "平阳县" + }, { + "code": "330327", + "name": "苍南县" + }, { + "code": "330328", + "name": "文成县" + }, { + "code": "330329", + "name": "泰顺县" + }, { + "code": "330381", + "name": "瑞安市" + }, { + "code": "330382", + "name": "乐清市" + }] + }, { + "code": "3304", + "name": "嘉兴市", + "childs": [{ + "code": "330402", + "name": "南湖区" + }, { + "code": "330411", + "name": "秀洲区" + }, { + "code": "330421", + "name": "嘉善县" + }, { + "code": "330424", + "name": "海盐县" + }, { + "code": "330481", + "name": "海宁市" + }, { + "code": "330482", + "name": "平湖市" + }, { + "code": "330483", + "name": "桐乡市" + }] + }, { + "code": "3305", + "name": "湖州市", + "childs": [{ + "code": "330502", + "name": "吴兴区" + }, { + "code": "330503", + "name": "南浔区" + }, { + "code": "330521", + "name": "德清县" + }, { + "code": "330522", + "name": "长兴县" + }, { + "code": "330523", + "name": "安吉县" + }] + }, { + "code": "3306", + "name": "绍兴市", + "childs": [{ + "code": "330602", + "name": "越城区" + }, { + "code": "330603", + "name": "柯桥区" + }, { + "code": "330604", + "name": "上虞区" + }, { + "code": "330624", + "name": "新昌县" + }, { + "code": "330681", + "name": "诸暨市" + }, { + "code": "330683", + "name": "嵊州市" + }] + }, { + "code": "3307", + "name": "金华市", + "childs": [{ + "code": "330702", + "name": "婺城区" + }, { + "code": "330703", + "name": "金东区" + }, { + "code": "330723", + "name": "武义县" + }, { + "code": "330726", + "name": "浦江县" + }, { + "code": "330727", + "name": "磐安县" + }, { + "code": "330781", + "name": "兰溪市" + }, { + "code": "330782", + "name": "义乌市" + }, { + "code": "330783", + "name": "东阳市" + }, { + "code": "330784", + "name": "永康市" + }] + }, { + "code": "3308", + "name": "衢州市", + "childs": [{ + "code": "330802", + "name": "柯城区" + }, { + "code": "330803", + "name": "衢江区" + }, { + "code": "330822", + "name": "常山县" + }, { + "code": "330824", + "name": "开化县" + }, { + "code": "330825", + "name": "龙游县" + }, { + "code": "330881", + "name": "江山市" + }] + }, { + "code": "3309", + "name": "舟山市", + "childs": [{ + "code": "330902", + "name": "定海区" + }, { + "code": "330903", + "name": "普陀区" + }, { + "code": "330921", + "name": "岱山县" + }, { + "code": "330922", + "name": "嵊泗县" + }] + }, { + "code": "3310", + "name": "台州市", + "childs": [{ + "code": "331002", + "name": "椒江区" + }, { + "code": "331003", + "name": "黄岩区" + }, { + "code": "331004", + "name": "路桥区" + }, { + "code": "331021", + "name": "玉环县" + }, { + "code": "331022", + "name": "三门县" + }, { + "code": "331023", + "name": "天台县" + }, { + "code": "331024", + "name": "仙居县" + }, { + "code": "331081", + "name": "温岭市" + }, { + "code": "331082", + "name": "临海市" + }] + }, { + "code": "3311", + "name": "丽水市", + "childs": [{ + "code": "331102", + "name": "莲都区" + }, { + "code": "331121", + "name": "青田县" + }, { + "code": "331122", + "name": "缙云县" + }, { + "code": "331123", + "name": "遂昌县" + }, { + "code": "331124", + "name": "松阳县" + }, { + "code": "331125", + "name": "云和县" + }, { + "code": "331126", + "name": "庆元县" + }, { + "code": "331127", + "name": "景宁畲族自治县" + }, { + "code": "331181", + "name": "龙泉市" + }] + }] +}, { + "code": "34", + "name": "安徽省", + "childs": [{ + "code": "3401", + "name": "合肥市", + "childs": [{ + "code": "340102", + "name": "瑶海区" + }, { + "code": "340103", + "name": "庐阳区" + }, { + "code": "340104", + "name": "蜀山区" + }, { + "code": "340111", + "name": "包河区" + }, { + "code": "340121", + "name": "长丰县" + }, { + "code": "340122", + "name": "肥东县" + }, { + "code": "340123", + "name": "肥西县" + }, { + "code": "340124", + "name": "庐江县" + }, { + "code": "340181", + "name": "巢湖市" + }] + }, { + "code": "3402", + "name": "芜湖市", + "childs": [{ + "code": "340202", + "name": "镜湖区" + }, { + "code": "340203", + "name": "弋江区" + }, { + "code": "340207", + "name": "鸠江区" + }, { + "code": "340208", + "name": "三山区" + }, { + "code": "340221", + "name": "芜湖县" + }, { + "code": "340222", + "name": "繁昌县" + }, { + "code": "340223", + "name": "南陵县" + }, { + "code": "340225", + "name": "无为县" + }] + }, { + "code": "3403", + "name": "蚌埠市", + "childs": [{ + "code": "340302", + "name": "龙子湖区" + }, { + "code": "340303", + "name": "蚌山区" + }, { + "code": "340304", + "name": "禹会区" + }, { + "code": "340311", + "name": "淮上区" + }, { + "code": "340321", + "name": "怀远县" + }, { + "code": "340322", + "name": "五河县" + }, { + "code": "340323", + "name": "固镇县" + }] + }, { + "code": "3404", + "name": "淮南市", + "childs": [{ + "code": "340402", + "name": "大通区" + }, { + "code": "340403", + "name": "田家庵区" + }, { + "code": "340404", + "name": "谢家集区" + }, { + "code": "340405", + "name": "八公山区" + }, { + "code": "340406", + "name": "潘集区" + }, { + "code": "340421", + "name": "凤台县" + }, { + "code": "340422", + "name": "寿县" + }] + }, { + "code": "3405", + "name": "马鞍山市", + "childs": [{ + "code": "340503", + "name": "花山区" + }, { + "code": "340504", + "name": "雨山区" + }, { + "code": "340506", + "name": "博望区" + }, { + "code": "340521", + "name": "当涂县" + }, { + "code": "340522", + "name": "含山县" + }, { + "code": "340523", + "name": "和县" + }] + }, { + "code": "3406", + "name": "淮北市", + "childs": [{ + "code": "340602", + "name": "杜集区" + }, { + "code": "340603", + "name": "相山区" + }, { + "code": "340604", + "name": "烈山区" + }, { + "code": "340621", + "name": "濉溪县" + }] + }, { + "code": "3407", + "name": "铜陵市", + "childs": [{ + "code": "340705", + "name": "铜官区" + }, { + "code": "340706", + "name": "义安区" + }, { + "code": "340711", + "name": "郊区" + }, { + "code": "340722", + "name": "枞阳县" + }] + }, { + "code": "3408", + "name": "安庆市", + "childs": [{ + "code": "340802", + "name": "迎江区" + }, { + "code": "340803", + "name": "大观区" + }, { + "code": "340811", + "name": "宜秀区" + }, { + "code": "340822", + "name": "怀宁县" + }, { + "code": "340824", + "name": "潜山县" + }, { + "code": "340825", + "name": "太湖县" + }, { + "code": "340826", + "name": "宿松县" + }, { + "code": "340827", + "name": "望江县" + }, { + "code": "340828", + "name": "岳西县" + }, { + "code": "340881", + "name": "桐城市" + }] + }, { + "code": "3410", + "name": "黄山市", + "childs": [{ + "code": "341002", + "name": "屯溪区" + }, { + "code": "341003", + "name": "黄山区" + }, { + "code": "341004", + "name": "徽州区" + }, { + "code": "341021", + "name": "歙县" + }, { + "code": "341022", + "name": "休宁县" + }, { + "code": "341023", + "name": "黟县" + }, { + "code": "341024", + "name": "祁门县" + }] + }, { + "code": "3411", + "name": "滁州市", + "childs": [{ + "code": "341102", + "name": "琅琊区" + }, { + "code": "341103", + "name": "南谯区" + }, { + "code": "341122", + "name": "来安县" + }, { + "code": "341124", + "name": "全椒县" + }, { + "code": "341125", + "name": "定远县" + }, { + "code": "341126", + "name": "凤阳县" + }, { + "code": "341181", + "name": "天长市" + }, { + "code": "341182", + "name": "明光市" + }] + }, { + "code": "3412", + "name": "阜阳市", + "childs": [{ + "code": "341202", + "name": "颍州区" + }, { + "code": "341203", + "name": "颍东区" + }, { + "code": "341204", + "name": "颍泉区" + }, { + "code": "341221", + "name": "临泉县" + }, { + "code": "341222", + "name": "太和县" + }, { + "code": "341225", + "name": "阜南县" + }, { + "code": "341226", + "name": "颍上县" + }, { + "code": "341282", + "name": "界首市" + }] + }, { + "code": "3413", + "name": "宿州市", + "childs": [{ + "code": "341302", + "name": "埇桥区" + }, { + "code": "341321", + "name": "砀山县" + }, { + "code": "341322", + "name": "萧县" + }, { + "code": "341323", + "name": "灵璧县" + }, { + "code": "341324", + "name": "泗县" + }] + }, { + "code": "3415", + "name": "六安市", + "childs": [{ + "code": "341502", + "name": "金安区" + }, { + "code": "341503", + "name": "裕安区" + }, { + "code": "341504", + "name": "叶集区" + }, { + "code": "341522", + "name": "霍邱县" + }, { + "code": "341523", + "name": "舒城县" + }, { + "code": "341524", + "name": "金寨县" + }, { + "code": "341525", + "name": "霍山县" + }] + }, { + "code": "3416", + "name": "亳州市", + "childs": [{ + "code": "341602", + "name": "谯城区" + }, { + "code": "341621", + "name": "涡阳县" + }, { + "code": "341622", + "name": "蒙城县" + }, { + "code": "341623", + "name": "利辛县" + }] + }, { + "code": "3417", + "name": "池州市", + "childs": [{ + "code": "341702", + "name": "贵池区" + }, { + "code": "341721", + "name": "东至县" + }, { + "code": "341722", + "name": "石台县" + }, { + "code": "341723", + "name": "青阳县" + }] + }, { + "code": "3418", + "name": "宣城市", + "childs": [{ + "code": "341802", + "name": "宣州区" + }, { + "code": "341821", + "name": "郎溪县" + }, { + "code": "341822", + "name": "广德县" + }, { + "code": "341823", + "name": "泾县" + }, { + "code": "341824", + "name": "绩溪县" + }, { + "code": "341825", + "name": "旌德县" + }, { + "code": "341881", + "name": "宁国市" + }] + }] +}, { + "code": "35", + "name": "福建省", + "childs": [{ + "code": "3501", + "name": "福州市", + "childs": [{ + "code": "350102", + "name": "鼓楼区" + }, { + "code": "350103", + "name": "台江区" + }, { + "code": "350104", + "name": "仓山区" + }, { + "code": "350105", + "name": "马尾区" + }, { + "code": "350111", + "name": "晋安区" + }, { + "code": "350121", + "name": "闽侯县" + }, { + "code": "350122", + "name": "连江县" + }, { + "code": "350123", + "name": "罗源县" + }, { + "code": "350124", + "name": "闽清县" + }, { + "code": "350125", + "name": "永泰县" + }, { + "code": "350128", + "name": "平潭县" + }, { + "code": "350181", + "name": "福清市" + }, { + "code": "350182", + "name": "长乐市" + }] + }, { + "code": "3502", + "name": "厦门市", + "childs": [{ + "code": "350203", + "name": "思明区" + }, { + "code": "350205", + "name": "海沧区" + }, { + "code": "350206", + "name": "湖里区" + }, { + "code": "350211", + "name": "集美区" + }, { + "code": "350212", + "name": "同安区" + }, { + "code": "350213", + "name": "翔安区" + }] + }, { + "code": "3503", + "name": "莆田市", + "childs": [{ + "code": "350302", + "name": "城厢区" + }, { + "code": "350303", + "name": "涵江区" + }, { + "code": "350304", + "name": "荔城区" + }, { + "code": "350305", + "name": "秀屿区" + }, { + "code": "350322", + "name": "仙游县" + }] + }, { + "code": "3504", + "name": "三明市", + "childs": [{ + "code": "350402", + "name": "梅列区" + }, { + "code": "350403", + "name": "三元区" + }, { + "code": "350421", + "name": "明溪县" + }, { + "code": "350423", + "name": "清流县" + }, { + "code": "350424", + "name": "宁化县" + }, { + "code": "350425", + "name": "大田县" + }, { + "code": "350426", + "name": "尤溪县" + }, { + "code": "350427", + "name": "沙县" + }, { + "code": "350428", + "name": "将乐县" + }, { + "code": "350429", + "name": "泰宁县" + }, { + "code": "350430", + "name": "建宁县" + }, { + "code": "350481", + "name": "永安市" + }] + }, { + "code": "3505", + "name": "泉州市", + "childs": [{ + "code": "350502", + "name": "鲤城区" + }, { + "code": "350503", + "name": "丰泽区" + }, { + "code": "350504", + "name": "洛江区" + }, { + "code": "350505", + "name": "泉港区" + }, { + "code": "350521", + "name": "惠安县" + }, { + "code": "350524", + "name": "安溪县" + }, { + "code": "350525", + "name": "永春县" + }, { + "code": "350526", + "name": "德化县" + }, { + "code": "350527", + "name": "金门县" + }, { + "code": "350581", + "name": "石狮市" + }, { + "code": "350582", + "name": "晋江市" + }, { + "code": "350583", + "name": "南安市" + }] + }, { + "code": "3506", + "name": "漳州市", + "childs": [{ + "code": "350602", + "name": "芗城区" + }, { + "code": "350603", + "name": "龙文区" + }, { + "code": "350622", + "name": "云霄县" + }, { + "code": "350623", + "name": "漳浦县" + }, { + "code": "350624", + "name": "诏安县" + }, { + "code": "350625", + "name": "长泰县" + }, { + "code": "350626", + "name": "东山县" + }, { + "code": "350627", + "name": "南靖县" + }, { + "code": "350628", + "name": "平和县" + }, { + "code": "350629", + "name": "华安县" + }, { + "code": "350681", + "name": "龙海市" + }] + }, { + "code": "3507", + "name": "南平市", + "childs": [{ + "code": "350702", + "name": "延平区" + }, { + "code": "350703", + "name": "建阳区" + }, { + "code": "350721", + "name": "顺昌县" + }, { + "code": "350722", + "name": "浦城县" + }, { + "code": "350723", + "name": "光泽县" + }, { + "code": "350724", + "name": "松溪县" + }, { + "code": "350725", + "name": "政和县" + }, { + "code": "350781", + "name": "邵武市" + }, { + "code": "350782", + "name": "武夷山市" + }, { + "code": "350783", + "name": "建瓯市" + }] + }, { + "code": "3508", + "name": "龙岩市", + "childs": [{ + "code": "350802", + "name": "新罗区" + }, { + "code": "350803", + "name": "永定区" + }, { + "code": "350821", + "name": "长汀县" + }, { + "code": "350823", + "name": "上杭县" + }, { + "code": "350824", + "name": "武平县" + }, { + "code": "350825", + "name": "连城县" + }, { + "code": "350881", + "name": "漳平市" + }] + }, { + "code": "3509", + "name": "宁德市", + "childs": [{ + "code": "350902", + "name": "蕉城区" + }, { + "code": "350921", + "name": "霞浦县" + }, { + "code": "350922", + "name": "古田县" + }, { + "code": "350923", + "name": "屏南县" + }, { + "code": "350924", + "name": "寿宁县" + }, { + "code": "350925", + "name": "周宁县" + }, { + "code": "350926", + "name": "柘荣县" + }, { + "code": "350981", + "name": "福安市" + }, { + "code": "350982", + "name": "福鼎市" + }] + }] +}, { + "code": "36", + "name": "江西省", + "childs": [{ + "code": "3601", + "name": "南昌市", + "childs": [{ + "code": "360102", + "name": "东湖区" + }, { + "code": "360103", + "name": "西湖区" + }, { + "code": "360104", + "name": "青云谱区" + }, { + "code": "360105", + "name": "湾里区" + }, { + "code": "360111", + "name": "青山湖区" + }, { + "code": "360112", + "name": "新建区" + }, { + "code": "360121", + "name": "南昌县" + }, { + "code": "360123", + "name": "安义县" + }, { + "code": "360124", + "name": "进贤县" + }] + }, { + "code": "3602", + "name": "景德镇市", + "childs": [{ + "code": "360202", + "name": "昌江区" + }, { + "code": "360203", + "name": "珠山区" + }, { + "code": "360222", + "name": "浮梁县" + }, { + "code": "360281", + "name": "乐平市" + }] + }, { + "code": "3603", + "name": "萍乡市", + "childs": [{ + "code": "360302", + "name": "安源区" + }, { + "code": "360313", + "name": "湘东区" + }, { + "code": "360321", + "name": "莲花县" + }, { + "code": "360322", + "name": "上栗县" + }, { + "code": "360323", + "name": "芦溪县" + }] + }, { + "code": "3604", + "name": "九江市", + "childs": [{ + "code": "360402", + "name": "濂溪区" + }, { + "code": "360403", + "name": "浔阳区" + }, { + "code": "360421", + "name": "九江县" + }, { + "code": "360423", + "name": "武宁县" + }, { + "code": "360424", + "name": "修水县" + }, { + "code": "360425", + "name": "永修县" + }, { + "code": "360426", + "name": "德安县" + }, { + "code": "360428", + "name": "都昌县" + }, { + "code": "360429", + "name": "湖口县" + }, { + "code": "360430", + "name": "彭泽县" + }, { + "code": "360481", + "name": "瑞昌市" + }, { + "code": "360482", + "name": "共青城市" + }, { + "code": "360483", + "name": "庐山市" + }] + }, { + "code": "3605", + "name": "新余市", + "childs": [{ + "code": "360502", + "name": "渝水区" + }, { + "code": "360521", + "name": "分宜县" + }] + }, { + "code": "3606", + "name": "鹰潭市", + "childs": [{ + "code": "360602", + "name": "月湖区" + }, { + "code": "360622", + "name": "余江县" + }, { + "code": "360681", + "name": "贵溪市" + }] + }, { + "code": "3607", + "name": "赣州市", + "childs": [{ + "code": "360702", + "name": "章贡区" + }, { + "code": "360703", + "name": "南康区" + }, { + "code": "360721", + "name": "赣县" + }, { + "code": "360722", + "name": "信丰县" + }, { + "code": "360723", + "name": "大余县" + }, { + "code": "360724", + "name": "上犹县" + }, { + "code": "360725", + "name": "崇义县" + }, { + "code": "360726", + "name": "安远县" + }, { + "code": "360727", + "name": "龙南县" + }, { + "code": "360728", + "name": "定南县" + }, { + "code": "360729", + "name": "全南县" + }, { + "code": "360730", + "name": "宁都县" + }, { + "code": "360731", + "name": "于都县" + }, { + "code": "360732", + "name": "兴国县" + }, { + "code": "360733", + "name": "会昌县" + }, { + "code": "360734", + "name": "寻乌县" + }, { + "code": "360735", + "name": "石城县" + }, { + "code": "360781", + "name": "瑞金市" + }] + }, { + "code": "3608", + "name": "吉安市", + "childs": [{ + "code": "360802", + "name": "吉州区" + }, { + "code": "360803", + "name": "青原区" + }, { + "code": "360821", + "name": "吉安县" + }, { + "code": "360822", + "name": "吉水县" + }, { + "code": "360823", + "name": "峡江县" + }, { + "code": "360824", + "name": "新干县" + }, { + "code": "360825", + "name": "永丰县" + }, { + "code": "360826", + "name": "泰和县" + }, { + "code": "360827", + "name": "遂川县" + }, { + "code": "360828", + "name": "万安县" + }, { + "code": "360829", + "name": "安福县" + }, { + "code": "360830", + "name": "永新县" + }, { + "code": "360881", + "name": "井冈山市" + }] + }, { + "code": "3609", + "name": "宜春市", + "childs": [{ + "code": "360902", + "name": "袁州区" + }, { + "code": "360921", + "name": "奉新县" + }, { + "code": "360922", + "name": "万载县" + }, { + "code": "360923", + "name": "上高县" + }, { + "code": "360924", + "name": "宜丰县" + }, { + "code": "360925", + "name": "靖安县" + }, { + "code": "360926", + "name": "铜鼓县" + }, { + "code": "360981", + "name": "丰城市" + }, { + "code": "360982", + "name": "樟树市" + }, { + "code": "360983", + "name": "高安市" + }] + }, { + "code": "3610", + "name": "抚州市", + "childs": [{ + "code": "361002", + "name": "临川区" + }, { + "code": "361021", + "name": "南城县" + }, { + "code": "361022", + "name": "黎川县" + }, { + "code": "361023", + "name": "南丰县" + }, { + "code": "361024", + "name": "崇仁县" + }, { + "code": "361025", + "name": "乐安县" + }, { + "code": "361026", + "name": "宜黄县" + }, { + "code": "361027", + "name": "金溪县" + }, { + "code": "361028", + "name": "资溪县" + }, { + "code": "361029", + "name": "东乡县" + }, { + "code": "361030", + "name": "广昌县" + }] + }, { + "code": "3611", + "name": "上饶市", + "childs": [{ + "code": "361102", + "name": "信州区" + }, { + "code": "361103", + "name": "广丰区" + }, { + "code": "361121", + "name": "上饶县" + }, { + "code": "361123", + "name": "玉山县" + }, { + "code": "361124", + "name": "铅山县" + }, { + "code": "361125", + "name": "横峰县" + }, { + "code": "361126", + "name": "弋阳县" + }, { + "code": "361127", + "name": "余干县" + }, { + "code": "361128", + "name": "鄱阳县" + }, { + "code": "361129", + "name": "万年县" + }, { + "code": "361130", + "name": "婺源县" + }, { + "code": "361181", + "name": "德兴市" + }] + }] +}, { + "code": "37", + "name": "山东省", + "childs": [{ + "code": "3701", + "name": "济南市", + "childs": [{ + "code": "370102", + "name": "历下区" + }, { + "code": "370103", + "name": "市中区" + }, { + "code": "370104", + "name": "槐荫区" + }, { + "code": "370105", + "name": "天桥区" + }, { + "code": "370112", + "name": "历城区" + }, { + "code": "370113", + "name": "长清区" + }, { + "code": "370124", + "name": "平阴县" + }, { + "code": "370125", + "name": "济阳县" + }, { + "code": "370126", + "name": "商河县" + }, { + "code": "370181", + "name": "章丘市" + }] + }, { + "code": "3702", + "name": "青岛市", + "childs": [{ + "code": "370202", + "name": "市南区" + }, { + "code": "370203", + "name": "市北区" + }, { + "code": "370211", + "name": "黄岛区" + }, { + "code": "370212", + "name": "崂山区" + }, { + "code": "370213", + "name": "李沧区" + }, { + "code": "370214", + "name": "城阳区" + }, { + "code": "370281", + "name": "胶州市" + }, { + "code": "370282", + "name": "即墨市" + }, { + "code": "370283", + "name": "平度市" + }, { + "code": "370285", + "name": "莱西市" + }] + }, { + "code": "3703", + "name": "淄博市", + "childs": [{ + "code": "370302", + "name": "淄川区" + }, { + "code": "370303", + "name": "张店区" + }, { + "code": "370304", + "name": "博山区" + }, { + "code": "370305", + "name": "临淄区" + }, { + "code": "370306", + "name": "周村区" + }, { + "code": "370321", + "name": "桓台县" + }, { + "code": "370322", + "name": "高青县" + }, { + "code": "370323", + "name": "沂源县" + }] + }, { + "code": "3704", + "name": "枣庄市", + "childs": [{ + "code": "370402", + "name": "市中区" + }, { + "code": "370403", + "name": "薛城区" + }, { + "code": "370404", + "name": "峄城区" + }, { + "code": "370405", + "name": "台儿庄区" + }, { + "code": "370406", + "name": "山亭区" + }, { + "code": "370481", + "name": "滕州市" + }] + }, { + "code": "3705", + "name": "东营市", + "childs": [{ + "code": "370502", + "name": "东营区" + }, { + "code": "370503", + "name": "河口区" + }, { + "code": "370505", + "name": "垦利区" + }, { + "code": "370522", + "name": "利津县" + }, { + "code": "370523", + "name": "广饶县" + }] + }, { + "code": "3706", + "name": "烟台市", + "childs": [{ + "code": "370602", + "name": "芝罘区" + }, { + "code": "370611", + "name": "福山区" + }, { + "code": "370612", + "name": "牟平区" + }, { + "code": "370613", + "name": "莱山区" + }, { + "code": "370634", + "name": "长岛县" + }, { + "code": "370681", + "name": "龙口市" + }, { + "code": "370682", + "name": "莱阳市" + }, { + "code": "370683", + "name": "莱州市" + }, { + "code": "370684", + "name": "蓬莱市" + }, { + "code": "370685", + "name": "招远市" + }, { + "code": "370686", + "name": "栖霞市" + }, { + "code": "370687", + "name": "海阳市" + }] + }, { + "code": "3707", + "name": "潍坊市", + "childs": [{ + "code": "370702", + "name": "潍城区" + }, { + "code": "370703", + "name": "寒亭区" + }, { + "code": "370704", + "name": "坊子区" + }, { + "code": "370705", + "name": "奎文区" + }, { + "code": "370724", + "name": "临朐县" + }, { + "code": "370725", + "name": "昌乐县" + }, { + "code": "370781", + "name": "青州市" + }, { + "code": "370782", + "name": "诸城市" + }, { + "code": "370783", + "name": "寿光市" + }, { + "code": "370784", + "name": "安丘市" + }, { + "code": "370785", + "name": "高密市" + }, { + "code": "370786", + "name": "昌邑市" + }] + }, { + "code": "3708", + "name": "济宁市", + "childs": [{ + "code": "370811", + "name": "任城区" + }, { + "code": "370812", + "name": "兖州区" + }, { + "code": "370826", + "name": "微山县" + }, { + "code": "370827", + "name": "鱼台县" + }, { + "code": "370828", + "name": "金乡县" + }, { + "code": "370829", + "name": "嘉祥县" + }, { + "code": "370830", + "name": "汶上县" + }, { + "code": "370831", + "name": "泗水县" + }, { + "code": "370832", + "name": "梁山县" + }, { + "code": "370881", + "name": "曲阜市" + }, { + "code": "370883", + "name": "邹城市" + }] + }, { + "code": "3709", + "name": "泰安市", + "childs": [{ + "code": "370902", + "name": "泰山区" + }, { + "code": "370911", + "name": "岱岳区" + }, { + "code": "370921", + "name": "宁阳县" + }, { + "code": "370923", + "name": "东平县" + }, { + "code": "370982", + "name": "新泰市" + }, { + "code": "370983", + "name": "肥城市" + }] + }, { + "code": "3710", + "name": "威海市", + "childs": [{ + "code": "371002", + "name": "环翠区" + }, { + "code": "371003", + "name": "文登区" + }, { + "code": "371082", + "name": "荣成市" + }, { + "code": "371083", + "name": "乳山市" + }] + }, { + "code": "3711", + "name": "日照市", + "childs": [{ + "code": "371102", + "name": "东港区" + }, { + "code": "371103", + "name": "岚山区" + }, { + "code": "371121", + "name": "五莲县" + }, { + "code": "371122", + "name": "莒县" + }] + }, { + "code": "3712", + "name": "莱芜市", + "childs": [{ + "code": "371202", + "name": "莱城区" + }, { + "code": "371203", + "name": "钢城区" + }] + }, { + "code": "3713", + "name": "临沂市", + "childs": [{ + "code": "371302", + "name": "兰山区" + }, { + "code": "371311", + "name": "罗庄区" + }, { + "code": "371312", + "name": "河东区" + }, { + "code": "371321", + "name": "沂南县" + }, { + "code": "371322", + "name": "郯城县" + }, { + "code": "371323", + "name": "沂水县" + }, { + "code": "371324", + "name": "兰陵县" + }, { + "code": "371325", + "name": "费县" + }, { + "code": "371326", + "name": "平邑县" + }, { + "code": "371327", + "name": "莒南县" + }, { + "code": "371328", + "name": "蒙阴县" + }, { + "code": "371329", + "name": "临沭县" + }] + }, { + "code": "3714", + "name": "德州市", + "childs": [{ + "code": "371402", + "name": "德城区" + }, { + "code": "371403", + "name": "陵城区" + }, { + "code": "371422", + "name": "宁津县" + }, { + "code": "371423", + "name": "庆云县" + }, { + "code": "371424", + "name": "临邑县" + }, { + "code": "371425", + "name": "齐河县" + }, { + "code": "371426", + "name": "平原县" + }, { + "code": "371427", + "name": "夏津县" + }, { + "code": "371428", + "name": "武城县" + }, { + "code": "371481", + "name": "乐陵市" + }, { + "code": "371482", + "name": "禹城市" + }] + }, { + "code": "3715", + "name": "聊城市", + "childs": [{ + "code": "371502", + "name": "东昌府区" + }, { + "code": "371521", + "name": "阳谷县" + }, { + "code": "371522", + "name": "莘县" + }, { + "code": "371523", + "name": "茌平县" + }, { + "code": "371524", + "name": "东阿县" + }, { + "code": "371525", + "name": "冠县" + }, { + "code": "371526", + "name": "高唐县" + }, { + "code": "371581", + "name": "临清市" + }] + }, { + "code": "3716", + "name": "滨州市", + "childs": [{ + "code": "371602", + "name": "滨城区" + }, { + "code": "371603", + "name": "沾化区" + }, { + "code": "371621", + "name": "惠民县" + }, { + "code": "371622", + "name": "阳信县" + }, { + "code": "371623", + "name": "无棣县" + }, { + "code": "371625", + "name": "博兴县" + }, { + "code": "371626", + "name": "邹平县" + }] + }, { + "code": "3717", + "name": "菏泽市", + "childs": [{ + "code": "371702", + "name": "牡丹区" + }, { + "code": "371703", + "name": "定陶区" + }, { + "code": "371721", + "name": "曹县" + }, { + "code": "371722", + "name": "单县" + }, { + "code": "371723", + "name": "成武县" + }, { + "code": "371724", + "name": "巨野县" + }, { + "code": "371725", + "name": "郓城县" + }, { + "code": "371726", + "name": "鄄城县" + }, { + "code": "371728", + "name": "东明县" + }] + }] +}, { + "code": "41", + "name": "河南省", + "childs": [{ + "code": "4101", + "name": "郑州市", + "childs": [{ + "code": "410102", + "name": "中原区" + }, { + "code": "410103", + "name": "二七区" + }, { + "code": "410104", + "name": "管城回族区" + }, { + "code": "410105", + "name": "金水区" + }, { + "code": "410106", + "name": "上街区" + }, { + "code": "410108", + "name": "惠济区" + }, { + "code": "410122", + "name": "中牟县" + }, { + "code": "410181", + "name": "巩义市" + }, { + "code": "410182", + "name": "荥阳市" + }, { + "code": "410183", + "name": "新密市" + }, { + "code": "410184", + "name": "新郑市" + }, { + "code": "410185", + "name": "登封市" + }] + }, { + "code": "4102", + "name": "开封市", + "childs": [{ + "code": "410202", + "name": "龙亭区" + }, { + "code": "410203", + "name": "顺河回族区" + }, { + "code": "410204", + "name": "鼓楼区" + }, { + "code": "410205", + "name": "禹王台区" + }, { + "code": "410211", + "name": "金明区" + }, { + "code": "410212", + "name": "祥符区" + }, { + "code": "410221", + "name": "杞县" + }, { + "code": "410222", + "name": "通许县" + }, { + "code": "410223", + "name": "尉氏县" + }, { + "code": "410225", + "name": "兰考县" + }] + }, { + "code": "4103", + "name": "洛阳市", + "childs": [{ + "code": "410302", + "name": "老城区" + }, { + "code": "410303", + "name": "西工区" + }, { + "code": "410304", + "name": "瀍河回族区" + }, { + "code": "410305", + "name": "涧西区" + }, { + "code": "410306", + "name": "吉利区" + }, { + "code": "410311", + "name": "洛龙区" + }, { + "code": "410322", + "name": "孟津县" + }, { + "code": "410323", + "name": "新安县" + }, { + "code": "410324", + "name": "栾川县" + }, { + "code": "410325", + "name": "嵩县" + }, { + "code": "410326", + "name": "汝阳县" + }, { + "code": "410327", + "name": "宜阳县" + }, { + "code": "410328", + "name": "洛宁县" + }, { + "code": "410329", + "name": "伊川县" + }, { + "code": "410381", + "name": "偃师市" + }] + }, { + "code": "4104", + "name": "平顶山市", + "childs": [{ + "code": "410402", + "name": "新华区" + }, { + "code": "410403", + "name": "卫东区" + }, { + "code": "410404", + "name": "石龙区" + }, { + "code": "410411", + "name": "湛河区" + }, { + "code": "410421", + "name": "宝丰县" + }, { + "code": "410422", + "name": "叶县" + }, { + "code": "410423", + "name": "鲁山县" + }, { + "code": "410425", + "name": "郏县" + }, { + "code": "410481", + "name": "舞钢市" + }, { + "code": "410482", + "name": "汝州市" + }] + }, { + "code": "4105", + "name": "安阳市", + "childs": [{ + "code": "410502", + "name": "文峰区" + }, { + "code": "410503", + "name": "北关区" + }, { + "code": "410505", + "name": "殷都区" + }, { + "code": "410506", + "name": "龙安区" + }, { + "code": "410522", + "name": "安阳县" + }, { + "code": "410523", + "name": "汤阴县" + }, { + "code": "410526", + "name": "滑县" + }, { + "code": "410527", + "name": "内黄县" + }, { + "code": "410581", + "name": "林州市" + }] + }, { + "code": "4106", + "name": "鹤壁市", + "childs": [{ + "code": "410602", + "name": "鹤山区" + }, { + "code": "410603", + "name": "山城区" + }, { + "code": "410611", + "name": "淇滨区" + }, { + "code": "410621", + "name": "浚县" + }, { + "code": "410622", + "name": "淇县" + }] + }, { + "code": "4107", + "name": "新乡市", + "childs": [{ + "code": "410702", + "name": "红旗区" + }, { + "code": "410703", + "name": "卫滨区" + }, { + "code": "410704", + "name": "凤泉区" + }, { + "code": "410711", + "name": "牧野区" + }, { + "code": "410721", + "name": "新乡县" + }, { + "code": "410724", + "name": "获嘉县" + }, { + "code": "410725", + "name": "原阳县" + }, { + "code": "410726", + "name": "延津县" + }, { + "code": "410727", + "name": "封丘县" + }, { + "code": "410728", + "name": "长垣县" + }, { + "code": "410781", + "name": "卫辉市" + }, { + "code": "410782", + "name": "辉县市" + }] + }, { + "code": "4108", + "name": "焦作市", + "childs": [{ + "code": "410802", + "name": "解放区" + }, { + "code": "410803", + "name": "中站区" + }, { + "code": "410804", + "name": "马村区" + }, { + "code": "410811", + "name": "山阳区" + }, { + "code": "410821", + "name": "修武县" + }, { + "code": "410822", + "name": "博爱县" + }, { + "code": "410823", + "name": "武陟县" + }, { + "code": "410825", + "name": "温县" + }, { + "code": "410882", + "name": "沁阳市" + }, { + "code": "410883", + "name": "孟州市" + }] + }, { + "code": "4109", + "name": "濮阳市", + "childs": [{ + "code": "410902", + "name": "华龙区" + }, { + "code": "410922", + "name": "清丰县" + }, { + "code": "410923", + "name": "南乐县" + }, { + "code": "410926", + "name": "范县" + }, { + "code": "410927", + "name": "台前县" + }, { + "code": "410928", + "name": "濮阳县" + }] + }, { + "code": "4110", + "name": "许昌市", + "childs": [{ + "code": "411002", + "name": "魏都区" + }, { + "code": "411023", + "name": "许昌县" + }, { + "code": "411024", + "name": "鄢陵县" + }, { + "code": "411025", + "name": "襄城县" + }, { + "code": "411081", + "name": "禹州市" + }, { + "code": "411082", + "name": "长葛市" + }] + }, { + "code": "4111", + "name": "漯河市", + "childs": [{ + "code": "411102", + "name": "源汇区" + }, { + "code": "411103", + "name": "郾城区" + }, { + "code": "411104", + "name": "召陵区" + }, { + "code": "411121", + "name": "舞阳县" + }, { + "code": "411122", + "name": "临颍县" + }] + }, { + "code": "4112", + "name": "三门峡市", + "childs": [{ + "code": "411202", + "name": "湖滨区" + }, { + "code": "411203", + "name": "陕州区" + }, { + "code": "411221", + "name": "渑池县" + }, { + "code": "411224", + "name": "卢氏县" + }, { + "code": "411281", + "name": "义马市" + }, { + "code": "411282", + "name": "灵宝市" + }] + }, { + "code": "4113", + "name": "南阳市", + "childs": [{ + "code": "411302", + "name": "宛城区" + }, { + "code": "411303", + "name": "卧龙区" + }, { + "code": "411321", + "name": "南召县" + }, { + "code": "411322", + "name": "方城县" + }, { + "code": "411323", + "name": "西峡县" + }, { + "code": "411324", + "name": "镇平县" + }, { + "code": "411325", + "name": "内乡县" + }, { + "code": "411326", + "name": "淅川县" + }, { + "code": "411327", + "name": "社旗县" + }, { + "code": "411328", + "name": "唐河县" + }, { + "code": "411329", + "name": "新野县" + }, { + "code": "411330", + "name": "桐柏县" + }, { + "code": "411381", + "name": "邓州市" + }] + }, { + "code": "4114", + "name": "商丘市", + "childs": [{ + "code": "411402", + "name": "梁园区" + }, { + "code": "411403", + "name": "睢阳区" + }, { + "code": "411421", + "name": "民权县" + }, { + "code": "411422", + "name": "睢县" + }, { + "code": "411423", + "name": "宁陵县" + }, { + "code": "411424", + "name": "柘城县" + }, { + "code": "411425", + "name": "虞城县" + }, { + "code": "411426", + "name": "夏邑县" + }, { + "code": "411481", + "name": "永城市" + }] + }, { + "code": "4115", + "name": "信阳市", + "childs": [{ + "code": "411502", + "name": "浉河区" + }, { + "code": "411503", + "name": "平桥区" + }, { + "code": "411521", + "name": "罗山县" + }, { + "code": "411522", + "name": "光山县" + }, { + "code": "411523", + "name": "新县" + }, { + "code": "411524", + "name": "商城县" + }, { + "code": "411525", + "name": "固始县" + }, { + "code": "411526", + "name": "潢川县" + }, { + "code": "411527", + "name": "淮滨县" + }, { + "code": "411528", + "name": "息县" + }] + }, { + "code": "4116", + "name": "周口市", + "childs": [{ + "code": "411602", + "name": "川汇区" + }, { + "code": "411621", + "name": "扶沟县" + }, { + "code": "411622", + "name": "西华县" + }, { + "code": "411623", + "name": "商水县" + }, { + "code": "411624", + "name": "沈丘县" + }, { + "code": "411625", + "name": "郸城县" + }, { + "code": "411626", + "name": "淮阳县" + }, { + "code": "411627", + "name": "太康县" + }, { + "code": "411628", + "name": "鹿邑县" + }, { + "code": "411681", + "name": "项城市" + }] + }, { + "code": "4117", + "name": "驻马店市", + "childs": [{ + "code": "411702", + "name": "驿城区" + }, { + "code": "411721", + "name": "西平县" + }, { + "code": "411722", + "name": "上蔡县" + }, { + "code": "411723", + "name": "平舆县" + }, { + "code": "411724", + "name": "正阳县" + }, { + "code": "411725", + "name": "确山县" + }, { + "code": "411726", + "name": "泌阳县" + }, { + "code": "411727", + "name": "汝南县" + }, { + "code": "411728", + "name": "遂平县" + }, { + "code": "411729", + "name": "新蔡县" + }] + }, { + "code": "4190", + "name": "省直辖县级行政区划", + "childs": [{ + "code": "419001", + "name": "济源市" + }] + }] +}, { + "code": "42", + "name": "湖北省", + "childs": [{ + "code": "4201", + "name": "武汉市", + "childs": [{ + "code": "420102", + "name": "江岸区" + }, { + "code": "420103", + "name": "江汉区" + }, { + "code": "420104", + "name": "硚口区" + }, { + "code": "420105", + "name": "汉阳区" + }, { + "code": "420106", + "name": "武昌区" + }, { + "code": "420107", + "name": "青山区" + }, { + "code": "420111", + "name": "洪山区" + }, { + "code": "420112", + "name": "东西湖区" + }, { + "code": "420113", + "name": "汉南区" + }, { + "code": "420114", + "name": "蔡甸区" + }, { + "code": "420115", + "name": "江夏区" + }, { + "code": "420116", + "name": "黄陂区" + }, { + "code": "420117", + "name": "新洲区" + }] + }, { + "code": "4202", + "name": "黄石市", + "childs": [{ + "code": "420202", + "name": "黄石港区" + }, { + "code": "420203", + "name": "西塞山区" + }, { + "code": "420204", + "name": "下陆区" + }, { + "code": "420205", + "name": "铁山区" + }, { + "code": "420222", + "name": "阳新县" + }, { + "code": "420281", + "name": "大冶市" + }] + }, { + "code": "4203", + "name": "十堰市", + "childs": [{ + "code": "420302", + "name": "茅箭区" + }, { + "code": "420303", + "name": "张湾区" + }, { + "code": "420304", + "name": "郧阳区" + }, { + "code": "420322", + "name": "郧西县" + }, { + "code": "420323", + "name": "竹山县" + }, { + "code": "420324", + "name": "竹溪县" + }, { + "code": "420325", + "name": "房县" + }, { + "code": "420381", + "name": "丹江口市" + }] + }, { + "code": "4205", + "name": "宜昌市", + "childs": [{ + "code": "420502", + "name": "西陵区" + }, { + "code": "420503", + "name": "伍家岗区" + }, { + "code": "420504", + "name": "点军区" + }, { + "code": "420505", + "name": "猇亭区" + }, { + "code": "420506", + "name": "夷陵区" + }, { + "code": "420525", + "name": "远安县" + }, { + "code": "420526", + "name": "兴山县" + }, { + "code": "420527", + "name": "秭归县" + }, { + "code": "420528", + "name": "长阳土家族自治县" + }, { + "code": "420529", + "name": "五峰土家族自治县" + }, { + "code": "420581", + "name": "宜都市" + }, { + "code": "420582", + "name": "当阳市" + }, { + "code": "420583", + "name": "枝江市" + }] + }, { + "code": "4206", + "name": "襄阳市", + "childs": [{ + "code": "420602", + "name": "襄城区" + }, { + "code": "420606", + "name": "樊城区" + }, { + "code": "420607", + "name": "襄州区" + }, { + "code": "420624", + "name": "南漳县" + }, { + "code": "420625", + "name": "谷城县" + }, { + "code": "420626", + "name": "保康县" + }, { + "code": "420682", + "name": "老河口市" + }, { + "code": "420683", + "name": "枣阳市" + }, { + "code": "420684", + "name": "宜城市" + }] + }, { + "code": "4207", + "name": "鄂州市", + "childs": [{ + "code": "420702", + "name": "梁子湖区" + }, { + "code": "420703", + "name": "华容区" + }, { + "code": "420704", + "name": "鄂城区" + }] + }, { + "code": "4208", + "name": "荆门市", + "childs": [{ + "code": "420802", + "name": "东宝区" + }, { + "code": "420804", + "name": "掇刀区" + }, { + "code": "420821", + "name": "京山县" + }, { + "code": "420822", + "name": "沙洋县" + }, { + "code": "420881", + "name": "钟祥市" + }] + }, { + "code": "4209", + "name": "孝感市", + "childs": [{ + "code": "420902", + "name": "孝南区" + }, { + "code": "420921", + "name": "孝昌县" + }, { + "code": "420922", + "name": "大悟县" + }, { + "code": "420923", + "name": "云梦县" + }, { + "code": "420981", + "name": "应城市" + }, { + "code": "420982", + "name": "安陆市" + }, { + "code": "420984", + "name": "汉川市" + }] + }, { + "code": "4210", + "name": "荆州市", + "childs": [{ + "code": "421002", + "name": "沙市区" + }, { + "code": "421003", + "name": "荆州区" + }, { + "code": "421022", + "name": "公安县" + }, { + "code": "421023", + "name": "监利县" + }, { + "code": "421024", + "name": "江陵县" + }, { + "code": "421081", + "name": "石首市" + }, { + "code": "421083", + "name": "洪湖市" + }, { + "code": "421087", + "name": "松滋市" + }] + }, { + "code": "4211", + "name": "黄冈市", + "childs": [{ + "code": "421102", + "name": "黄州区" + }, { + "code": "421121", + "name": "团风县" + }, { + "code": "421122", + "name": "红安县" + }, { + "code": "421123", + "name": "罗田县" + }, { + "code": "421124", + "name": "英山县" + }, { + "code": "421125", + "name": "浠水县" + }, { + "code": "421126", + "name": "蕲春县" + }, { + "code": "421127", + "name": "黄梅县" + }, { + "code": "421181", + "name": "麻城市" + }, { + "code": "421182", + "name": "武穴市" + }] + }, { + "code": "4212", + "name": "咸宁市", + "childs": [{ + "code": "421202", + "name": "咸安区" + }, { + "code": "421221", + "name": "嘉鱼县" + }, { + "code": "421222", + "name": "通城县" + }, { + "code": "421223", + "name": "崇阳县" + }, { + "code": "421224", + "name": "通山县" + }, { + "code": "421281", + "name": "赤壁市" + }] + }, { + "code": "4213", + "name": "随州市", + "childs": [{ + "code": "421303", + "name": "曾都区" + }, { + "code": "421321", + "name": "随县" + }, { + "code": "421381", + "name": "广水市" + }] + }, { + "code": "4228", + "name": "恩施土家族苗族自治州", + "childs": [{ + "code": "422801", + "name": "恩施市" + }, { + "code": "422802", + "name": "利川市" + }, { + "code": "422822", + "name": "建始县" + }, { + "code": "422823", + "name": "巴东县" + }, { + "code": "422825", + "name": "宣恩县" + }, { + "code": "422826", + "name": "咸丰县" + }, { + "code": "422827", + "name": "来凤县" + }, { + "code": "422828", + "name": "鹤峰县" + }] + }, { + "code": "4290", + "name": "省直辖县级行政区划", + "childs": [{ + "code": "429004", + "name": "仙桃市" + }, { + "code": "429005", + "name": "潜江市" + }, { + "code": "429006", + "name": "天门市" + }, { + "code": "429021", + "name": "神农架林区" + }] + }] +}, { + "code": "43", + "name": "湖南省", + "childs": [{ + "code": "4301", + "name": "长沙市", + "childs": [{ + "code": "430102", + "name": "芙蓉区" + }, { + "code": "430103", + "name": "天心区" + }, { + "code": "430104", + "name": "岳麓区" + }, { + "code": "430105", + "name": "开福区" + }, { + "code": "430111", + "name": "雨花区" + }, { + "code": "430112", + "name": "望城区" + }, { + "code": "430121", + "name": "长沙县" + }, { + "code": "430124", + "name": "宁乡县" + }, { + "code": "430181", + "name": "浏阳市" + }] + }, { + "code": "4302", + "name": "株洲市", + "childs": [{ + "code": "430202", + "name": "荷塘区" + }, { + "code": "430203", + "name": "芦淞区" + }, { + "code": "430204", + "name": "石峰区" + }, { + "code": "430211", + "name": "天元区" + }, { + "code": "430221", + "name": "株洲县" + }, { + "code": "430223", + "name": "攸县" + }, { + "code": "430224", + "name": "茶陵县" + }, { + "code": "430225", + "name": "炎陵县" + }, { + "code": "430281", + "name": "醴陵市" + }] + }, { + "code": "4303", + "name": "湘潭市", + "childs": [{ + "code": "430302", + "name": "雨湖区" + }, { + "code": "430304", + "name": "岳塘区" + }, { + "code": "430321", + "name": "湘潭县" + }, { + "code": "430381", + "name": "湘乡市" + }, { + "code": "430382", + "name": "韶山市" + }] + }, { + "code": "4304", + "name": "衡阳市", + "childs": [{ + "code": "430405", + "name": "珠晖区" + }, { + "code": "430406", + "name": "雁峰区" + }, { + "code": "430407", + "name": "石鼓区" + }, { + "code": "430408", + "name": "蒸湘区" + }, { + "code": "430412", + "name": "南岳区" + }, { + "code": "430421", + "name": "衡阳县" + }, { + "code": "430422", + "name": "衡南县" + }, { + "code": "430423", + "name": "衡山县" + }, { + "code": "430424", + "name": "衡东县" + }, { + "code": "430426", + "name": "祁东县" + }, { + "code": "430481", + "name": "耒阳市" + }, { + "code": "430482", + "name": "常宁市" + }] + }, { + "code": "4305", + "name": "邵阳市", + "childs": [{ + "code": "430502", + "name": "双清区" + }, { + "code": "430503", + "name": "大祥区" + }, { + "code": "430511", + "name": "北塔区" + }, { + "code": "430521", + "name": "邵东县" + }, { + "code": "430522", + "name": "新邵县" + }, { + "code": "430523", + "name": "邵阳县" + }, { + "code": "430524", + "name": "隆回县" + }, { + "code": "430525", + "name": "洞口县" + }, { + "code": "430527", + "name": "绥宁县" + }, { + "code": "430528", + "name": "新宁县" + }, { + "code": "430529", + "name": "城步苗族自治县" + }, { + "code": "430581", + "name": "武冈市" + }] + }, { + "code": "4306", + "name": "岳阳市", + "childs": [{ + "code": "430602", + "name": "岳阳楼区" + }, { + "code": "430603", + "name": "云溪区" + }, { + "code": "430611", + "name": "君山区" + }, { + "code": "430621", + "name": "岳阳县" + }, { + "code": "430623", + "name": "华容县" + }, { + "code": "430624", + "name": "湘阴县" + }, { + "code": "430626", + "name": "平江县" + }, { + "code": "430681", + "name": "汨罗市" + }, { + "code": "430682", + "name": "临湘市" + }] + }, { + "code": "4307", + "name": "常德市", + "childs": [{ + "code": "430702", + "name": "武陵区" + }, { + "code": "430703", + "name": "鼎城区" + }, { + "code": "430721", + "name": "安乡县" + }, { + "code": "430722", + "name": "汉寿县" + }, { + "code": "430723", + "name": "澧县" + }, { + "code": "430724", + "name": "临澧县" + }, { + "code": "430725", + "name": "桃源县" + }, { + "code": "430726", + "name": "石门县" + }, { + "code": "430781", + "name": "津市市" + }] + }, { + "code": "4308", + "name": "张家界市", + "childs": [{ + "code": "430802", + "name": "永定区" + }, { + "code": "430811", + "name": "武陵源区" + }, { + "code": "430821", + "name": "慈利县" + }, { + "code": "430822", + "name": "桑植县" + }] + }, { + "code": "4309", + "name": "益阳市", + "childs": [{ + "code": "430902", + "name": "资阳区" + }, { + "code": "430903", + "name": "赫山区" + }, { + "code": "430921", + "name": "南县" + }, { + "code": "430922", + "name": "桃江县" + }, { + "code": "430923", + "name": "安化县" + }, { + "code": "430981", + "name": "沅江市" + }] + }, { + "code": "4310", + "name": "郴州市", + "childs": [{ + "code": "431002", + "name": "北湖区" + }, { + "code": "431003", + "name": "苏仙区" + }, { + "code": "431021", + "name": "桂阳县" + }, { + "code": "431022", + "name": "宜章县" + }, { + "code": "431023", + "name": "永兴县" + }, { + "code": "431024", + "name": "嘉禾县" + }, { + "code": "431025", + "name": "临武县" + }, { + "code": "431026", + "name": "汝城县" + }, { + "code": "431027", + "name": "桂东县" + }, { + "code": "431028", + "name": "安仁县" + }, { + "code": "431081", + "name": "资兴市" + }] + }, { + "code": "4311", + "name": "永州市", + "childs": [{ + "code": "431102", + "name": "零陵区" + }, { + "code": "431103", + "name": "冷水滩区" + }, { + "code": "431121", + "name": "祁阳县" + }, { + "code": "431122", + "name": "东安县" + }, { + "code": "431123", + "name": "双牌县" + }, { + "code": "431124", + "name": "道县" + }, { + "code": "431125", + "name": "江永县" + }, { + "code": "431126", + "name": "宁远县" + }, { + "code": "431127", + "name": "蓝山县" + }, { + "code": "431128", + "name": "新田县" + }, { + "code": "431129", + "name": "江华瑶族自治县" + }] + }, { + "code": "4312", + "name": "怀化市", + "childs": [{ + "code": "431202", + "name": "鹤城区" + }, { + "code": "431221", + "name": "中方县" + }, { + "code": "431222", + "name": "沅陵县" + }, { + "code": "431223", + "name": "辰溪县" + }, { + "code": "431224", + "name": "溆浦县" + }, { + "code": "431225", + "name": "会同县" + }, { + "code": "431226", + "name": "麻阳苗族自治县" + }, { + "code": "431227", + "name": "新晃侗族自治县" + }, { + "code": "431228", + "name": "芷江侗族自治县" + }, { + "code": "431229", + "name": "靖州苗族侗族自治县" + }, { + "code": "431230", + "name": "通道侗族自治县" + }, { + "code": "431281", + "name": "洪江市" + }] + }, { + "code": "4313", + "name": "娄底市", + "childs": [{ + "code": "431302", + "name": "娄星区" + }, { + "code": "431321", + "name": "双峰县" + }, { + "code": "431322", + "name": "新化县" + }, { + "code": "431381", + "name": "冷水江市" + }, { + "code": "431382", + "name": "涟源市" + }] + }, { + "code": "4331", + "name": "湘西土家族苗族自治州", + "childs": [{ + "code": "433101", + "name": "吉首市" + }, { + "code": "433122", + "name": "泸溪县" + }, { + "code": "433123", + "name": "凤凰县" + }, { + "code": "433124", + "name": "花垣县" + }, { + "code": "433125", + "name": "保靖县" + }, { + "code": "433126", + "name": "古丈县" + }, { + "code": "433127", + "name": "永顺县" + }, { + "code": "433130", + "name": "龙山县" + }] + }] +}, { + "code": "44", + "name": "广东省", + "childs": [{ + "code": "4401", + "name": "广州市", + "childs": [{ + "code": "440103", + "name": "荔湾区" + }, { + "code": "440104", + "name": "越秀区" + }, { + "code": "440105", + "name": "海珠区" + }, { + "code": "440106", + "name": "天河区" + }, { + "code": "440111", + "name": "白云区" + }, { + "code": "440112", + "name": "黄埔区" + }, { + "code": "440113", + "name": "番禺区" + }, { + "code": "440114", + "name": "花都区" + }, { + "code": "440115", + "name": "南沙区" + }, { + "code": "440117", + "name": "从化区" + }, { + "code": "440118", + "name": "增城区" + }] + }, { + "code": "4402", + "name": "韶关市", + "childs": [{ + "code": "440203", + "name": "武江区" + }, { + "code": "440204", + "name": "浈江区" + }, { + "code": "440205", + "name": "曲江区" + }, { + "code": "440222", + "name": "始兴县" + }, { + "code": "440224", + "name": "仁化县" + }, { + "code": "440229", + "name": "翁源县" + }, { + "code": "440232", + "name": "乳源瑶族自治县" + }, { + "code": "440233", + "name": "新丰县" + }, { + "code": "440281", + "name": "乐昌市" + }, { + "code": "440282", + "name": "南雄市" + }] + }, { + "code": "4403", + "name": "深圳市", + "childs": [{ + "code": "440303", + "name": "罗湖区" + }, { + "code": "440304", + "name": "福田区" + }, { + "code": "440305", + "name": "南山区" + }, { + "code": "440306", + "name": "宝安区" + }, { + "code": "440307", + "name": "龙岗区" + }, { + "code": "440308", + "name": "盐田区" + }] + }, { + "code": "4404", + "name": "珠海市", + "childs": [{ + "code": "440402", + "name": "香洲区" + }, { + "code": "440403", + "name": "斗门区" + }, { + "code": "440404", + "name": "金湾区" + }] + }, { + "code": "4405", + "name": "汕头市", + "childs": [{ + "code": "440507", + "name": "龙湖区" + }, { + "code": "440511", + "name": "金平区" + }, { + "code": "440512", + "name": "濠江区" + }, { + "code": "440513", + "name": "潮阳区" + }, { + "code": "440514", + "name": "潮南区" + }, { + "code": "440515", + "name": "澄海区" + }, { + "code": "440523", + "name": "南澳县" + }] + }, { + "code": "4406", + "name": "佛山市", + "childs": [{ + "code": "440604", + "name": "禅城区" + }, { + "code": "440605", + "name": "南海区" + }, { + "code": "440606", + "name": "顺德区" + }, { + "code": "440607", + "name": "三水区" + }, { + "code": "440608", + "name": "高明区" + }] + }, { + "code": "4407", + "name": "江门市", + "childs": [{ + "code": "440703", + "name": "蓬江区" + }, { + "code": "440704", + "name": "江海区" + }, { + "code": "440705", + "name": "新会区" + }, { + "code": "440781", + "name": "台山市" + }, { + "code": "440783", + "name": "开平市" + }, { + "code": "440784", + "name": "鹤山市" + }, { + "code": "440785", + "name": "恩平市" + }] + }, { + "code": "4408", + "name": "湛江市", + "childs": [{ + "code": "440802", + "name": "赤坎区" + }, { + "code": "440803", + "name": "霞山区" + }, { + "code": "440804", + "name": "坡头区" + }, { + "code": "440811", + "name": "麻章区" + }, { + "code": "440823", + "name": "遂溪县" + }, { + "code": "440825", + "name": "徐闻县" + }, { + "code": "440881", + "name": "廉江市" + }, { + "code": "440882", + "name": "雷州市" + }, { + "code": "440883", + "name": "吴川市" + }] + }, { + "code": "4409", + "name": "茂名市", + "childs": [{ + "code": "440902", + "name": "茂南区" + }, { + "code": "440904", + "name": "电白区" + }, { + "code": "440981", + "name": "高州市" + }, { + "code": "440982", + "name": "化州市" + }, { + "code": "440983", + "name": "信宜市" + }] + }, { + "code": "4412", + "name": "肇庆市", + "childs": [{ + "code": "441202", + "name": "端州区" + }, { + "code": "441203", + "name": "鼎湖区" + }, { + "code": "441204", + "name": "高要区" + }, { + "code": "441223", + "name": "广宁县" + }, { + "code": "441224", + "name": "怀集县" + }, { + "code": "441225", + "name": "封开县" + }, { + "code": "441226", + "name": "德庆县" + }, { + "code": "441284", + "name": "四会市" + }] + }, { + "code": "4413", + "name": "惠州市", + "childs": [{ + "code": "441302", + "name": "惠城区" + }, { + "code": "441303", + "name": "惠阳区" + }, { + "code": "441322", + "name": "博罗县" + }, { + "code": "441323", + "name": "惠东县" + }, { + "code": "441324", + "name": "龙门县" + }] + }, { + "code": "4414", + "name": "梅州市", + "childs": [{ + "code": "441402", + "name": "梅江区" + }, { + "code": "441403", + "name": "梅县区" + }, { + "code": "441422", + "name": "大埔县" + }, { + "code": "441423", + "name": "丰顺县" + }, { + "code": "441424", + "name": "五华县" + }, { + "code": "441426", + "name": "平远县" + }, { + "code": "441427", + "name": "蕉岭县" + }, { + "code": "441481", + "name": "兴宁市" + }] + }, { + "code": "4415", + "name": "汕尾市", + "childs": [{ + "code": "441502", + "name": "城区" + }, { + "code": "441521", + "name": "海丰县" + }, { + "code": "441523", + "name": "陆河县" + }, { + "code": "441581", + "name": "陆丰市" + }] + }, { + "code": "4416", + "name": "河源市", + "childs": [{ + "code": "441602", + "name": "源城区" + }, { + "code": "441621", + "name": "紫金县" + }, { + "code": "441622", + "name": "龙川县" + }, { + "code": "441623", + "name": "连平县" + }, { + "code": "441624", + "name": "和平县" + }, { + "code": "441625", + "name": "东源县" + }] + }, { + "code": "4417", + "name": "阳江市", + "childs": [{ + "code": "441702", + "name": "江城区" + }, { + "code": "441704", + "name": "阳东区" + }, { + "code": "441721", + "name": "阳西县" + }, { + "code": "441781", + "name": "阳春市" + }] + }, { + "code": "4418", + "name": "清远市", + "childs": [{ + "code": "441802", + "name": "清城区" + }, { + "code": "441803", + "name": "清新区" + }, { + "code": "441821", + "name": "佛冈县" + }, { + "code": "441823", + "name": "阳山县" + }, { + "code": "441825", + "name": "连山壮族瑶族自治县" + }, { + "code": "441826", + "name": "连南瑶族自治县" + }, { + "code": "441881", + "name": "英德市" + }, { + "code": "441882", + "name": "连州市" + }] + }, { + "code": "441900", + "name": "东莞市", + "childs": [{ + "code": "441900003", + "name": "东城街道办事处" + }, { + "code": "441900004", + "name": "南城街道办事处" + }, { + "code": "441900005", + "name": "万江街道办事处" + }, { + "code": "441900006", + "name": "莞城街道办事处" + }, { + "code": "441900101", + "name": "石碣镇" + }, { + "code": "441900102", + "name": "石龙镇" + }, { + "code": "441900103", + "name": "茶山镇" + }, { + "code": "441900104", + "name": "石排镇" + }, { + "code": "441900105", + "name": "企石镇" + }, { + "code": "441900106", + "name": "横沥镇" + }, { + "code": "441900107", + "name": "桥头镇" + }, { + "code": "441900108", + "name": "谢岗镇" + }, { + "code": "441900109", + "name": "东坑镇" + }, { + "code": "441900110", + "name": "常平镇" + }, { + "code": "441900111", + "name": "寮步镇" + }, { + "code": "441900112", + "name": "樟木头镇" + }, { + "code": "441900113", + "name": "大朗镇" + }, { + "code": "441900114", + "name": "黄江镇" + }, { + "code": "441900115", + "name": "清溪镇" + }, { + "code": "441900116", + "name": "塘厦镇" + }, { + "code": "441900117", + "name": "凤岗镇" + }, { + "code": "441900118", + "name": "大岭山镇" + }, { + "code": "441900119", + "name": "长安镇" + }, { + "code": "441900121", + "name": "虎门镇" + }, { + "code": "441900122", + "name": "厚街镇" + }, { + "code": "441900123", + "name": "沙田镇" + }, { + "code": "441900124", + "name": "道滘镇" + }, { + "code": "441900125", + "name": "洪梅镇" + }, { + "code": "441900126", + "name": "麻涌镇" + }, { + "code": "441900127", + "name": "望牛墩镇" + }, { + "code": "441900128", + "name": "中堂镇" + }, { + "code": "441900129", + "name": "高埗镇" + }, { + "code": "441900401", + "name": "松山湖管委会" + }, { + "code": "441900402", + "name": "虎门港管委会" + }, { + "code": "441900403", + "name": "东莞生态园" + }] + }, { + "code": "442000", + "name": "中山市", + "childs": [{ + "code": "442000001", + "name": "石岐区街道办事处" + }, { + "code": "442000002", + "name": "东区街道办事处" + }, { + "code": "442000003", + "name": "火炬开发区街道办事处" + }, { + "code": "442000004", + "name": "西区街道办事处" + }, { + "code": "442000005", + "name": "南区街道办事处" + }, { + "code": "442000006", + "name": "五桂山街道办事处" + }, { + "code": "442000100", + "name": "小榄镇" + }, { + "code": "442000101", + "name": "黄圃镇" + }, { + "code": "442000102", + "name": "民众镇" + }, { + "code": "442000103", + "name": "东凤镇" + }, { + "code": "442000104", + "name": "东升镇" + }, { + "code": "442000105", + "name": "古镇镇" + }, { + "code": "442000106", + "name": "沙溪镇" + }, { + "code": "442000107", + "name": "坦洲镇" + }, { + "code": "442000108", + "name": "港口镇" + }, { + "code": "442000109", + "name": "三角镇" + }, { + "code": "442000110", + "name": "横栏镇" + }, { + "code": "442000111", + "name": "南头镇" + }, { + "code": "442000112", + "name": "阜沙镇" + }, { + "code": "442000113", + "name": "南朗镇" + }, { + "code": "442000114", + "name": "三乡镇" + }, { + "code": "442000115", + "name": "板芙镇" + }, { + "code": "442000116", + "name": "大涌镇" + }, { + "code": "442000117", + "name": "神湾镇" + }] + }, { + "code": "4451", + "name": "潮州市", + "childs": [{ + "code": "445102", + "name": "湘桥区" + }, { + "code": "445103", + "name": "潮安区" + }, { + "code": "445122", + "name": "饶平县" + }] + }, { + "code": "4452", + "name": "揭阳市", + "childs": [{ + "code": "445202", + "name": "榕城区" + }, { + "code": "445203", + "name": "揭东区" + }, { + "code": "445222", + "name": "揭西县" + }, { + "code": "445224", + "name": "惠来县" + }, { + "code": "445281", + "name": "普宁市" + }] + }, { + "code": "4453", + "name": "云浮市", + "childs": [{ + "code": "445302", + "name": "云城区" + }, { + "code": "445303", + "name": "云安区" + }, { + "code": "445321", + "name": "新兴县" + }, { + "code": "445322", + "name": "郁南县" + }, { + "code": "445381", + "name": "罗定市" + }] + }] +}, { + "code": "45", + "name": "广西壮族自治区", + "childs": [{ + "code": "4501", + "name": "南宁市", + "childs": [{ + "code": "450102", + "name": "兴宁区" + }, { + "code": "450103", + "name": "青秀区" + }, { + "code": "450105", + "name": "江南区" + }, { + "code": "450107", + "name": "西乡塘区" + }, { + "code": "450108", + "name": "良庆区" + }, { + "code": "450109", + "name": "邕宁区" + }, { + "code": "450110", + "name": "武鸣区" + }, { + "code": "450123", + "name": "隆安县" + }, { + "code": "450124", + "name": "马山县" + }, { + "code": "450125", + "name": "上林县" + }, { + "code": "450126", + "name": "宾阳县" + }, { + "code": "450127", + "name": "横县" + }] + }, { + "code": "4502", + "name": "柳州市", + "childs": [{ + "code": "450202", + "name": "城中区" + }, { + "code": "450203", + "name": "鱼峰区" + }, { + "code": "450204", + "name": "柳南区" + }, { + "code": "450205", + "name": "柳北区" + }, { + "code": "450206", + "name": "柳江区" + }, { + "code": "450222", + "name": "柳城县" + }, { + "code": "450223", + "name": "鹿寨县" + }, { + "code": "450224", + "name": "融安县" + }, { + "code": "450225", + "name": "融水苗族自治县" + }, { + "code": "450226", + "name": "三江侗族自治县" + }] + }, { + "code": "4503", + "name": "桂林市", + "childs": [{ + "code": "450302", + "name": "秀峰区" + }, { + "code": "450303", + "name": "叠彩区" + }, { + "code": "450304", + "name": "象山区" + }, { + "code": "450305", + "name": "七星区" + }, { + "code": "450311", + "name": "雁山区" + }, { + "code": "450312", + "name": "临桂区" + }, { + "code": "450321", + "name": "阳朔县" + }, { + "code": "450323", + "name": "灵川县" + }, { + "code": "450324", + "name": "全州县" + }, { + "code": "450325", + "name": "兴安县" + }, { + "code": "450326", + "name": "永福县" + }, { + "code": "450327", + "name": "灌阳县" + }, { + "code": "450328", + "name": "龙胜各族自治县" + }, { + "code": "450329", + "name": "资源县" + }, { + "code": "450330", + "name": "平乐县" + }, { + "code": "450331", + "name": "荔浦县" + }, { + "code": "450332", + "name": "恭城瑶族自治县" + }] + }, { + "code": "4504", + "name": "梧州市", + "childs": [{ + "code": "450403", + "name": "万秀区" + }, { + "code": "450405", + "name": "长洲区" + }, { + "code": "450406", + "name": "龙圩区" + }, { + "code": "450421", + "name": "苍梧县" + }, { + "code": "450422", + "name": "藤县" + }, { + "code": "450423", + "name": "蒙山县" + }, { + "code": "450481", + "name": "岑溪市" + }] + }, { + "code": "4505", + "name": "北海市", + "childs": [{ + "code": "450502", + "name": "海城区" + }, { + "code": "450503", + "name": "银海区" + }, { + "code": "450512", + "name": "铁山港区" + }, { + "code": "450521", + "name": "合浦县" + }] + }, { + "code": "4506", + "name": "防城港市", + "childs": [{ + "code": "450602", + "name": "港口区" + }, { + "code": "450603", + "name": "防城区" + }, { + "code": "450621", + "name": "上思县" + }, { + "code": "450681", + "name": "东兴市" + }] + }, { + "code": "4507", + "name": "钦州市", + "childs": [{ + "code": "450702", + "name": "钦南区" + }, { + "code": "450703", + "name": "钦北区" + }, { + "code": "450721", + "name": "灵山县" + }, { + "code": "450722", + "name": "浦北县" + }] + }, { + "code": "4508", + "name": "贵港市", + "childs": [{ + "code": "450802", + "name": "港北区" + }, { + "code": "450803", + "name": "港南区" + }, { + "code": "450804", + "name": "覃塘区" + }, { + "code": "450821", + "name": "平南县" + }, { + "code": "450881", + "name": "桂平市" + }] + }, { + "code": "4509", + "name": "玉林市", + "childs": [{ + "code": "450902", + "name": "玉州区" + }, { + "code": "450903", + "name": "福绵区" + }, { + "code": "450921", + "name": "容县" + }, { + "code": "450922", + "name": "陆川县" + }, { + "code": "450923", + "name": "博白县" + }, { + "code": "450924", + "name": "兴业县" + }, { + "code": "450981", + "name": "北流市" + }] + }, { + "code": "4510", + "name": "百色市", + "childs": [{ + "code": "451002", + "name": "右江区" + }, { + "code": "451021", + "name": "田阳县" + }, { + "code": "451022", + "name": "田东县" + }, { + "code": "451023", + "name": "平果县" + }, { + "code": "451024", + "name": "德保县" + }, { + "code": "451026", + "name": "那坡县" + }, { + "code": "451027", + "name": "凌云县" + }, { + "code": "451028", + "name": "乐业县" + }, { + "code": "451029", + "name": "田林县" + }, { + "code": "451030", + "name": "西林县" + }, { + "code": "451031", + "name": "隆林各族自治县" + }, { + "code": "451081", + "name": "靖西市" + }] + }, { + "code": "4511", + "name": "贺州市", + "childs": [{ + "code": "451102", + "name": "八步区" + }, { + "code": "451103", + "name": "平桂区" + }, { + "code": "451121", + "name": "昭平县" + }, { + "code": "451122", + "name": "钟山县" + }, { + "code": "451123", + "name": "富川瑶族自治县" + }] + }, { + "code": "4512", + "name": "河池市", + "childs": [{ + "code": "451202", + "name": "金城江区" + }, { + "code": "451221", + "name": "南丹县" + }, { + "code": "451222", + "name": "天峨县" + }, { + "code": "451223", + "name": "凤山县" + }, { + "code": "451224", + "name": "东兰县" + }, { + "code": "451225", + "name": "罗城仫佬族自治县" + }, { + "code": "451226", + "name": "环江毛南族自治县" + }, { + "code": "451227", + "name": "巴马瑶族自治县" + }, { + "code": "451228", + "name": "都安瑶族自治县" + }, { + "code": "451229", + "name": "大化瑶族自治县" + }, { + "code": "451281", + "name": "宜州市" + }] + }, { + "code": "4513", + "name": "来宾市", + "childs": [{ + "code": "451302", + "name": "兴宾区" + }, { + "code": "451321", + "name": "忻城县" + }, { + "code": "451322", + "name": "象州县" + }, { + "code": "451323", + "name": "武宣县" + }, { + "code": "451324", + "name": "金秀瑶族自治县" + }, { + "code": "451381", + "name": "合山市" + }] + }, { + "code": "4514", + "name": "崇左市", + "childs": [{ + "code": "451402", + "name": "江州区" + }, { + "code": "451421", + "name": "扶绥县" + }, { + "code": "451422", + "name": "宁明县" + }, { + "code": "451423", + "name": "龙州县" + }, { + "code": "451424", + "name": "大新县" + }, { + "code": "451425", + "name": "天等县" + }, { + "code": "451481", + "name": "凭祥市" + }] + }] +}, { + "code": "46", + "name": "海南省", + "childs": [{ + "code": "4601", + "name": "海口市", + "childs": [{ + "code": "460105", + "name": "秀英区" + }, { + "code": "460106", + "name": "龙华区" + }, { + "code": "460107", + "name": "琼山区" + }, { + "code": "460108", + "name": "美兰区" + }] + }, { + "code": "4602", + "name": "三亚市", + "childs": [{ + "code": "460202", + "name": "海棠区" + }, { + "code": "460203", + "name": "吉阳区" + }, { + "code": "460204", + "name": "天涯区" + }, { + "code": "460205", + "name": "崖州区" + }] + }, { + "code": "4603", + "name": "三沙市", + "childs": [{ + "code": "460321", + "name": "西沙群岛" + }, { + "code": "460322", + "name": "南沙群岛" + }, { + "code": "460323", + "name": "中沙群岛的岛礁及其海域" + }] + }, { + "code": "460400", + "name": "儋州市", + "childs": [{ + "code": "460400100", + "name": "那大镇" + }, { + "code": "460400101", + "name": "和庆镇" + }, { + "code": "460400102", + "name": "南丰镇" + }, { + "code": "460400103", + "name": "大成镇" + }, { + "code": "460400104", + "name": "雅星镇" + }, { + "code": "460400105", + "name": "兰洋镇" + }, { + "code": "460400106", + "name": "光村镇" + }, { + "code": "460400107", + "name": "木棠镇" + }, { + "code": "460400108", + "name": "海头镇" + }, { + "code": "460400109", + "name": "峨蔓镇" + }, { + "code": "460400110", + "name": "三都镇" + }, { + "code": "460400111", + "name": "王五镇" + }, { + "code": "460400112", + "name": "白马井镇" + }, { + "code": "460400113", + "name": "中和镇" + }, { + "code": "460400114", + "name": "排浦镇" + }, { + "code": "460400115", + "name": "东成镇" + }, { + "code": "460400116", + "name": "新州镇" + }, { + "code": "460400400", + "name": "国营西培农场" + }, { + "code": "460400404", + "name": "国营西联农场" + }, { + "code": "460400405", + "name": "国营蓝洋农场" + }, { + "code": "460400407", + "name": "国营八一农场" + }, { + "code": "460400499", + "name": "洋浦经济开发区" + }, { + "code": "460400500", + "name": "华南热作学院" + }] + }, { + "code": "4690", + "name": "省直辖县级行政区划", + "childs": [{ + "code": "469001", + "name": "五指山市" + }, { + "code": "469002", + "name": "琼海市" + }, { + "code": "469005", + "name": "文昌市" + }, { + "code": "469006", + "name": "万宁市" + }, { + "code": "469007", + "name": "东方市" + }, { + "code": "469021", + "name": "定安县" + }, { + "code": "469022", + "name": "屯昌县" + }, { + "code": "469023", + "name": "澄迈县" + }, { + "code": "469024", + "name": "临高县" + }, { + "code": "469025", + "name": "白沙黎族自治县" + }, { + "code": "469026", + "name": "昌江黎族自治县" + }, { + "code": "469027", + "name": "乐东黎族自治县" + }, { + "code": "469028", + "name": "陵水黎族自治县" + }, { + "code": "469029", + "name": "保亭黎族苗族自治县" + }, { + "code": "469030", + "name": "琼中黎族苗族自治县" + }] + }] +}, { + "code": "50", + "name": "重庆市", + "childs": [{ + "code": "5001", + "name": "市辖区", + "childs": [{ + "code": "500101", + "name": "万州区" + }, { + "code": "500102", + "name": "涪陵区" + }, { + "code": "500103", + "name": "渝中区" + }, { + "code": "500104", + "name": "大渡口区" + }, { + "code": "500105", + "name": "江北区" + }, { + "code": "500106", + "name": "沙坪坝区" + }, { + "code": "500107", + "name": "九龙坡区" + }, { + "code": "500108", + "name": "南岸区" + }, { + "code": "500109", + "name": "北碚区" + }, { + "code": "500110", + "name": "綦江区" + }, { + "code": "500111", + "name": "大足区" + }, { + "code": "500112", + "name": "渝北区" + }, { + "code": "500113", + "name": "巴南区" + }, { + "code": "500114", + "name": "黔江区" + }, { + "code": "500115", + "name": "长寿区" + }, { + "code": "500116", + "name": "江津区" + }, { + "code": "500117", + "name": "合川区" + }, { + "code": "500118", + "name": "永川区" + }, { + "code": "500119", + "name": "南川区" + }, { + "code": "500120", + "name": "璧山区" + }, { + "code": "500151", + "name": "铜梁区" + }, { + "code": "500152", + "name": "潼南区" + }, { + "code": "500153", + "name": "荣昌区" + }, { + "code": "500154", + "name": "开州区" + }] + }, { + "code": "5002", + "name": "县", + "childs": [{ + "code": "500228", + "name": "梁平县" + }, { + "code": "500229", + "name": "城口县" + }, { + "code": "500230", + "name": "丰都县" + }, { + "code": "500231", + "name": "垫江县" + }, { + "code": "500232", + "name": "武隆县" + }, { + "code": "500233", + "name": "忠县" + }, { + "code": "500235", + "name": "云阳县" + }, { + "code": "500236", + "name": "奉节县" + }, { + "code": "500237", + "name": "巫山县" + }, { + "code": "500238", + "name": "巫溪县" + }, { + "code": "500240", + "name": "石柱土家族自治县" + }, { + "code": "500241", + "name": "秀山土家族苗族自治县" + }, { + "code": "500242", + "name": "酉阳土家族苗族自治县" + }, { + "code": "500243", + "name": "彭水苗族土家族自治县" + }] + }] +}, { + "code": "51", + "name": "四川省", + "childs": [{ + "code": "5101", + "name": "成都市", + "childs": [{ + "code": "510104", + "name": "锦江区" + }, { + "code": "510105", + "name": "青羊区" + }, { + "code": "510106", + "name": "金牛区" + }, { + "code": "510107", + "name": "武侯区" + }, { + "code": "510108", + "name": "成华区" + }, { + "code": "510112", + "name": "龙泉驿区" + }, { + "code": "510113", + "name": "青白江区" + }, { + "code": "510114", + "name": "新都区" + }, { + "code": "510115", + "name": "温江区" + }, { + "code": "510116", + "name": "双流区" + }, { + "code": "510121", + "name": "金堂县" + }, { + "code": "510124", + "name": "郫县" + }, { + "code": "510129", + "name": "大邑县" + }, { + "code": "510131", + "name": "蒲江县" + }, { + "code": "510132", + "name": "新津县" + }, { + "code": "510181", + "name": "都江堰市" + }, { + "code": "510182", + "name": "彭州市" + }, { + "code": "510183", + "name": "邛崃市" + }, { + "code": "510184", + "name": "崇州市" + }, { + "code": "510185", + "name": "简阳市" + }] + }, { + "code": "5103", + "name": "自贡市", + "childs": [{ + "code": "510302", + "name": "自流井区" + }, { + "code": "510303", + "name": "贡井区" + }, { + "code": "510304", + "name": "大安区" + }, { + "code": "510311", + "name": "沿滩区" + }, { + "code": "510321", + "name": "荣县" + }, { + "code": "510322", + "name": "富顺县" + }] + }, { + "code": "5104", + "name": "攀枝花市", + "childs": [{ + "code": "510402", + "name": "东区" + }, { + "code": "510403", + "name": "西区" + }, { + "code": "510411", + "name": "仁和区" + }, { + "code": "510421", + "name": "米易县" + }, { + "code": "510422", + "name": "盐边县" + }] + }, { + "code": "5105", + "name": "泸州市", + "childs": [{ + "code": "510502", + "name": "江阳区" + }, { + "code": "510503", + "name": "纳溪区" + }, { + "code": "510504", + "name": "龙马潭区" + }, { + "code": "510521", + "name": "泸县" + }, { + "code": "510522", + "name": "合江县" + }, { + "code": "510524", + "name": "叙永县" + }, { + "code": "510525", + "name": "古蔺县" + }] + }, { + "code": "5106", + "name": "德阳市", + "childs": [{ + "code": "510603", + "name": "旌阳区" + }, { + "code": "510623", + "name": "中江县" + }, { + "code": "510626", + "name": "罗江县" + }, { + "code": "510681", + "name": "广汉市" + }, { + "code": "510682", + "name": "什邡市" + }, { + "code": "510683", + "name": "绵竹市" + }] + }, { + "code": "5107", + "name": "绵阳市", + "childs": [{ + "code": "510703", + "name": "涪城区" + }, { + "code": "510704", + "name": "游仙区" + }, { + "code": "510705", + "name": "安州区" + }, { + "code": "510722", + "name": "三台县" + }, { + "code": "510723", + "name": "盐亭县" + }, { + "code": "510725", + "name": "梓潼县" + }, { + "code": "510726", + "name": "北川羌族自治县" + }, { + "code": "510727", + "name": "平武县" + }, { + "code": "510781", + "name": "江油市" + }] + }, { + "code": "5108", + "name": "广元市", + "childs": [{ + "code": "510802", + "name": "利州区" + }, { + "code": "510811", + "name": "昭化区" + }, { + "code": "510812", + "name": "朝天区" + }, { + "code": "510821", + "name": "旺苍县" + }, { + "code": "510822", + "name": "青川县" + }, { + "code": "510823", + "name": "剑阁县" + }, { + "code": "510824", + "name": "苍溪县" + }] + }, { + "code": "5109", + "name": "遂宁市", + "childs": [{ + "code": "510903", + "name": "船山区" + }, { + "code": "510904", + "name": "安居区" + }, { + "code": "510921", + "name": "蓬溪县" + }, { + "code": "510922", + "name": "射洪县" + }, { + "code": "510923", + "name": "大英县" + }] + }, { + "code": "5110", + "name": "内江市", + "childs": [{ + "code": "511002", + "name": "市中区" + }, { + "code": "511011", + "name": "东兴区" + }, { + "code": "511024", + "name": "威远县" + }, { + "code": "511025", + "name": "资中县" + }, { + "code": "511028", + "name": "隆昌县" + }] + }, { + "code": "5111", + "name": "乐山市", + "childs": [{ + "code": "511102", + "name": "市中区" + }, { + "code": "511111", + "name": "沙湾区" + }, { + "code": "511112", + "name": "五通桥区" + }, { + "code": "511113", + "name": "金口河区" + }, { + "code": "511123", + "name": "犍为县" + }, { + "code": "511124", + "name": "井研县" + }, { + "code": "511126", + "name": "夹江县" + }, { + "code": "511129", + "name": "沐川县" + }, { + "code": "511132", + "name": "峨边彝族自治县" + }, { + "code": "511133", + "name": "马边彝族自治县" + }, { + "code": "511181", + "name": "峨眉山市" + }] + }, { + "code": "5113", + "name": "南充市", + "childs": [{ + "code": "511302", + "name": "顺庆区" + }, { + "code": "511303", + "name": "高坪区" + }, { + "code": "511304", + "name": "嘉陵区" + }, { + "code": "511321", + "name": "南部县" + }, { + "code": "511322", + "name": "营山县" + }, { + "code": "511323", + "name": "蓬安县" + }, { + "code": "511324", + "name": "仪陇县" + }, { + "code": "511325", + "name": "西充县" + }, { + "code": "511381", + "name": "阆中市" + }] + }, { + "code": "5114", + "name": "眉山市", + "childs": [{ + "code": "511402", + "name": "东坡区" + }, { + "code": "511403", + "name": "彭山区" + }, { + "code": "511421", + "name": "仁寿县" + }, { + "code": "511423", + "name": "洪雅县" + }, { + "code": "511424", + "name": "丹棱县" + }, { + "code": "511425", + "name": "青神县" + }] + }, { + "code": "5115", + "name": "宜宾市", + "childs": [{ + "code": "511502", + "name": "翠屏区" + }, { + "code": "511503", + "name": "南溪区" + }, { + "code": "511521", + "name": "宜宾县" + }, { + "code": "511523", + "name": "江安县" + }, { + "code": "511524", + "name": "长宁县" + }, { + "code": "511525", + "name": "高县" + }, { + "code": "511526", + "name": "珙县" + }, { + "code": "511527", + "name": "筠连县" + }, { + "code": "511528", + "name": "兴文县" + }, { + "code": "511529", + "name": "屏山县" + }] + }, { + "code": "5116", + "name": "广安市", + "childs": [{ + "code": "511602", + "name": "广安区" + }, { + "code": "511603", + "name": "前锋区" + }, { + "code": "511621", + "name": "岳池县" + }, { + "code": "511622", + "name": "武胜县" + }, { + "code": "511623", + "name": "邻水县" + }, { + "code": "511681", + "name": "华蓥市" + }] + }, { + "code": "5117", + "name": "达州市", + "childs": [{ + "code": "511702", + "name": "通川区" + }, { + "code": "511703", + "name": "达川区" + }, { + "code": "511722", + "name": "宣汉县" + }, { + "code": "511723", + "name": "开江县" + }, { + "code": "511724", + "name": "大竹县" + }, { + "code": "511725", + "name": "渠县" + }, { + "code": "511781", + "name": "万源市" + }] + }, { + "code": "5118", + "name": "雅安市", + "childs": [{ + "code": "511802", + "name": "雨城区" + }, { + "code": "511803", + "name": "名山区" + }, { + "code": "511822", + "name": "荥经县" + }, { + "code": "511823", + "name": "汉源县" + }, { + "code": "511824", + "name": "石棉县" + }, { + "code": "511825", + "name": "天全县" + }, { + "code": "511826", + "name": "芦山县" + }, { + "code": "511827", + "name": "宝兴县" + }] + }, { + "code": "5119", + "name": "巴中市", + "childs": [{ + "code": "511902", + "name": "巴州区" + }, { + "code": "511903", + "name": "恩阳区" + }, { + "code": "511921", + "name": "通江县" + }, { + "code": "511922", + "name": "南江县" + }, { + "code": "511923", + "name": "平昌县" + }] + }, { + "code": "5120", + "name": "资阳市", + "childs": [{ + "code": "512002", + "name": "雁江区" + }, { + "code": "512021", + "name": "安岳县" + }, { + "code": "512022", + "name": "乐至县" + }] + }, { + "code": "5132", + "name": "阿坝藏族羌族自治州", + "childs": [{ + "code": "513201", + "name": "马尔康市" + }, { + "code": "513221", + "name": "汶川县" + }, { + "code": "513222", + "name": "理县" + }, { + "code": "513223", + "name": "茂县" + }, { + "code": "513224", + "name": "松潘县" + }, { + "code": "513225", + "name": "九寨沟县" + }, { + "code": "513226", + "name": "金川县" + }, { + "code": "513227", + "name": "小金县" + }, { + "code": "513228", + "name": "黑水县" + }, { + "code": "513230", + "name": "壤塘县" + }, { + "code": "513231", + "name": "阿坝县" + }, { + "code": "513232", + "name": "若尔盖县" + }, { + "code": "513233", + "name": "红原县" + }] + }, { + "code": "5133", + "name": "甘孜藏族自治州", + "childs": [{ + "code": "513301", + "name": "康定市" + }, { + "code": "513322", + "name": "泸定县" + }, { + "code": "513323", + "name": "丹巴县" + }, { + "code": "513324", + "name": "九龙县" + }, { + "code": "513325", + "name": "雅江县" + }, { + "code": "513326", + "name": "道孚县" + }, { + "code": "513327", + "name": "炉霍县" + }, { + "code": "513328", + "name": "甘孜县" + }, { + "code": "513329", + "name": "新龙县" + }, { + "code": "513330", + "name": "德格县" + }, { + "code": "513331", + "name": "白玉县" + }, { + "code": "513332", + "name": "石渠县" + }, { + "code": "513333", + "name": "色达县" + }, { + "code": "513334", + "name": "理塘县" + }, { + "code": "513335", + "name": "巴塘县" + }, { + "code": "513336", + "name": "乡城县" + }, { + "code": "513337", + "name": "稻城县" + }, { + "code": "513338", + "name": "得荣县" + }] + }, { + "code": "5134", + "name": "凉山彝族自治州", + "childs": [{ + "code": "513401", + "name": "西昌市" + }, { + "code": "513422", + "name": "木里藏族自治县" + }, { + "code": "513423", + "name": "盐源县" + }, { + "code": "513424", + "name": "德昌县" + }, { + "code": "513425", + "name": "会理县" + }, { + "code": "513426", + "name": "会东县" + }, { + "code": "513427", + "name": "宁南县" + }, { + "code": "513428", + "name": "普格县" + }, { + "code": "513429", + "name": "布拖县" + }, { + "code": "513430", + "name": "金阳县" + }, { + "code": "513431", + "name": "昭觉县" + }, { + "code": "513432", + "name": "喜德县" + }, { + "code": "513433", + "name": "冕宁县" + }, { + "code": "513434", + "name": "越西县" + }, { + "code": "513435", + "name": "甘洛县" + }, { + "code": "513436", + "name": "美姑县" + }, { + "code": "513437", + "name": "雷波县" + }] + }] +}, { + "code": "52", + "name": "贵州省", + "childs": [{ + "code": "5201", + "name": "贵阳市", + "childs": [{ + "code": "520102", + "name": "南明区" + }, { + "code": "520103", + "name": "云岩区" + }, { + "code": "520111", + "name": "花溪区" + }, { + "code": "520112", + "name": "乌当区" + }, { + "code": "520113", + "name": "白云区" + }, { + "code": "520115", + "name": "观山湖区" + }, { + "code": "520121", + "name": "开阳县" + }, { + "code": "520122", + "name": "息烽县" + }, { + "code": "520123", + "name": "修文县" + }, { + "code": "520181", + "name": "清镇市" + }] + }, { + "code": "5202", + "name": "六盘水市", + "childs": [{ + "code": "520201", + "name": "钟山区" + }, { + "code": "520203", + "name": "六枝特区" + }, { + "code": "520221", + "name": "水城县" + }, { + "code": "520222", + "name": "盘县" + }] + }, { + "code": "5203", + "name": "遵义市", + "childs": [{ + "code": "520302", + "name": "红花岗区" + }, { + "code": "520303", + "name": "汇川区" + }, { + "code": "520304", + "name": "播州区" + }, { + "code": "520322", + "name": "桐梓县" + }, { + "code": "520323", + "name": "绥阳县" + }, { + "code": "520324", + "name": "正安县" + }, { + "code": "520325", + "name": "道真仡佬族苗族自治县" + }, { + "code": "520326", + "name": "务川仡佬族苗族自治县" + }, { + "code": "520327", + "name": "凤冈县" + }, { + "code": "520328", + "name": "湄潭县" + }, { + "code": "520329", + "name": "余庆县" + }, { + "code": "520330", + "name": "习水县" + }, { + "code": "520381", + "name": "赤水市" + }, { + "code": "520382", + "name": "仁怀市" + }] + }, { + "code": "5204", + "name": "安顺市", + "childs": [{ + "code": "520402", + "name": "西秀区" + }, { + "code": "520403", + "name": "平坝区" + }, { + "code": "520422", + "name": "普定县" + }, { + "code": "520423", + "name": "镇宁布依族苗族自治县" + }, { + "code": "520424", + "name": "关岭布依族苗族自治县" + }, { + "code": "520425", + "name": "紫云苗族布依族自治县" + }] + }, { + "code": "5205", + "name": "毕节市", + "childs": [{ + "code": "520502", + "name": "七星关区" + }, { + "code": "520521", + "name": "大方县" + }, { + "code": "520522", + "name": "黔西县" + }, { + "code": "520523", + "name": "金沙县" + }, { + "code": "520524", + "name": "织金县" + }, { + "code": "520525", + "name": "纳雍县" + }, { + "code": "520526", + "name": "威宁彝族回族苗族自治县" + }, { + "code": "520527", + "name": "赫章县" + }] + }, { + "code": "5206", + "name": "铜仁市", + "childs": [{ + "code": "520602", + "name": "碧江区" + }, { + "code": "520603", + "name": "万山区" + }, { + "code": "520621", + "name": "江口县" + }, { + "code": "520622", + "name": "玉屏侗族自治县" + }, { + "code": "520623", + "name": "石阡县" + }, { + "code": "520624", + "name": "思南县" + }, { + "code": "520625", + "name": "印江土家族苗族自治县" + }, { + "code": "520626", + "name": "德江县" + }, { + "code": "520627", + "name": "沿河土家族自治县" + }, { + "code": "520628", + "name": "松桃苗族自治县" + }] + }, { + "code": "5223", + "name": "黔西南布依族苗族自治州", + "childs": [{ + "code": "522301", + "name": "兴义市" + }, { + "code": "522322", + "name": "兴仁县" + }, { + "code": "522323", + "name": "普安县" + }, { + "code": "522324", + "name": "晴隆县" + }, { + "code": "522325", + "name": "贞丰县" + }, { + "code": "522326", + "name": "望谟县" + }, { + "code": "522327", + "name": "册亨县" + }, { + "code": "522328", + "name": "安龙县" + }] + }, { + "code": "5226", + "name": "黔东南苗族侗族自治州", + "childs": [{ + "code": "522601", + "name": "凯里市" + }, { + "code": "522622", + "name": "黄平县" + }, { + "code": "522623", + "name": "施秉县" + }, { + "code": "522624", + "name": "三穗县" + }, { + "code": "522625", + "name": "镇远县" + }, { + "code": "522626", + "name": "岑巩县" + }, { + "code": "522627", + "name": "天柱县" + }, { + "code": "522628", + "name": "锦屏县" + }, { + "code": "522629", + "name": "剑河县" + }, { + "code": "522630", + "name": "台江县" + }, { + "code": "522631", + "name": "黎平县" + }, { + "code": "522632", + "name": "榕江县" + }, { + "code": "522633", + "name": "从江县" + }, { + "code": "522634", + "name": "雷山县" + }, { + "code": "522635", + "name": "麻江县" + }, { + "code": "522636", + "name": "丹寨县" + }] + }, { + "code": "5227", + "name": "黔南布依族苗族自治州", + "childs": [{ + "code": "522701", + "name": "都匀市" + }, { + "code": "522702", + "name": "福泉市" + }, { + "code": "522722", + "name": "荔波县" + }, { + "code": "522723", + "name": "贵定县" + }, { + "code": "522725", + "name": "瓮安县" + }, { + "code": "522726", + "name": "独山县" + }, { + "code": "522727", + "name": "平塘县" + }, { + "code": "522728", + "name": "罗甸县" + }, { + "code": "522729", + "name": "长顺县" + }, { + "code": "522730", + "name": "龙里县" + }, { + "code": "522731", + "name": "惠水县" + }, { + "code": "522732", + "name": "三都水族自治县" + }] + }] +}, { + "code": "53", + "name": "云南省", + "childs": [{ + "code": "5301", + "name": "昆明市", + "childs": [{ + "code": "530102", + "name": "五华区" + }, { + "code": "530103", + "name": "盘龙区" + }, { + "code": "530111", + "name": "官渡区" + }, { + "code": "530112", + "name": "西山区" + }, { + "code": "530113", + "name": "东川区" + }, { + "code": "530114", + "name": "呈贡区" + }, { + "code": "530122", + "name": "晋宁县" + }, { + "code": "530124", + "name": "富民县" + }, { + "code": "530125", + "name": "宜良县" + }, { + "code": "530126", + "name": "石林彝族自治县" + }, { + "code": "530127", + "name": "嵩明县" + }, { + "code": "530128", + "name": "禄劝彝族苗族自治县" + }, { + "code": "530129", + "name": "寻甸回族彝族自治县" + }, { + "code": "530181", + "name": "安宁市" + }] + }, { + "code": "5303", + "name": "曲靖市", + "childs": [{ + "code": "530302", + "name": "麒麟区" + }, { + "code": "530303", + "name": "沾益区" + }, { + "code": "530321", + "name": "马龙县" + }, { + "code": "530322", + "name": "陆良县" + }, { + "code": "530323", + "name": "师宗县" + }, { + "code": "530324", + "name": "罗平县" + }, { + "code": "530325", + "name": "富源县" + }, { + "code": "530326", + "name": "会泽县" + }, { + "code": "530381", + "name": "宣威市" + }] + }, { + "code": "5304", + "name": "玉溪市", + "childs": [{ + "code": "530402", + "name": "红塔区" + }, { + "code": "530403", + "name": "江川区" + }, { + "code": "530422", + "name": "澄江县" + }, { + "code": "530423", + "name": "通海县" + }, { + "code": "530424", + "name": "华宁县" + }, { + "code": "530425", + "name": "易门县" + }, { + "code": "530426", + "name": "峨山彝族自治县" + }, { + "code": "530427", + "name": "新平彝族傣族自治县" + }, { + "code": "530428", + "name": "元江哈尼族彝族傣族自治县" + }] + }, { + "code": "5305", + "name": "保山市", + "childs": [{ + "code": "530502", + "name": "隆阳区" + }, { + "code": "530521", + "name": "施甸县" + }, { + "code": "530523", + "name": "龙陵县" + }, { + "code": "530524", + "name": "昌宁县" + }, { + "code": "530581", + "name": "腾冲市" + }] + }, { + "code": "5306", + "name": "昭通市", + "childs": [{ + "code": "530602", + "name": "昭阳区" + }, { + "code": "530621", + "name": "鲁甸县" + }, { + "code": "530622", + "name": "巧家县" + }, { + "code": "530623", + "name": "盐津县" + }, { + "code": "530624", + "name": "大关县" + }, { + "code": "530625", + "name": "永善县" + }, { + "code": "530626", + "name": "绥江县" + }, { + "code": "530627", + "name": "镇雄县" + }, { + "code": "530628", + "name": "彝良县" + }, { + "code": "530629", + "name": "威信县" + }, { + "code": "530630", + "name": "水富县" + }] + }, { + "code": "5307", + "name": "丽江市", + "childs": [{ + "code": "530702", + "name": "古城区" + }, { + "code": "530721", + "name": "玉龙纳西族自治县" + }, { + "code": "530722", + "name": "永胜县" + }, { + "code": "530723", + "name": "华坪县" + }, { + "code": "530724", + "name": "宁蒗彝族自治县" + }] + }, { + "code": "5308", + "name": "普洱市", + "childs": [{ + "code": "530802", + "name": "思茅区" + }, { + "code": "530821", + "name": "宁洱哈尼族彝族自治县" + }, { + "code": "530822", + "name": "墨江哈尼族自治县" + }, { + "code": "530823", + "name": "景东彝族自治县" + }, { + "code": "530824", + "name": "景谷傣族彝族自治县" + }, { + "code": "530825", + "name": "镇沅彝族哈尼族拉祜族自治县" + }, { + "code": "530826", + "name": "江城哈尼族彝族自治县" + }, { + "code": "530827", + "name": "孟连傣族拉祜族佤族自治县" + }, { + "code": "530828", + "name": "澜沧拉祜族自治县" + }, { + "code": "530829", + "name": "西盟佤族自治县" + }] + }, { + "code": "5309", + "name": "临沧市", + "childs": [{ + "code": "530902", + "name": "临翔区" + }, { + "code": "530921", + "name": "凤庆县" + }, { + "code": "530922", + "name": "云县" + }, { + "code": "530923", + "name": "永德县" + }, { + "code": "530924", + "name": "镇康县" + }, { + "code": "530925", + "name": "双江拉祜族佤族布朗族傣族自治县" + }, { + "code": "530926", + "name": "耿马傣族佤族自治县" + }, { + "code": "530927", + "name": "沧源佤族自治县" + }] + }, { + "code": "5323", + "name": "楚雄彝族自治州", + "childs": [{ + "code": "532301", + "name": "楚雄市" + }, { + "code": "532322", + "name": "双柏县" + }, { + "code": "532323", + "name": "牟定县" + }, { + "code": "532324", + "name": "南华县" + }, { + "code": "532325", + "name": "姚安县" + }, { + "code": "532326", + "name": "大姚县" + }, { + "code": "532327", + "name": "永仁县" + }, { + "code": "532328", + "name": "元谋县" + }, { + "code": "532329", + "name": "武定县" + }, { + "code": "532331", + "name": "禄丰县" + }] + }, { + "code": "5325", + "name": "红河哈尼族彝族自治州", + "childs": [{ + "code": "532501", + "name": "个旧市" + }, { + "code": "532502", + "name": "开远市" + }, { + "code": "532503", + "name": "蒙自市" + }, { + "code": "532504", + "name": "弥勒市" + }, { + "code": "532523", + "name": "屏边苗族自治县" + }, { + "code": "532524", + "name": "建水县" + }, { + "code": "532525", + "name": "石屏县" + }, { + "code": "532527", + "name": "泸西县" + }, { + "code": "532528", + "name": "元阳县" + }, { + "code": "532529", + "name": "红河县" + }, { + "code": "532530", + "name": "金平苗族瑶族傣族自治县" + }, { + "code": "532531", + "name": "绿春县" + }, { + "code": "532532", + "name": "河口瑶族自治县" + }] + }, { + "code": "5326", + "name": "文山壮族苗族自治州", + "childs": [{ + "code": "532601", + "name": "文山市" + }, { + "code": "532622", + "name": "砚山县" + }, { + "code": "532623", + "name": "西畴县" + }, { + "code": "532624", + "name": "麻栗坡县" + }, { + "code": "532625", + "name": "马关县" + }, { + "code": "532626", + "name": "丘北县" + }, { + "code": "532627", + "name": "广南县" + }, { + "code": "532628", + "name": "富宁县" + }] + }, { + "code": "5328", + "name": "西双版纳傣族自治州", + "childs": [{ + "code": "532801", + "name": "景洪市" + }, { + "code": "532822", + "name": "勐海县" + }, { + "code": "532823", + "name": "勐腊县" + }] + }, { + "code": "5329", + "name": "大理白族自治州", + "childs": [{ + "code": "532901", + "name": "大理市" + }, { + "code": "532922", + "name": "漾濞彝族自治县" + }, { + "code": "532923", + "name": "祥云县" + }, { + "code": "532924", + "name": "宾川县" + }, { + "code": "532925", + "name": "弥渡县" + }, { + "code": "532926", + "name": "南涧彝族自治县" + }, { + "code": "532927", + "name": "巍山彝族回族自治县" + }, { + "code": "532928", + "name": "永平县" + }, { + "code": "532929", + "name": "云龙县" + }, { + "code": "532930", + "name": "洱源县" + }, { + "code": "532931", + "name": "剑川县" + }, { + "code": "532932", + "name": "鹤庆县" + }] + }, { + "code": "5331", + "name": "德宏傣族景颇族自治州", + "childs": [{ + "code": "533102", + "name": "瑞丽市" + }, { + "code": "533103", + "name": "芒市" + }, { + "code": "533122", + "name": "梁河县" + }, { + "code": "533123", + "name": "盈江县" + }, { + "code": "533124", + "name": "陇川县" + }] + }, { + "code": "5333", + "name": "怒江傈僳族自治州", + "childs": [{ + "code": "533301", + "name": "泸水市" + }, { + "code": "533323", + "name": "福贡县" + }, { + "code": "533324", + "name": "贡山独龙族怒族自治县" + }, { + "code": "533325", + "name": "兰坪白族普米族自治县" + }] + }, { + "code": "5334", + "name": "迪庆藏族自治州", + "childs": [{ + "code": "533401", + "name": "香格里拉市" + }, { + "code": "533422", + "name": "德钦县" + }, { + "code": "533423", + "name": "维西傈僳族自治县" + }] + }] +}, { + "code": "54", + "name": "西藏自治区", + "childs": [{ + "code": "5401", + "name": "拉萨市", + "childs": [{ + "code": "540102", + "name": "城关区" + }, { + "code": "540103", + "name": "堆龙德庆区" + }, { + "code": "540121", + "name": "林周县" + }, { + "code": "540122", + "name": "当雄县" + }, { + "code": "540123", + "name": "尼木县" + }, { + "code": "540124", + "name": "曲水县" + }, { + "code": "540126", + "name": "达孜县" + }, { + "code": "540127", + "name": "墨竹工卡县" + }] + }, { + "code": "5402", + "name": "日喀则市", + "childs": [{ + "code": "540202", + "name": "桑珠孜区" + }, { + "code": "540221", + "name": "南木林县" + }, { + "code": "540222", + "name": "江孜县" + }, { + "code": "540223", + "name": "定日县" + }, { + "code": "540224", + "name": "萨迦县" + }, { + "code": "540225", + "name": "拉孜县" + }, { + "code": "540226", + "name": "昂仁县" + }, { + "code": "540227", + "name": "谢通门县" + }, { + "code": "540228", + "name": "白朗县" + }, { + "code": "540229", + "name": "仁布县" + }, { + "code": "540230", + "name": "康马县" + }, { + "code": "540231", + "name": "定结县" + }, { + "code": "540232", + "name": "仲巴县" + }, { + "code": "540233", + "name": "亚东县" + }, { + "code": "540234", + "name": "吉隆县" + }, { + "code": "540235", + "name": "聂拉木县" + }, { + "code": "540236", + "name": "萨嘎县" + }, { + "code": "540237", + "name": "岗巴县" + }] + }, { + "code": "5403", + "name": "昌都市", + "childs": [{ + "code": "540302", + "name": "卡若区" + }, { + "code": "540321", + "name": "江达县" + }, { + "code": "540322", + "name": "贡觉县" + }, { + "code": "540323", + "name": "类乌齐县" + }, { + "code": "540324", + "name": "丁青县" + }, { + "code": "540325", + "name": "察雅县" + }, { + "code": "540326", + "name": "八宿县" + }, { + "code": "540327", + "name": "左贡县" + }, { + "code": "540328", + "name": "芒康县" + }, { + "code": "540329", + "name": "洛隆县" + }, { + "code": "540330", + "name": "边坝县" + }] + }, { + "code": "5404", + "name": "林芝市", + "childs": [{ + "code": "540402", + "name": "巴宜区" + }, { + "code": "540421", + "name": "工布江达县" + }, { + "code": "540422", + "name": "米林县" + }, { + "code": "540423", + "name": "墨脱县" + }, { + "code": "540424", + "name": "波密县" + }, { + "code": "540425", + "name": "察隅县" + }, { + "code": "540426", + "name": "朗县" + }] + }, { + "code": "5405", + "name": "山南市", + "childs": [{ + "code": "540502", + "name": "乃东区" + }, { + "code": "540521", + "name": "扎囊县" + }, { + "code": "540522", + "name": "贡嘎县" + }, { + "code": "540523", + "name": "桑日县" + }, { + "code": "540524", + "name": "琼结县" + }, { + "code": "540525", + "name": "曲松县" + }, { + "code": "540526", + "name": "措美县" + }, { + "code": "540527", + "name": "洛扎县" + }, { + "code": "540528", + "name": "加查县" + }, { + "code": "540529", + "name": "隆子县" + }, { + "code": "540530", + "name": "错那县" + }, { + "code": "540531", + "name": "浪卡子县" + }] + }, { + "code": "5424", + "name": "那曲地区", + "childs": [{ + "code": "542421", + "name": "那曲县" + }, { + "code": "542422", + "name": "嘉黎县" + }, { + "code": "542423", + "name": "比如县" + }, { + "code": "542424", + "name": "聂荣县" + }, { + "code": "542425", + "name": "安多县" + }, { + "code": "542426", + "name": "申扎县" + }, { + "code": "542427", + "name": "索县" + }, { + "code": "542428", + "name": "班戈县" + }, { + "code": "542429", + "name": "巴青县" + }, { + "code": "542430", + "name": "尼玛县" + }, { + "code": "542431", + "name": "双湖县" + }] + }, { + "code": "5425", + "name": "阿里地区", + "childs": [{ + "code": "542521", + "name": "普兰县" + }, { + "code": "542522", + "name": "札达县" + }, { + "code": "542523", + "name": "噶尔县" + }, { + "code": "542524", + "name": "日土县" + }, { + "code": "542525", + "name": "革吉县" + }, { + "code": "542526", + "name": "改则县" + }, { + "code": "542527", + "name": "措勤县" + }] + }] +}, { + "code": "61", + "name": "陕西省", + "childs": [{ + "code": "6101", + "name": "西安市", + "childs": [{ + "code": "610102", + "name": "新城区" + }, { + "code": "610103", + "name": "碑林区" + }, { + "code": "610104", + "name": "莲湖区" + }, { + "code": "610111", + "name": "灞桥区" + }, { + "code": "610112", + "name": "未央区" + }, { + "code": "610113", + "name": "雁塔区" + }, { + "code": "610114", + "name": "阎良区" + }, { + "code": "610115", + "name": "临潼区" + }, { + "code": "610116", + "name": "长安区" + }, { + "code": "610117", + "name": "高陵区" + }, { + "code": "610122", + "name": "蓝田县" + }, { + "code": "610124", + "name": "周至县" + }, { + "code": "610125", + "name": "户县" + }] + }, { + "code": "6102", + "name": "铜川市", + "childs": [{ + "code": "610202", + "name": "王益区" + }, { + "code": "610203", + "name": "印台区" + }, { + "code": "610204", + "name": "耀州区" + }, { + "code": "610222", + "name": "宜君县" + }] + }, { + "code": "6103", + "name": "宝鸡市", + "childs": [{ + "code": "610302", + "name": "渭滨区" + }, { + "code": "610303", + "name": "金台区" + }, { + "code": "610304", + "name": "陈仓区" + }, { + "code": "610322", + "name": "凤翔县" + }, { + "code": "610323", + "name": "岐山县" + }, { + "code": "610324", + "name": "扶风县" + }, { + "code": "610326", + "name": "眉县" + }, { + "code": "610327", + "name": "陇县" + }, { + "code": "610328", + "name": "千阳县" + }, { + "code": "610329", + "name": "麟游县" + }, { + "code": "610330", + "name": "凤县" + }, { + "code": "610331", + "name": "太白县" + }] + }, { + "code": "6104", + "name": "咸阳市", + "childs": [{ + "code": "610402", + "name": "秦都区" + }, { + "code": "610403", + "name": "杨陵区" + }, { + "code": "610404", + "name": "渭城区" + }, { + "code": "610422", + "name": "三原县" + }, { + "code": "610423", + "name": "泾阳县" + }, { + "code": "610424", + "name": "乾县" + }, { + "code": "610425", + "name": "礼泉县" + }, { + "code": "610426", + "name": "永寿县" + }, { + "code": "610427", + "name": "彬县" + }, { + "code": "610428", + "name": "长武县" + }, { + "code": "610429", + "name": "旬邑县" + }, { + "code": "610430", + "name": "淳化县" + }, { + "code": "610431", + "name": "武功县" + }, { + "code": "610481", + "name": "兴平市" + }] + }, { + "code": "6105", + "name": "渭南市", + "childs": [{ + "code": "610502", + "name": "临渭区" + }, { + "code": "610503", + "name": "华州区" + }, { + "code": "610522", + "name": "潼关县" + }, { + "code": "610523", + "name": "大荔县" + }, { + "code": "610524", + "name": "合阳县" + }, { + "code": "610525", + "name": "澄城县" + }, { + "code": "610526", + "name": "蒲城县" + }, { + "code": "610527", + "name": "白水县" + }, { + "code": "610528", + "name": "富平县" + }, { + "code": "610581", + "name": "韩城市" + }, { + "code": "610582", + "name": "华阴市" + }] + }, { + "code": "6106", + "name": "延安市", + "childs": [{ + "code": "610602", + "name": "宝塔区" + }, { + "code": "610603", + "name": "安塞区" + }, { + "code": "610621", + "name": "延长县" + }, { + "code": "610622", + "name": "延川县" + }, { + "code": "610623", + "name": "子长县" + }, { + "code": "610625", + "name": "志丹县" + }, { + "code": "610626", + "name": "吴起县" + }, { + "code": "610627", + "name": "甘泉县" + }, { + "code": "610628", + "name": "富县" + }, { + "code": "610629", + "name": "洛川县" + }, { + "code": "610630", + "name": "宜川县" + }, { + "code": "610631", + "name": "黄龙县" + }, { + "code": "610632", + "name": "黄陵县" + }] + }, { + "code": "6107", + "name": "汉中市", + "childs": [{ + "code": "610702", + "name": "汉台区" + }, { + "code": "610721", + "name": "南郑县" + }, { + "code": "610722", + "name": "城固县" + }, { + "code": "610723", + "name": "洋县" + }, { + "code": "610724", + "name": "西乡县" + }, { + "code": "610725", + "name": "勉县" + }, { + "code": "610726", + "name": "宁强县" + }, { + "code": "610727", + "name": "略阳县" + }, { + "code": "610728", + "name": "镇巴县" + }, { + "code": "610729", + "name": "留坝县" + }, { + "code": "610730", + "name": "佛坪县" + }] + }, { + "code": "6108", + "name": "榆林市", + "childs": [{ + "code": "610802", + "name": "榆阳区" + }, { + "code": "610803", + "name": "横山区" + }, { + "code": "610821", + "name": "神木县" + }, { + "code": "610822", + "name": "府谷县" + }, { + "code": "610824", + "name": "靖边县" + }, { + "code": "610825", + "name": "定边县" + }, { + "code": "610826", + "name": "绥德县" + }, { + "code": "610827", + "name": "米脂县" + }, { + "code": "610828", + "name": "佳县" + }, { + "code": "610829", + "name": "吴堡县" + }, { + "code": "610830", + "name": "清涧县" + }, { + "code": "610831", + "name": "子洲县" + }] + }, { + "code": "6109", + "name": "安康市", + "childs": [{ + "code": "610902", + "name": "汉滨区" + }, { + "code": "610921", + "name": "汉阴县" + }, { + "code": "610922", + "name": "石泉县" + }, { + "code": "610923", + "name": "宁陕县" + }, { + "code": "610924", + "name": "紫阳县" + }, { + "code": "610925", + "name": "岚皋县" + }, { + "code": "610926", + "name": "平利县" + }, { + "code": "610927", + "name": "镇坪县" + }, { + "code": "610928", + "name": "旬阳县" + }, { + "code": "610929", + "name": "白河县" + }] + }, { + "code": "6110", + "name": "商洛市", + "childs": [{ + "code": "611002", + "name": "商州区" + }, { + "code": "611021", + "name": "洛南县" + }, { + "code": "611022", + "name": "丹凤县" + }, { + "code": "611023", + "name": "商南县" + }, { + "code": "611024", + "name": "山阳县" + }, { + "code": "611025", + "name": "镇安县" + }, { + "code": "611026", + "name": "柞水县" + }] + }] +}, { + "code": "62", + "name": "甘肃省", + "childs": [{ + "code": "6201", + "name": "兰州市", + "childs": [{ + "code": "620102", + "name": "城关区" + }, { + "code": "620103", + "name": "七里河区" + }, { + "code": "620104", + "name": "西固区" + }, { + "code": "620105", + "name": "安宁区" + }, { + "code": "620111", + "name": "红古区" + }, { + "code": "620121", + "name": "永登县" + }, { + "code": "620122", + "name": "皋兰县" + }, { + "code": "620123", + "name": "榆中县" + }] + }, { + "code": "620201", + "name": "嘉峪关市", + "childs": [{ + "code": "620201100", + "name": "新城镇" + }, { + "code": "620201101", + "name": "峪泉镇" + }, { + "code": "620201102", + "name": "文殊镇" + }, { + "code": "620201401", + "name": "雄关区" + }, { + "code": "620201402", + "name": "镜铁区" + }, { + "code": "620201403", + "name": "长城区" + }] + }, { + "code": "6203", + "name": "金昌市", + "childs": [{ + "code": "620302", + "name": "金川区" + }, { + "code": "620321", + "name": "永昌县" + }] + }, { + "code": "6204", + "name": "白银市", + "childs": [{ + "code": "620402", + "name": "白银区" + }, { + "code": "620403", + "name": "平川区" + }, { + "code": "620421", + "name": "靖远县" + }, { + "code": "620422", + "name": "会宁县" + }, { + "code": "620423", + "name": "景泰县" + }] + }, { + "code": "6205", + "name": "天水市", + "childs": [{ + "code": "620502", + "name": "秦州区" + }, { + "code": "620503", + "name": "麦积区" + }, { + "code": "620521", + "name": "清水县" + }, { + "code": "620522", + "name": "秦安县" + }, { + "code": "620523", + "name": "甘谷县" + }, { + "code": "620524", + "name": "武山县" + }, { + "code": "620525", + "name": "张家川回族自治县" + }] + }, { + "code": "6206", + "name": "武威市", + "childs": [{ + "code": "620602", + "name": "凉州区" + }, { + "code": "620621", + "name": "民勤县" + }, { + "code": "620622", + "name": "古浪县" + }, { + "code": "620623", + "name": "天祝藏族自治县" + }] + }, { + "code": "6207", + "name": "张掖市", + "childs": [{ + "code": "620702", + "name": "甘州区" + }, { + "code": "620721", + "name": "肃南裕固族自治县" + }, { + "code": "620722", + "name": "民乐县" + }, { + "code": "620723", + "name": "临泽县" + }, { + "code": "620724", + "name": "高台县" + }, { + "code": "620725", + "name": "山丹县" + }] + }, { + "code": "6208", + "name": "平凉市", + "childs": [{ + "code": "620802", + "name": "崆峒区" + }, { + "code": "620821", + "name": "泾川县" + }, { + "code": "620822", + "name": "灵台县" + }, { + "code": "620823", + "name": "崇信县" + }, { + "code": "620824", + "name": "华亭县" + }, { + "code": "620825", + "name": "庄浪县" + }, { + "code": "620826", + "name": "静宁县" + }] + }, { + "code": "6209", + "name": "酒泉市", + "childs": [{ + "code": "620902", + "name": "肃州区" + }, { + "code": "620921", + "name": "金塔县" + }, { + "code": "620922", + "name": "瓜州县" + }, { + "code": "620923", + "name": "肃北蒙古族自治县" + }, { + "code": "620924", + "name": "阿克塞哈萨克族自治县" + }, { + "code": "620981", + "name": "玉门市" + }, { + "code": "620982", + "name": "敦煌市" + }] + }, { + "code": "6210", + "name": "庆阳市", + "childs": [{ + "code": "621002", + "name": "西峰区" + }, { + "code": "621021", + "name": "庆城县" + }, { + "code": "621022", + "name": "环县" + }, { + "code": "621023", + "name": "华池县" + }, { + "code": "621024", + "name": "合水县" + }, { + "code": "621025", + "name": "正宁县" + }, { + "code": "621026", + "name": "宁县" + }, { + "code": "621027", + "name": "镇原县" + }] + }, { + "code": "6211", + "name": "定西市", + "childs": [{ + "code": "621102", + "name": "安定区" + }, { + "code": "621121", + "name": "通渭县" + }, { + "code": "621122", + "name": "陇西县" + }, { + "code": "621123", + "name": "渭源县" + }, { + "code": "621124", + "name": "临洮县" + }, { + "code": "621125", + "name": "漳县" + }, { + "code": "621126", + "name": "岷县" + }] + }, { + "code": "6212", + "name": "陇南市", + "childs": [{ + "code": "621202", + "name": "武都区" + }, { + "code": "621221", + "name": "成县" + }, { + "code": "621222", + "name": "文县" + }, { + "code": "621223", + "name": "宕昌县" + }, { + "code": "621224", + "name": "康县" + }, { + "code": "621225", + "name": "西和县" + }, { + "code": "621226", + "name": "礼县" + }, { + "code": "621227", + "name": "徽县" + }, { + "code": "621228", + "name": "两当县" + }] + }, { + "code": "6229", + "name": "临夏回族自治州", + "childs": [{ + "code": "622901", + "name": "临夏市" + }, { + "code": "622921", + "name": "临夏县" + }, { + "code": "622922", + "name": "康乐县" + }, { + "code": "622923", + "name": "永靖县" + }, { + "code": "622924", + "name": "广河县" + }, { + "code": "622925", + "name": "和政县" + }, { + "code": "622926", + "name": "东乡族自治县" + }, { + "code": "622927", + "name": "积石山保安族东乡族撒拉族自治县" + }] + }, { + "code": "6230", + "name": "甘南藏族自治州", + "childs": [{ + "code": "623001", + "name": "合作市" + }, { + "code": "623021", + "name": "临潭县" + }, { + "code": "623022", + "name": "卓尼县" + }, { + "code": "623023", + "name": "舟曲县" + }, { + "code": "623024", + "name": "迭部县" + }, { + "code": "623025", + "name": "玛曲县" + }, { + "code": "623026", + "name": "碌曲县" + }, { + "code": "623027", + "name": "夏河县" + }] + }] +}, { + "code": "63", + "name": "青海省", + "childs": [{ + "code": "6301", + "name": "西宁市", + "childs": [{ + "code": "630102", + "name": "城东区" + }, { + "code": "630103", + "name": "城中区" + }, { + "code": "630104", + "name": "城西区" + }, { + "code": "630105", + "name": "城北区" + }, { + "code": "630121", + "name": "大通回族土族自治县" + }, { + "code": "630122", + "name": "湟中县" + }, { + "code": "630123", + "name": "湟源县" + }] + }, { + "code": "6302", + "name": "海东市", + "childs": [{ + "code": "630202", + "name": "乐都区" + }, { + "code": "630203", + "name": "平安区" + }, { + "code": "630222", + "name": "民和回族土族自治县" + }, { + "code": "630223", + "name": "互助土族自治县" + }, { + "code": "630224", + "name": "化隆回族自治县" + }, { + "code": "630225", + "name": "循化撒拉族自治县" + }] + }, { + "code": "6322", + "name": "海北藏族自治州", + "childs": [{ + "code": "632221", + "name": "门源回族自治县" + }, { + "code": "632222", + "name": "祁连县" + }, { + "code": "632223", + "name": "海晏县" + }, { + "code": "632224", + "name": "刚察县" + }] + }, { + "code": "6323", + "name": "黄南藏族自治州", + "childs": [{ + "code": "632321", + "name": "同仁县" + }, { + "code": "632322", + "name": "尖扎县" + }, { + "code": "632323", + "name": "泽库县" + }, { + "code": "632324", + "name": "河南蒙古族自治县" + }] + }, { + "code": "6325", + "name": "海南藏族自治州", + "childs": [{ + "code": "632521", + "name": "共和县" + }, { + "code": "632522", + "name": "同德县" + }, { + "code": "632523", + "name": "贵德县" + }, { + "code": "632524", + "name": "兴海县" + }, { + "code": "632525", + "name": "贵南县" + }] + }, { + "code": "6326", + "name": "果洛藏族自治州", + "childs": [{ + "code": "632621", + "name": "玛沁县" + }, { + "code": "632622", + "name": "班玛县" + }, { + "code": "632623", + "name": "甘德县" + }, { + "code": "632624", + "name": "达日县" + }, { + "code": "632625", + "name": "久治县" + }, { + "code": "632626", + "name": "玛多县" + }] + }, { + "code": "6327", + "name": "玉树藏族自治州", + "childs": [{ + "code": "632701", + "name": "玉树市" + }, { + "code": "632722", + "name": "杂多县" + }, { + "code": "632723", + "name": "称多县" + }, { + "code": "632724", + "name": "治多县" + }, { + "code": "632725", + "name": "囊谦县" + }, { + "code": "632726", + "name": "曲麻莱县" + }] + }, { + "code": "6328", + "name": "海西蒙古族藏族自治州", + "childs": [{ + "code": "632801", + "name": "格尔木市" + }, { + "code": "632802", + "name": "德令哈市" + }, { + "code": "632821", + "name": "乌兰县" + }, { + "code": "632822", + "name": "都兰县" + }, { + "code": "632823", + "name": "天峻县" + }] + }] +}, { + "code": "64", + "name": "宁夏回族自治区", + "childs": [{ + "code": "6401", + "name": "银川市", + "childs": [{ + "code": "640104", + "name": "兴庆区" + }, { + "code": "640105", + "name": "西夏区" + }, { + "code": "640106", + "name": "金凤区" + }, { + "code": "640121", + "name": "永宁县" + }, { + "code": "640122", + "name": "贺兰县" + }, { + "code": "640181", + "name": "灵武市" + }] + }, { + "code": "6402", + "name": "石嘴山市", + "childs": [{ + "code": "640202", + "name": "大武口区" + }, { + "code": "640205", + "name": "惠农区" + }, { + "code": "640221", + "name": "平罗县" + }] + }, { + "code": "6403", + "name": "吴忠市", + "childs": [{ + "code": "640302", + "name": "利通区" + }, { + "code": "640303", + "name": "红寺堡区" + }, { + "code": "640323", + "name": "盐池县" + }, { + "code": "640324", + "name": "同心县" + }, { + "code": "640381", + "name": "青铜峡市" + }] + }, { + "code": "6404", + "name": "固原市", + "childs": [{ + "code": "640402", + "name": "原州区" + }, { + "code": "640422", + "name": "西吉县" + }, { + "code": "640423", + "name": "隆德县" + }, { + "code": "640424", + "name": "泾源县" + }, { + "code": "640425", + "name": "彭阳县" + }] + }, { + "code": "6405", + "name": "中卫市", + "childs": [{ + "code": "640502", + "name": "沙坡头区" + }, { + "code": "640521", + "name": "中宁县" + }, { + "code": "640522", + "name": "海原县" + }] + }] +}, { + "code": "65", + "name": "新疆维吾尔自治区", + "childs": [{ + "code": "6501", + "name": "乌鲁木齐市", + "childs": [{ + "code": "650102", + "name": "天山区" + }, { + "code": "650103", + "name": "沙依巴克区" + }, { + "code": "650104", + "name": "新市区" + }, { + "code": "650105", + "name": "水磨沟区" + }, { + "code": "650106", + "name": "头屯河区" + }, { + "code": "650107", + "name": "达坂城区" + }, { + "code": "650109", + "name": "米东区" + }, { + "code": "650121", + "name": "乌鲁木齐县" + }] + }, { + "code": "6502", + "name": "克拉玛依市", + "childs": [{ + "code": "650202", + "name": "独山子区" + }, { + "code": "650203", + "name": "克拉玛依区" + }, { + "code": "650204", + "name": "白碱滩区" + }, { + "code": "650205", + "name": "乌尔禾区" + }] + }, { + "code": "6504", + "name": "吐鲁番市", + "childs": [{ + "code": "650402", + "name": "高昌区" + }, { + "code": "650421", + "name": "鄯善县" + }, { + "code": "650422", + "name": "托克逊县" + }] + }, { + "code": "6505", + "name": "哈密市", + "childs": [{ + "code": "650502", + "name": "伊州区" + }, { + "code": "650521", + "name": "巴里坤哈萨克自治县" + }, { + "code": "650522", + "name": "伊吾县" + }] + }, { + "code": "6523", + "name": "昌吉回族自治州", + "childs": [{ + "code": "652301", + "name": "昌吉市" + }, { + "code": "652302", + "name": "阜康市" + }, { + "code": "652323", + "name": "呼图壁县" + }, { + "code": "652324", + "name": "玛纳斯县" + }, { + "code": "652325", + "name": "奇台县" + }, { + "code": "652327", + "name": "吉木萨尔县" + }, { + "code": "652328", + "name": "木垒哈萨克自治县" + }] + }, { + "code": "6527", + "name": "博尔塔拉蒙古自治州", + "childs": [{ + "code": "652701", + "name": "博乐市" + }, { + "code": "652702", + "name": "阿拉山口市" + }, { + "code": "652722", + "name": "精河县" + }, { + "code": "652723", + "name": "温泉县" + }] + }, { + "code": "6528", + "name": "巴音郭楞蒙古自治州", + "childs": [{ + "code": "652801", + "name": "库尔勒市" + }, { + "code": "652822", + "name": "轮台县" + }, { + "code": "652823", + "name": "尉犁县" + }, { + "code": "652824", + "name": "若羌县" + }, { + "code": "652825", + "name": "且末县" + }, { + "code": "652826", + "name": "焉耆回族自治县" + }, { + "code": "652827", + "name": "和静县" + }, { + "code": "652828", + "name": "和硕县" + }, { + "code": "652829", + "name": "博湖县" + }] + }, { + "code": "6529", + "name": "阿克苏地区", + "childs": [{ + "code": "652901", + "name": "阿克苏市" + }, { + "code": "652922", + "name": "温宿县" + }, { + "code": "652923", + "name": "库车县" + }, { + "code": "652924", + "name": "沙雅县" + }, { + "code": "652925", + "name": "新和县" + }, { + "code": "652926", + "name": "拜城县" + }, { + "code": "652927", + "name": "乌什县" + }, { + "code": "652928", + "name": "阿瓦提县" + }, { + "code": "652929", + "name": "柯坪县" + }] + }, { + "code": "6530", + "name": "克孜勒苏柯尔克孜自治州", + "childs": [{ + "code": "653001", + "name": "阿图什市" + }, { + "code": "653022", + "name": "阿克陶县" + }, { + "code": "653023", + "name": "阿合奇县" + }, { + "code": "653024", + "name": "乌恰县" + }] + }, { + "code": "6531", + "name": "喀什地区", + "childs": [{ + "code": "653101", + "name": "喀什市" + }, { + "code": "653121", + "name": "疏附县" + }, { + "code": "653122", + "name": "疏勒县" + }, { + "code": "653123", + "name": "英吉沙县" + }, { + "code": "653124", + "name": "泽普县" + }, { + "code": "653125", + "name": "莎车县" + }, { + "code": "653126", + "name": "叶城县" + }, { + "code": "653127", + "name": "麦盖提县" + }, { + "code": "653128", + "name": "岳普湖县" + }, { + "code": "653129", + "name": "伽师县" + }, { + "code": "653130", + "name": "巴楚县" + }, { + "code": "653131", + "name": "塔什库尔干塔吉克自治县" + }] + }, { + "code": "6532", + "name": "和田地区", + "childs": [{ + "code": "653201", + "name": "和田市" + }, { + "code": "653221", + "name": "和田县" + }, { + "code": "653222", + "name": "墨玉县" + }, { + "code": "653223", + "name": "皮山县" + }, { + "code": "653224", + "name": "洛浦县" + }, { + "code": "653225", + "name": "策勒县" + }, { + "code": "653226", + "name": "于田县" + }, { + "code": "653227", + "name": "民丰县" + }] + }, { + "code": "6540", + "name": "伊犁哈萨克自治州", + "childs": [{ + "code": "654002", + "name": "伊宁市" + }, { + "code": "654003", + "name": "奎屯市" + }, { + "code": "654004", + "name": "霍尔果斯市" + }, { + "code": "654021", + "name": "伊宁县" + }, { + "code": "654022", + "name": "察布查尔锡伯自治县" + }, { + "code": "654023", + "name": "霍城县" + }, { + "code": "654024", + "name": "巩留县" + }, { + "code": "654025", + "name": "新源县" + }, { + "code": "654026", + "name": "昭苏县" + }, { + "code": "654027", + "name": "特克斯县" + }, { + "code": "654028", + "name": "尼勒克县" + }] + }, { + "code": "6542", + "name": "塔城地区", + "childs": [{ + "code": "654201", + "name": "塔城市" + }, { + "code": "654202", + "name": "乌苏市" + }, { + "code": "654221", + "name": "额敏县" + }, { + "code": "654223", + "name": "沙湾县" + }, { + "code": "654224", + "name": "托里县" + }, { + "code": "654225", + "name": "裕民县" + }, { + "code": "654226", + "name": "和布克赛尔蒙古自治县" + }] + }, { + "code": "6543", + "name": "阿勒泰地区", + "childs": [{ + "code": "654301", + "name": "阿勒泰市" + }, { + "code": "654321", + "name": "布尔津县" + }, { + "code": "654322", + "name": "富蕴县" + }, { + "code": "654323", + "name": "福海县" + }, { + "code": "654324", + "name": "哈巴河县" + }, { + "code": "654325", + "name": "青河县" + }, { + "code": "654326", + "name": "吉木乃县" + }] + }, { + "code": "6590", + "name": "自治区直辖县级行政区划", + "childs": [{ + "code": "659001", + "name": "石河子市" + }, { + "code": "659002", + "name": "阿拉尔市" + }, { + "code": "659003", + "name": "图木舒克市" + }, { + "code": "659004", + "name": "五家渠市" + }, { + "code": "659006", + "name": "铁门关市" + }] + }] +}, { + "code": "71", + "name": "台湾省", + "childs": [] +}, { + "code": "81", + "name": "香港特别行政区", + "childs": [] +}, { + "code": "82", + "name": "澳门特别行政区", + "childs": [] +}] diff --git a/components/sl-filter/filter-view.vue b/components/sl-filter/filter-view.vue new file mode 100644 index 0000000..6c1f3a1 --- /dev/null +++ b/components/sl-filter/filter-view.vue @@ -0,0 +1,459 @@ + + + + + diff --git a/components/sl-filter/iconfont/iconfont.css b/components/sl-filter/iconfont/iconfont.css new file mode 100644 index 0000000..a1b4344 --- /dev/null +++ b/components/sl-filter/iconfont/iconfont.css @@ -0,0 +1,20 @@ +@font-face { + font-family: 'sl-font'; + src: url('data:font/truetype;charset=utf-8;base64,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') format('truetype'); +} + +.sl-font { + font-family: "sl-font" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.sl-down:before { + content: "\e61a"; +} + +.sl-up:before { + content: "\e61c"; +} diff --git a/components/sl-filter/popup-layer.vue b/components/sl-filter/popup-layer.vue new file mode 100644 index 0000000..63c5f1b --- /dev/null +++ b/components/sl-filter/popup-layer.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/components/sl-filter/sl-filter.vue b/components/sl-filter/sl-filter.vue new file mode 100644 index 0000000..db13738 --- /dev/null +++ b/components/sl-filter/sl-filter.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/components/tabRefresh/tabRefresh.vue b/components/tabRefresh/tabRefresh.vue new file mode 100644 index 0000000..8117c27 --- /dev/null +++ b/components/tabRefresh/tabRefresh.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/components/tabTop/tabTop.vue b/components/tabTop/tabTop.vue new file mode 100644 index 0000000..909efc3 --- /dev/null +++ b/components/tabTop/tabTop.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/components/uni-datetime-picker/keypress.js b/components/uni-datetime-picker/keypress.js new file mode 100644 index 0000000..9601aba --- /dev/null +++ b/components/uni-datetime-picker/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif \ No newline at end of file diff --git a/components/uni-datetime-picker/uni-datetime-picker.vue b/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..8930527 --- /dev/null +++ b/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,804 @@ + + + + + diff --git a/components/uni-popup-dialog/uni-popup-dialog.vue b/components/uni-popup-dialog/uni-popup-dialog.vue new file mode 100644 index 0000000..018c46c --- /dev/null +++ b/components/uni-popup-dialog/uni-popup-dialog.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/components/uni-popup/message.js b/components/uni-popup/message.js new file mode 100644 index 0000000..55216c4 --- /dev/null +++ b/components/uni-popup/message.js @@ -0,0 +1,22 @@ +export default { + created() { + if (this.type === 'message') { + // 不显示遮罩 + this.maskShow = false + // 获取子组件对象 + this.childrenMsg = null + } + }, + methods: { + customOpen() { + if (this.childrenMsg) { + this.childrenMsg.open() + } + }, + customClose() { + if (this.childrenMsg) { + this.childrenMsg.close() + } + } + } +} diff --git a/components/uni-popup/popup.js b/components/uni-popup/popup.js new file mode 100644 index 0000000..73771dd --- /dev/null +++ b/components/uni-popup/popup.js @@ -0,0 +1,25 @@ +import message from './message.js'; +// 定义 type 类型:弹出类型:top/bottom/center +const config = { + // 顶部弹出 + top: 'top', + // 底部弹出 + bottom: 'bottom', + // 居中弹出 + center: 'center', + // 消息提示 + message: 'top', + // 对话框 + dialog: 'center', + // 分享 + share: 'bottom', +} + +export default { + data() { + return { + config: config + } + }, + mixins: [message], +} diff --git a/components/uni-popup/uni-popup.vue b/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..c24acc7 --- /dev/null +++ b/components/uni-popup/uni-popup.vue @@ -0,0 +1,294 @@ + + + + diff --git a/components/uni-transition/uni-transition.vue b/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..3158466 --- /dev/null +++ b/components/uni-transition/uni-transition.vue @@ -0,0 +1,280 @@ + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..5dcc524 --- /dev/null +++ b/index.html @@ -0,0 +1,22 @@ + + + + + + + + + + +
+ +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..9b2e065 --- /dev/null +++ b/main.js @@ -0,0 +1,99 @@ +import App from './App' +import toast from './common/Toast.js' +import wxAuthLogin from './common/wxAuthLogin.js' +import wxSilentLogin from './common/wxSilentLogin.js' +import { + isEmpty +} from './common/TextUtils.js' +import { + write, + read, + write2, + read2 +} from './common/PreferenceHelper.js' +import { + writeGameCahce, + clearGameCache, + readGameCahce, + hasCache +} from './common/GameCache.js' +import { + http, + httpOtherUrl, + httpCookie, + baseImgURL, + upload +} from './common/Http.js' +import px2upx from './common/PxToRpxOrPxToUpx.js' +import { + timeText, + timeFormat, + currentMillions, + getWeekStr, + getTodayEndTime +} from "./common/Time.js" +import { + back, + setResult, + onActivityResult +} from "./common/Back.js" +import getDistance from 'common/Distance.js' + +import chooseUpload from 'common/ChooseUpload.js' +import { + putWEBExtra, + getWEBExtra +} from './common/intent.js' + +Vue.prototype.WxSilentLogin = wxSilentLogin +Vue.prototype.WxAuthLogin = wxAuthLogin +Vue.prototype.Toast = toast +Vue.prototype.Back = back +Vue.prototype.WritePreference = write +Vue.prototype.WritePreference2 = write2 +Vue.prototype.ReadPreference = read +Vue.prototype.ReadPreference2 = read2 +Vue.prototype.HTTP = http +Vue.prototype.HttpOtherUrl = httpOtherUrl +Vue.prototype.Upload = upload +Vue.prototype.HttpCookie = httpCookie +Vue.prototype.IsEmpty = isEmpty +Vue.prototype.Px2Upx = px2upx +Vue.prototype.TimeText = timeText +Vue.prototype.TimeFormat = timeFormat +Vue.prototype.GetWeekStr = getWeekStr +Vue.prototype.CurrentMillions = currentMillions +Vue.prototype.GetTodayEndTime = getTodayEndTime +Vue.prototype.Back = back +Vue.prototype.SetResult = setResult +Vue.prototype.OnActivityResult = onActivityResult +Vue.prototype.WriteGameCahce = writeGameCahce +Vue.prototype.ClearGameCache = clearGameCache +Vue.prototype.ReadGameCahce = readGameCahce +Vue.prototype.HasCache = hasCache +Vue.prototype.getDistance = getDistance +Vue.prototype.chooseUpload = chooseUpload +Vue.prototype.putWEBExtra = putWEBExtra +Vue.prototype.getWEBExtra = getWEBExtra + +// #ifndef VUE3 +import Vue from 'vue' +Vue.config.productionTip = false +App.mpType = 'app' +const app = new Vue({ + ...App +}) +app.$mount() +// #endif + +// #ifdef VUE3 +import { + createSSRApp +} from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..fa20b94 --- /dev/null +++ b/manifest.json @@ -0,0 +1,68 @@ +{ + "name" : "signUpTool", + "appid" : "__UNI__8EDFE3C", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wxf869f371c1d0610c", + "setting" : { + "urlCheck" : true, + "postcss" : true, + "minified" : false, + "es6" : true + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "获取当前所在城市" + } + }, + "lazyCodeLoading" : "requiredComponents" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..f4e0ec1 --- /dev/null +++ b/pages.json @@ -0,0 +1,255 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/publish/Publish", + "style": {} + }, + { + "path": "pages/publish/EnrollCondition", + "style": {} + }, + { + "path": "pages/publish/EnrollRequired", + "style": {} + }, + { + "path": "pages/find/ActivityList", + "style": {} + }, + { + "path": "pages/find/ActivityDetail", + "style": {} + }, + { + "path": "pages/find/BaoMingListActivity", + "style": {} + }, + { + "path": "pages/find/TeamEnroll", + "style": {} + }, + { + "path": "pages/team/MyTeam", + "style": {} + }, + { + "path": "pages/test/DetailActivity", + "style": {} + }, + { + "path": "pages/team/recruitList", + "style": {} + }, + { + "path": "pages/test/test", + "style": {} + }, + + { + "path": "pages/team/CreateTeam", + "style": {} + }, + { + "path": "pages/team/MyTeam2", + "style": {} + }, + { + "path": "pages/team/JoinTeam", + "style": {} + }, + { + "path": "pages/index/firstActivity", + "style": {} + }, + { + "path": "pages/index/sponsorDetail", + "style": {} + }, + { + "path": "pages/index/activity", + "style": {} + }, { + "path": "pages/index/addSponsor", + "style": {} + }, { + "path": "pages/index/activityList", + "style": {} + }, { + "path": "pages/index/DetailActivity", + "style": {} + }, { + "path": "pages/index/ArenaDetailActivity", + "style": {} + }, { + "path": "pages/index/BindPhone", + "style": { + + } + + }, { + "path": "pages/index/UserAuthentication", + "style": { + + } + + }, { + "path": "pages/index/sponsorList", + "style": {} + }, { + "path": "pages/index/mobileInfoActivity", + "style": {} + }, { + "path": "pages/index/eventActivity", + "style": {} + }, { + "path": "pages/index/explainActivity", + "style": {} + }, { + "path": "pages/index/InputHappyGameLimitActivity", + "style": {} + + }, { + "path": "pages/index/InputHappyGameAreaActivity", + "style": {} + + }, { + "path": "pages/city/CitySelectActivity", + "style": {} + }, { + "path": "pages/web/WebActivity", + "style": {} + }, { + "path": "pages/setup/upMobile", + "style": {} + }, { + "path": "pages/setup/upMobile2", + "style": {} + }, { + "path": "pages/setup/RetrievePasswordActivity", + "style": {} + }, { + "path": "pages/setup/NewPasswordActivity", + "style": {} + }, + { + "path": "pages/me/PersonalCenter", + "style": {} + }, + { + "path": "pages/me/AuthLogin", + "style": {} + }, { + "path": "pages/me/BaseInfo", + "style": {} + }, { + "path": "pages/me/MyActivity", + "style": {} + }, { + "path": "pages/me/ModiNickName", + "style": {} + },{ + "path": "pages/me/ModiUserNumber", + "style": {} + }, { + "path": "pages/me/MyTeamCreate", + "style": {} + }, { + "path": "pages/me/MemberManage", + "style": {} + } + , { + "path": "pages/me/MyTeam", + "style": {} + }, { + "path": "pages/me/RealInfo", + "style": {} + },{ + "path": "pages/me/Setup", + "style": {} + },{ + "path": "pages/me/ModiRealName", + "style": {} + },{ + "path": "pages/me/ModiMobileInputNew", + "style": {} + },{ + "path": "pages/me/ModiPasswordVerify", + "style": {} + },{ + "path": "pages/me/ModiPassword", + "style": {} + }, + { + "path": "pages/publish/CreateActivity", + "style": {} + }, + { + "path": "pages/publish/EditIntroduction", + "style": {} + }, + { + "path": "pages/publish/EditDisclaimer", + "style": {} + }, + { + "path": "pages/publish/SetLinker", + "style": {} + }, + { + "path": "pages/publish/InputEnrollNumbersLimitMoney", + "style": {} + }, + { + "path": "pages/team/WaitJoin", + "style": {} + } + + + + ], + // 下载安装时配置 + "easycom": { + "autoscan": true, + "custom": { + "fui-(.*)": "@/components/firstui/fui-$1/fui-$1.vue" + } + }, + "globalStyle": { + "navigationStyle": "custom", + "navigationBarBackgroundColor": "#2fa1f0" + }, + + "tabBar": { + "color": "#959595", + "selectedColor": "#41adf8", + "backgroundColor": "#FFFFFF", + "borderStyle": "black", + "list": [{ + "pagePath": "pages/find/ActivityList", + "iconPath": "static/img/public/bottom-icon/find_normal.png", + "selectedIconPath": "static/img/public/bottom-icon/find_press.png", + "text": "发现" + }, { + "pagePath": "pages/publish/Publish", + "iconPath": "static/img/public/bottom-icon/add_normal.png", + "selectedIconPath": "static/img/public/bottom-icon/add_press.png", + "text": "发布" + }, { + "pagePath": "pages/me/PersonalCenter", + "iconPath": "static/img/public/bottom-icon/mine_normal.png", + "selectedIconPath": "static/img/public/bottom-icon/mine_press.png", + "text": "我的" + }] + + }, + "condition" : { //模式配置,仅开发期间生效 + "current": 0, //当前激活的模式(list 的索引项) + "list": [ + { + "name": "", //模式名称 + "path": "", //启动页面,必选 + "query": "" //启动参数,在页面的onLoad函数里面得到 + } + ] + } +} diff --git a/pages/city/CitySelectActivity.vue b/pages/city/CitySelectActivity.vue new file mode 100644 index 0000000..5bd2873 --- /dev/null +++ b/pages/city/CitySelectActivity.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/pages/find/ActivityDetail.vue b/pages/find/ActivityDetail.vue new file mode 100644 index 0000000..7b8bd6d --- /dev/null +++ b/pages/find/ActivityDetail.vue @@ -0,0 +1,482 @@ + + + + + diff --git a/pages/find/ActivityList.vue b/pages/find/ActivityList.vue new file mode 100644 index 0000000..39a829f --- /dev/null +++ b/pages/find/ActivityList.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/pages/find/BaoMingListActivity.vue b/pages/find/BaoMingListActivity.vue new file mode 100644 index 0000000..b783e30 --- /dev/null +++ b/pages/find/BaoMingListActivity.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/pages/find/TeamEnroll.vue b/pages/find/TeamEnroll.vue new file mode 100644 index 0000000..4971631 --- /dev/null +++ b/pages/find/TeamEnroll.vue @@ -0,0 +1,217 @@ + + + + diff --git a/pages/home/AddFragment.vue b/pages/home/AddFragment.vue new file mode 100644 index 0000000..db019f0 --- /dev/null +++ b/pages/home/AddFragment.vue @@ -0,0 +1,364 @@ + + + + + diff --git a/pages/home/FindFragment.vue b/pages/home/FindFragment.vue new file mode 100644 index 0000000..78093a0 --- /dev/null +++ b/pages/home/FindFragment.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/pages/home/UserFragment.vue b/pages/home/UserFragment.vue new file mode 100644 index 0000000..c1cb05e --- /dev/null +++ b/pages/home/UserFragment.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/pages/index/ArenaDetailActivity.vue b/pages/index/ArenaDetailActivity.vue new file mode 100644 index 0000000..48fd409 --- /dev/null +++ b/pages/index/ArenaDetailActivity.vue @@ -0,0 +1,312 @@ + + + + + diff --git a/pages/index/BaoMingListActivity.vue b/pages/index/BaoMingListActivity.vue new file mode 100644 index 0000000..bdaa75c --- /dev/null +++ b/pages/index/BaoMingListActivity.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/pages/index/BindPhone.vue b/pages/index/BindPhone.vue new file mode 100644 index 0000000..3d33d9d --- /dev/null +++ b/pages/index/BindPhone.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/pages/index/DetailActivity.vue b/pages/index/DetailActivity.vue new file mode 100644 index 0000000..6859389 --- /dev/null +++ b/pages/index/DetailActivity.vue @@ -0,0 +1,394 @@ + + + + + diff --git a/pages/index/InputHappyGameAreaActivity.vue b/pages/index/InputHappyGameAreaActivity.vue new file mode 100644 index 0000000..240a2f8 --- /dev/null +++ b/pages/index/InputHappyGameAreaActivity.vue @@ -0,0 +1,470 @@ + + + + + diff --git a/pages/index/InputHappyGameLimitActivity.vue b/pages/index/InputHappyGameLimitActivity.vue new file mode 100644 index 0000000..5a2c3b6 --- /dev/null +++ b/pages/index/InputHappyGameLimitActivity.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/pages/index/UserAuthentication.vue b/pages/index/UserAuthentication.vue new file mode 100644 index 0000000..4a3d786 --- /dev/null +++ b/pages/index/UserAuthentication.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/pages/index/activity.vue b/pages/index/activity.vue new file mode 100644 index 0000000..08e899b --- /dev/null +++ b/pages/index/activity.vue @@ -0,0 +1,1278 @@ +