From 316e05dadd6afef76abd029c3482d246118215e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=AD=8F=E5=95=BE?= <1144797966@qq.com>
Date: Thu, 21 Mar 2024 15:54:39 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 8 +
.hbuilderx/launch.json | 23 +
.vscode/settings.json | 6 +
App.vue | 57 +
README.md | 110 +-
common/css/flex.css | 48 +
common/css/theme.scss | 15 +
common/css/uni.scss | 1534 +++++++++++++++++
common/js/WXBizDataCrypt.js | 35 +
common/js/api.js | 224 +++
common/js/lange.js | 74 +
common/js/uqrCode.js | 1437 +++++++++++++++
components/bottombbar.vue | 129 ++
components/countdown.vue | 192 +++
components/navbar.vue | 156 ++
components/pick-regions/pick-regions.vue | 137 ++
components/pick-regions/regions.json | 1 +
framework/0-conf.js | 26 +
framework/1-utils.js | 223 +++
framework/11-api.js | 220 +++
framework/12-resource.js | 33 +
framework/13-mixin.js | 33 +
framework/2-url.js | 37 +
framework/3-pro.js | 56 +
framework/4-queue.js | 61 +
framework/5-pro-ext.js | 42 +
framework/6-event.js | 6 +
framework/7-qiniu.js | 31 +
framework/8-cache.js | 205 +++
framework/9-modal.js | 32 +
framework/bootstrap.js | 14 +
framework/bridge.js | 5 +
framework/md5.js | 200 +++
framework/sign.js | 37 +
js_sdk/yushijie-ossutil/ossutil/base64.js | 143 ++
js_sdk/yushijie-ossutil/ossutil/config.js | 8 +
js_sdk/yushijie-ossutil/ossutil/crypto.js | 178 ++
js_sdk/yushijie-ossutil/ossutil/hmac.js | 34 +
js_sdk/yushijie-ossutil/ossutil/sha1.js | 79 +
js_sdk/yushijie-ossutil/ossutil/uploadFile.js | 86 +
main.js | 23 +
manifest.json | 114 ++
package-lock.json | 24 +
package.json | 5 +
pages.json | 263 +++
pages/app/pay.vue | 498 ++++++
pages/city/city.vue | 64 +
pages/index/components/clothing/index.vue | 337 ++++
.../index/components/clothingmetals/index.vue | 69 +
pages/index/components/employees/index.vue | 104 ++
pages/index/components/flashsale/index.vue | 229 +++
pages/index/components/flower/index.vue | 100 ++
pages/index/components/index.vue | 281 +++
pages/index/components/popula/index.vue | 97 ++
pages/index/components/recommend/index.vue | 95 +
pages/index/components/salezone/index.vue | 181 ++
pages/index/components/specials/index.vue | 182 ++
pages/index/components/vipclass/index.vue | 194 +++
pages/index/hotel.vue | 1154 +++++++++++++
pages/index/index.vue | 659 +++++++
pages/index/indexInfo.vue | 600 +++++++
pages/index/iose.vue | 151 ++
pages/index/lange.vue | 29 +
pages/index/member/index.vue | 143 ++
pages/index/member/memberinfo.vue | 327 ++++
pages/index/specials.vue | 219 +++
pages/mall/community.vue | 388 +++++
pages/mall/confirm.vue | 682 ++++++++
pages/mall/index.vue | 369 ++++
pages/mall/mallInfo.vue | 548 ++++++
pages/mall/mallInfos.vue | 627 +++++++
pages/mall/order/applylrefund.vue | 437 +++++
pages/mall/order/cporderinfo.vue | 840 +++++++++
pages/mall/order/index.vue | 905 ++++++++++
pages/mall/order/orderInfo.vue | 623 +++++++
pages/mall/order/ordersuccess.vue | 189 ++
pages/mall/order/refund.vue | 364 ++++
pages/mall/series.vue | 358 ++++
pages/my/address/edit.vue | 325 ++++
pages/my/address/index.vue | 248 +++
pages/my/index.vue | 412 +++++
pages/my/member/index.vue | 179 ++
pages/my/member/memberinfo.vue | 399 +++++
pages/my/member/memberinfos.vue | 564 ++++++
pages/my/member/memberone.vue | 339 ++++
pages/my/order/applylrefund.vue | 425 +++++
pages/my/order/cporderinfo.vue | 838 +++++++++
pages/my/order/index.vue | 895 ++++++++++
pages/my/order/orderInfo.vue | 628 +++++++
pages/my/order/refund.vue | 368 ++++
pages/my/setup/index.vue | 313 ++++
pages/my/setup/phone.vue | 249 +++
pages/my/setup/repairpassword.vue | 215 +++
pages/order/confirm.vue | 799 +++++++++
pages/order/confirmhotel.vue | 933 ++++++++++
pages/order/index.vue | 453 +++++
pages/order/orderInfo.vue | 1131 ++++++++++++
pages/order/orderInfohotel.vue | 1418 +++++++++++++++
pages/order/orderInfos.vue | 1445 ++++++++++++++++
pages/order/ordersuccess.vue | 196 +++
pages/order/paybill.vue | 477 +++++
pages/order/paymentorder.vue | 492 ++++++
pages/shopcart/index.vue | 815 +++++++++
pages/task/index.vue | 161 ++
pages/task/taskInfo.vue | 145 ++
pages/webview/html.vue | 23 +
pages/webview/imge.vue | 55 +
pages/webview/webview.vue | 16 +
static/4.png | Bin 0 -> 7120 bytes
static/address.png | Bin 0 -> 602 bytes
static/gwc.png | Bin 0 -> 13789 bytes
static/iconfont.ttf | Bin 0 -> 55940 bytes
static/img_vipno_vip1-1.png | Bin 0 -> 1332 bytes
static/imge/flashsale.png | Bin 0 -> 10814 bytes
static/imge/specials.png | Bin 0 -> 4513 bytes
static/imge/specialss.png | Bin 0 -> 29177 bytes
static/logo.png | Bin 0 -> 4023 bytes
static/mall/cart.png | Bin 0 -> 2884 bytes
static/mall/k.png | Bin 0 -> 1883 bytes
static/mall/s.png | Bin 0 -> 1542 bytes
static/positioning.png | Bin 0 -> 485 bytes
static/screen.png | Bin 0 -> 261 bytes
static/success.png | Bin 0 -> 55112 bytes
static/towcontentitemtow_towposabslt.png | Bin 0 -> 701 bytes
static/uni.ttf | Bin 0 -> 26164 bytes
static/ye.png | Bin 0 -> 363 bytes
store/index.js | 166 ++
uni.scss | 97 ++
uni_modules/d-swiper-type/changelog.md | 25 +
.../d-swiper-type/d-swiper-type.vue | 478 +++++
.../d-swiper-type/pages/home/hometype.vue | 479 +++++
.../d-swiper-type/pages/home/readme.md | 10 +
.../pages/static/icon_img/bing.png | Bin 0 -> 373442 bytes
.../pages/static/icon_img/del.png | Bin 0 -> 1269 bytes
.../pages/static/icon_img/del2.png | Bin 0 -> 765 bytes
.../pages/static/icon_img/mangguo.png | Bin 0 -> 407525 bytes
.../pages/static/icon_img/search.png | Bin 0 -> 4067 bytes
.../pages/static/icon_img/xigua.png | Bin 0 -> 641219 bytes
.../pages/static/icon_img/yan_close.png | Bin 0 -> 1039 bytes
.../pages/static/icon_img/yan_open.png | Bin 0 -> 1300 bytes
uni_modules/d-swiper-type/package.json | 89 +
uni_modules/d-swiper-type/readme.md | 30 +
uni_modules/uni-icons/changelog.md | 22 +
.../uni-icons/components/uni-icons/icons.js | 1169 +++++++++++++
.../components/uni-icons/uni-icons.vue | 96 ++
.../components/uni-icons/uniicons.css | 663 +++++++
.../components/uni-icons/uniicons.ttf | Bin 0 -> 35760 bytes
uni_modules/uni-icons/package.json | 86 +
uni_modules/uni-icons/readme.md | 8 +
uni_modules/uni-scss/changelog.md | 8 +
uni_modules/uni-scss/index.scss | 1 +
uni_modules/uni-scss/package.json | 82 +
uni_modules/uni-scss/readme.md | 4 +
uni_modules/uni-scss/styles/index.scss | 7 +
.../uni-scss/styles/setting/_border.scss | 3 +
.../uni-scss/styles/setting/_color.scss | 66 +
.../uni-scss/styles/setting/_radius.scss | 55 +
.../uni-scss/styles/setting/_space.scss | 56 +
.../uni-scss/styles/setting/_styles.scss | 167 ++
.../uni-scss/styles/setting/_text.scss | 24 +
.../uni-scss/styles/setting/_variables.scss | 146 ++
.../uni-scss/styles/tools/functions.scss | 19 +
uni_modules/uni-scss/theme.scss | 31 +
uni_modules/uni-scss/variables.scss | 62 +
uni_modules/uview-ui/LICENSE | 21 +
uni_modules/uview-ui/README.md | 66 +
uni_modules/uview-ui/changelog.md | 362 ++++
.../uview-ui/components/u--form/u--form.vue | 78 +
.../uview-ui/components/u--image/u--image.vue | 47 +
.../uview-ui/components/u--input/u--input.vue | 73 +
.../uview-ui/components/u--text/u--text.vue | 44 +
.../components/u--textarea/u--textarea.vue | 48 +
.../components/u-action-sheet/props.js | 54 +
.../u-action-sheet/u-action-sheet.vue | 278 +++
.../uview-ui/components/u-album/props.js | 59 +
.../uview-ui/components/u-album/u-album.vue | 259 +++
.../uview-ui/components/u-alert/props.js | 44 +
.../uview-ui/components/u-alert/u-alert.vue | 243 +++
.../components/u-avatar-group/props.js | 52 +
.../u-avatar-group/u-avatar-group.vue | 103 ++
.../uview-ui/components/u-avatar/props.js | 78 +
.../uview-ui/components/u-avatar/u-avatar.vue | 172 ++
.../uview-ui/components/u-back-top/props.js | 54 +
.../components/u-back-top/u-back-top.vue | 129 ++
.../uview-ui/components/u-badge/props.js | 72 +
.../uview-ui/components/u-badge/u-badge.vue | 171 ++
.../uview-ui/components/u-button/nvue.scss | 46 +
.../uview-ui/components/u-button/props.js | 161 ++
.../uview-ui/components/u-button/u-button.vue | 490 ++++++
.../uview-ui/components/u-button/vue.scss | 80 +
.../uview-ui/components/u-calendar/header.vue | 99 ++
.../uview-ui/components/u-calendar/month.vue | 579 +++++++
.../uview-ui/components/u-calendar/props.js | 144 ++
.../components/u-calendar/u-calendar.vue | 384 +++++
.../uview-ui/components/u-calendar/util.js | 85 +
.../components/u-car-keyboard/props.js | 14 +
.../u-car-keyboard/u-car-keyboard.vue | 311 ++++
.../uview-ui/components/u-cell-group/props.js | 14 +
.../components/u-cell-group/u-cell-group.vue | 61 +
.../uview-ui/components/u-cell/props.js | 110 ++
.../uview-ui/components/u-cell/u-cell.vue | 229 +++
.../components/u-checkbox-group/props.js | 82 +
.../u-checkbox-group/u-checkbox-group.vue | 103 ++
.../uview-ui/components/u-checkbox/props.js | 69 +
.../components/u-checkbox/u-checkbox.vue | 344 ++++
.../components/u-circle-progress/props.js | 8 +
.../u-circle-progress/u-circle-progress.vue | 198 +++
.../uview-ui/components/u-code-input/props.js | 79 +
.../components/u-code-input/u-code-input.vue | 252 +++
.../uview-ui/components/u-code/props.js | 34 +
.../uview-ui/components/u-code/u-code.vue | 129 ++
.../uview-ui/components/u-col/props.js | 29 +
.../uview-ui/components/u-col/u-col.vue | 162 ++
.../components/u-collapse-item/props.js | 59 +
.../u-collapse-item/u-collapse-item.vue | 225 +++
.../uview-ui/components/u-collapse/props.js | 19 +
.../components/u-collapse/u-collapse.vue | 90 +
.../components/u-column-notice/props.js | 55 +
.../u-column-notice/u-column-notice.vue | 160 ++
.../uview-ui/components/u-count-down/props.js | 24 +
.../components/u-count-down/u-count-down.vue | 163 ++
.../uview-ui/components/u-count-down/utils.js | 62 +
.../uview-ui/components/u-count-to/props.js | 59 +
.../components/u-count-to/u-count-to.vue | 184 ++
.../components/u-datetime-picker/props.js | 116 ++
.../u-datetime-picker/u-datetime-picker.vue | 360 ++++
.../uview-ui/components/u-divider/props.js | 44 +
.../components/u-divider/u-divider.vue | 116 ++
.../components/u-dropdown-item/props.js | 36 +
.../u-dropdown-item/u-dropdown-item.vue | 127 ++
.../uview-ui/components/u-dropdown/props.js | 65 +
.../components/u-dropdown/u-dropdown.vue | 127 ++
.../uview-ui/components/u-empty/props.js | 59 +
.../uview-ui/components/u-empty/u-empty.vue | 128 ++
.../uview-ui/components/u-form-item/props.js | 48 +
.../components/u-form-item/u-form-item.vue | 235 +++
.../uview-ui/components/u-form/props.js | 45 +
.../uview-ui/components/u-form/u-form.vue | 214 +++
.../uview-ui/components/u-gap/props.js | 24 +
.../uview-ui/components/u-gap/u-gap.vue | 38 +
.../uview-ui/components/u-grid-item/props.js | 14 +
.../components/u-grid-item/u-grid-item.vue | 209 +++
.../uview-ui/components/u-grid/props.js | 19 +
.../uview-ui/components/u-grid/u-grid.vue | 97 ++
.../uview-ui/components/u-icon/icons.js | 214 +++
.../uview-ui/components/u-icon/props.js | 89 +
.../uview-ui/components/u-icon/u-icon.vue | 234 +++
.../uview-ui/components/u-image/props.js | 84 +
.../uview-ui/components/u-image/u-image.vue | 232 +++
.../components/u-index-anchor/props.js | 29 +
.../u-index-anchor/u-index-anchor.vue | 91 +
.../uview-ui/components/u-index-item/props.js | 5 +
.../components/u-index-item/u-index-item.vue | 87 +
.../uview-ui/components/u-index-list/props.js | 29 +
.../components/u-index-list/u-index-list.vue | 440 +++++
.../uview-ui/components/u-input/props.js | 187 ++
.../uview-ui/components/u-input/u-input.vue | 354 ++++
.../uview-ui/components/u-keyboard/props.js | 84 +
.../components/u-keyboard/u-keyboard.vue | 164 ++
.../components/u-line-progress/props.js | 28 +
.../u-line-progress/u-line-progress.vue | 144 ++
.../uview-ui/components/u-line/props.js | 33 +
.../uview-ui/components/u-line/u-line.vue | 62 +
.../uview-ui/components/u-link/props.js | 39 +
.../uview-ui/components/u-link/u-link.vue | 83 +
.../uview-ui/components/u-list-item/props.js | 9 +
.../components/u-list-item/u-list-item.vue | 116 ++
.../uview-ui/components/u-list/props.js | 76 +
.../uview-ui/components/u-list/u-list.vue | 157 ++
.../components/u-loading-icon/props.js | 59 +
.../u-loading-icon/u-loading-icon.vue | 343 ++++
.../components/u-loading-page/props.js | 49 +
.../u-loading-page/u-loading-page.vue | 115 ++
.../uview-ui/components/u-loadmore/props.js | 94 +
.../components/u-loadmore/u-loadmore.vue | 150 ++
.../uview-ui/components/u-modal/props.js | 84 +
.../uview-ui/components/u-modal/u-modal.vue | 227 +++
.../uview-ui/components/u-navbar/props.js | 84 +
.../uview-ui/components/u-navbar/u-navbar.vue | 186 ++
.../uview-ui/components/u-no-network/props.js | 19 +
.../components/u-no-network/u-no-network.vue | 220 +++
.../uview-ui/components/u-notice-bar/props.js | 70 +
.../components/u-notice-bar/u-notice-bar.vue | 101 ++
.../uview-ui/components/u-notify/props.js | 49 +
.../uview-ui/components/u-notify/u-notify.vue | 211 +++
.../uview-ui/components/u-number-box/props.js | 109 ++
.../components/u-number-box/u-number-box.vue | 416 +++++
.../components/u-number-keyboard/props.js | 19 +
.../u-number-keyboard/u-number-keyboard.vue | 196 +++
.../uview-ui/components/u-overlay/props.js | 24 +
.../components/u-overlay/u-overlay.vue | 68 +
.../uview-ui/components/u-parse/node/node.vue | 499 ++++++
.../uview-ui/components/u-parse/parser.js | 1075 ++++++++++++
.../uview-ui/components/u-parse/props.js | 45 +
.../uview-ui/components/u-parse/u-parse.vue | 366 ++++
.../components/u-picker-column/props.js | 5 +
.../u-picker-column/u-picker-column.vue | 27 +
.../uview-ui/components/u-picker/props.js | 79 +
.../uview-ui/components/u-picker/u-picker.vue | 283 +++
.../uview-ui/components/u-popup/props.js | 79 +
.../uview-ui/components/u-popup/u-popup.vue | 304 ++++
.../components/u-radio-group/props.js | 85 +
.../u-radio-group/u-radio-group.vue | 108 ++
.../uview-ui/components/u-radio/props.js | 64 +
.../uview-ui/components/u-radio/u-radio.vue | 339 ++++
.../uview-ui/components/u-rate/props.js | 69 +
.../uview-ui/components/u-rate/u-rate.vue | 306 ++++
.../uview-ui/components/u-read-more/props.js | 61 +
.../components/u-read-more/u-read-more.vue | 157 ++
.../uview-ui/components/u-row-notice/props.js | 39 +
.../components/u-row-notice/u-row-notice.vue | 330 ++++
.../uview-ui/components/u-row/props.js | 19 +
.../uview-ui/components/u-row/u-row.vue | 93 +
.../components/u-safe-bottom/props.js | 5 +
.../u-safe-bottom/u-safe-bottom.vue | 56 +
.../uview-ui/components/u-scroll-list/nvue.js | 28 +
.../components/u-scroll-list/other.js | 0
.../components/u-scroll-list/props.js | 34 +
.../components/u-scroll-list/scrollWxs.wxs | 50 +
.../u-scroll-list/u-scroll-list.vue | 192 +++
.../uview-ui/components/u-search/props.js | 118 ++
.../uview-ui/components/u-search/u-search.vue | 303 ++++
.../uview-ui/components/u-skeleton/props.js | 59 +
.../components/u-skeleton/u-skeleton.vue | 244 +++
.../uview-ui/components/u-slider/mpother.js | 113 ++
.../uview-ui/components/u-slider/mpwxs.js | 42 +
.../uview-ui/components/u-slider/mpwxs.wxs | 121 ++
.../components/u-slider/nvue - 副本.js | 180 ++
.../uview-ui/components/u-slider/nvue.js | 193 +++
.../uview-ui/components/u-slider/props.js | 54 +
.../uview-ui/components/u-slider/u-slider.vue | 55 +
.../uview-ui/components/u-status-bar/props.js | 8 +
.../components/u-status-bar/u-status-bar.vue | 46 +
.../uview-ui/components/u-steps-item/props.js | 24 +
.../components/u-steps-item/u-steps-item.vue | 316 ++++
.../uview-ui/components/u-steps/props.js | 39 +
.../uview-ui/components/u-steps/u-steps.vue | 80 +
.../uview-ui/components/u-sticky/props.js | 40 +
.../uview-ui/components/u-sticky/u-sticky.vue | 212 +++
.../uview-ui/components/u-subsection/props.js | 49 +
.../components/u-subsection/u-subsection.vue | 299 ++++
.../u-swipe-action-item/index - backup.wxs | 256 +++
.../components/u-swipe-action-item/index.wxs | 225 +++
.../u-swipe-action-item/nvue - backup.js | 270 +++
.../components/u-swipe-action-item/nvue.js | 174 ++
.../components/u-swipe-action-item/props.js | 41 +
.../u-swipe-action-item.vue | 190 ++
.../components/u-swipe-action-item/wxs.js | 15 +
.../components/u-swipe-action/props.js | 9 +
.../u-swipe-action/u-swipe-action.vue | 67 +
.../components/u-swiper-indicator/props.js | 29 +
.../u-swiper-indicator/u-swiper-indicator.vue | 110 ++
.../uview-ui/components/u-swiper/props.js | 125 ++
.../uview-ui/components/u-swiper/u-swiper.vue | 255 +++
.../uview-ui/components/u-switch/props.js | 54 +
.../uview-ui/components/u-switch/u-switch.vue | 177 ++
.../components/u-tabbar-item/props.js | 39 +
.../u-tabbar-item/u-tabbar-item.vue | 142 ++
.../uview-ui/components/u-tabbar/props.js | 44 +
.../uview-ui/components/u-tabbar/u-tabbar.vue | 142 ++
.../uview-ui/components/u-table/props.js | 5 +
.../uview-ui/components/u-table/u-table.vue | 29 +
.../uview-ui/components/u-tabs-item/props.js | 5 +
.../components/u-tabs-item/u-tabs-item.vue | 29 +
.../uview-ui/components/u-tabs/props.js | 64 +
.../uview-ui/components/u-tabs/u-tabs.vue | 354 ++++
.../uview-ui/components/u-tag/props.js | 84 +
.../uview-ui/components/u-tag/u-tag.vue | 358 ++++
uni_modules/uview-ui/components/u-td/props.js | 5 +
uni_modules/uview-ui/components/u-td/u-td.vue | 31 +
.../uview-ui/components/u-text/props.js | 110 ++
.../uview-ui/components/u-text/u-text.vue | 223 +++
.../uview-ui/components/u-text/value.js | 85 +
.../uview-ui/components/u-textarea/props.js | 119 ++
.../components/u-textarea/u-textarea.vue | 239 +++
.../uview-ui/components/u-toast/u-toast.vue | 291 ++++
.../uview-ui/components/u-toolbar/props.js | 34 +
.../components/u-toolbar/u-toolbar.vue | 102 ++
.../components/u-tooltip/clipboard.min.js | 58 +
.../uview-ui/components/u-tooltip/props.js | 59 +
.../components/u-tooltip/u-tooltip.vue | 365 ++++
uni_modules/uview-ui/components/u-tr/props.js | 5 +
uni_modules/uview-ui/components/u-tr/u-tr.vue | 31 +
.../components/u-transition/nvue.ani-map.js | 68 +
.../uview-ui/components/u-transition/props.js | 24 +
.../components/u-transition/transition.js | 157 ++
.../components/u-transition/u-transition.vue | 92 +
.../u-transition/vue.ani-style.scss | 113 ++
.../uview-ui/components/u-upload/mixin.js | 21 +
.../uview-ui/components/u-upload/props.js | 124 ++
.../uview-ui/components/u-upload/u-upload.vue | 558 ++++++
.../uview-ui/components/u-upload/utils.js | 151 ++
.../uview-ui/components/uview-ui/uview-ui.vue | 15 +
uni_modules/uview-ui/index.js | 79 +
uni_modules/uview-ui/index.scss | 23 +
uni_modules/uview-ui/libs/config/color.js | 17 +
uni_modules/uview-ui/libs/config/config.js | 34 +
uni_modules/uview-ui/libs/config/props.js | 190 ++
.../uview-ui/libs/config/props/actionSheet.js | 25 +
.../uview-ui/libs/config/props/album.js | 25 +
.../uview-ui/libs/config/props/alert.js | 22 +
.../uview-ui/libs/config/props/avatar.js | 28 +
.../uview-ui/libs/config/props/avatarGroup.js | 23 +
.../uview-ui/libs/config/props/backtop.js | 27 +
.../uview-ui/libs/config/props/badge.js | 27 +
.../uview-ui/libs/config/props/button.js | 42 +
.../uview-ui/libs/config/props/calendar.js | 42 +
.../uview-ui/libs/config/props/carKeyboard.js | 15 +
.../uview-ui/libs/config/props/cell.js | 35 +
.../uview-ui/libs/config/props/cellGroup.js | 17 +
.../uview-ui/libs/config/props/checkbox.js | 27 +
.../libs/config/props/checkboxGroup.js | 29 +
.../libs/config/props/circleProgress.js | 15 +
.../uview-ui/libs/config/props/code.js | 21 +
.../uview-ui/libs/config/props/codeInput.js | 29 +
uni_modules/uview-ui/libs/config/props/col.js | 19 +
.../uview-ui/libs/config/props/collapse.js | 17 +
.../libs/config/props/collapseItem.js | 25 +
.../libs/config/props/columnNotice.js | 24 +
.../uview-ui/libs/config/props/countDown.js | 18 +
.../uview-ui/libs/config/props/countTo.js | 25 +
.../libs/config/props/datetimePicker.js | 36 +
.../uview-ui/libs/config/props/divider.js | 23 +
.../uview-ui/libs/config/props/empty.js | 26 +
.../uview-ui/libs/config/props/form.js | 22 +
.../uview-ui/libs/config/props/formItem.js | 23 +
uni_modules/uview-ui/libs/config/props/gap.js | 19 +
.../uview-ui/libs/config/props/grid.js | 17 +
.../uview-ui/libs/config/props/gridItem.js | 16 +
.../uview-ui/libs/config/props/icon.js | 36 +
.../uview-ui/libs/config/props/image.js | 30 +
.../uview-ui/libs/config/props/indexAnchor.js | 19 +
.../uview-ui/libs/config/props/indexList.js | 19 +
.../uview-ui/libs/config/props/input.js | 48 +
.../uview-ui/libs/config/props/keyboard.js | 30 +
.../uview-ui/libs/config/props/line.js | 20 +
.../libs/config/props/lineProgress.js | 19 +
.../uview-ui/libs/config/props/link.js | 26 +
.../uview-ui/libs/config/props/list.js | 28 +
.../uview-ui/libs/config/props/listItem.js | 15 +
.../uview-ui/libs/config/props/loadingIcon.js | 30 +
.../uview-ui/libs/config/props/loadingPage.js | 23 +
.../uview-ui/libs/config/props/loadmore.js | 32 +
.../uview-ui/libs/config/props/modal.js | 30 +
.../uview-ui/libs/config/props/navbar.js | 32 +
.../uview-ui/libs/config/props/noNetwork.js | 18 +
.../uview-ui/libs/config/props/noticeBar.js | 27 +
.../uview-ui/libs/config/props/notify.js | 22 +
.../uview-ui/libs/config/props/numberBox.js | 35 +
.../libs/config/props/numberKeyboard.js | 17 +
.../uview-ui/libs/config/props/overlay.js | 18 +
.../uview-ui/libs/config/props/parse.js | 22 +
.../uview-ui/libs/config/props/picker.js | 29 +
.../uview-ui/libs/config/props/popup.js | 29 +
.../uview-ui/libs/config/props/radio.js | 27 +
.../uview-ui/libs/config/props/radioGroup.js | 30 +
.../uview-ui/libs/config/props/rate.js | 26 +
.../uview-ui/libs/config/props/readMore.js | 22 +
uni_modules/uview-ui/libs/config/props/row.js | 17 +
.../uview-ui/libs/config/props/rowNotice.js | 21 +
.../uview-ui/libs/config/props/scrollList.js | 20 +
.../uview-ui/libs/config/props/search.js | 37 +
.../uview-ui/libs/config/props/section.js | 24 +
.../uview-ui/libs/config/props/skeleton.js | 25 +
.../uview-ui/libs/config/props/slider.js | 25 +
.../uview-ui/libs/config/props/statusBar.js | 15 +
.../uview-ui/libs/config/props/steps.js | 21 +
.../uview-ui/libs/config/props/stepsItem.js | 18 +
.../uview-ui/libs/config/props/sticky.js | 20 +
.../uview-ui/libs/config/props/subsection.js | 23 +
.../uview-ui/libs/config/props/swipeAction.js | 15 +
.../libs/config/props/swipeActionItem.js | 21 +
.../uview-ui/libs/config/props/swiper.js | 39 +
.../libs/config/props/swipterIndicator.js | 19 +
.../uview-ui/libs/config/props/switch.js | 24 +
.../uview-ui/libs/config/props/tabbar.js | 22 +
.../uview-ui/libs/config/props/tabbarItem.js | 20 +
.../uview-ui/libs/config/props/tabs.js | 32 +
uni_modules/uview-ui/libs/config/props/tag.js | 29 +
.../uview-ui/libs/config/props/text.js | 38 +
.../uview-ui/libs/config/props/textarea.js | 36 +
.../uview-ui/libs/config/props/toast.js | 30 +
.../uview-ui/libs/config/props/toolbar.js | 21 +
.../uview-ui/libs/config/props/tooltip.js | 25 +
.../uview-ui/libs/config/props/transition.js | 18 +
.../uview-ui/libs/config/props/upload.js | 36 +
uni_modules/uview-ui/libs/config/zIndex.js | 20 +
uni_modules/uview-ui/libs/css/color.scss | 155 ++
uni_modules/uview-ui/libs/css/common.scss | 97 ++
uni_modules/uview-ui/libs/css/components.scss | 15 +
uni_modules/uview-ui/libs/css/flex.scss | 257 +++
uni_modules/uview-ui/libs/css/h5.scss | 0
uni_modules/uview-ui/libs/css/mixin.scss | 8 +
uni_modules/uview-ui/libs/css/mp.scss | 0
uni_modules/uview-ui/libs/css/nvue.scss | 0
uni_modules/uview-ui/libs/css/vue.scss | 27 +
.../uview-ui/libs/function/colorGradient.js | 134 ++
.../uview-ui/libs/function/debounce.js | 29 +
uni_modules/uview-ui/libs/function/digit.js | 167 ++
uni_modules/uview-ui/libs/function/index.js | 731 ++++++++
.../uview-ui/libs/function/platform.js | 75 +
uni_modules/uview-ui/libs/function/test.js | 288 ++++
.../uview-ui/libs/function/throttle.js | 30 +
.../libs/luch-request/adapters/index.js | 97 ++
.../luch-request/core/InterceptorManager.js | 50 +
.../libs/luch-request/core/Request.js | 198 +++
.../libs/luch-request/core/buildFullPath.js | 20 +
.../libs/luch-request/core/defaults.js | 29 +
.../libs/luch-request/core/dispatchRequest.js | 3 +
.../libs/luch-request/core/mergeConfig.js | 103 ++
.../uview-ui/libs/luch-request/core/settle.js | 16 +
.../libs/luch-request/helpers/buildURL.js | 69 +
.../libs/luch-request/helpers/combineURLs.js | 14 +
.../luch-request/helpers/isAbsoluteURL.js | 14 +
.../uview-ui/libs/luch-request/index.d.ts | 116 ++
.../uview-ui/libs/luch-request/index.js | 3 +
.../uview-ui/libs/luch-request/utils.js | 131 ++
.../uview-ui/libs/luch-request/utils/clone.js | 264 +++
uni_modules/uview-ui/libs/mixin/button.js | 13 +
uni_modules/uview-ui/libs/mixin/mixin.js | 160 ++
uni_modules/uview-ui/libs/mixin/mpMixin.js | 8 +
uni_modules/uview-ui/libs/mixin/mpShare.js | 13 +
uni_modules/uview-ui/libs/mixin/openType.js | 25 +
uni_modules/uview-ui/libs/mixin/style.js | 228 +++
uni_modules/uview-ui/libs/mixin/touch.js | 59 +
.../uview-ui/libs/util/async-validator.js | 1343 +++++++++++++++
uni_modules/uview-ui/libs/util/calendar.js | 546 ++++++
uni_modules/uview-ui/libs/util/dayjs.js | 308 ++++
uni_modules/uview-ui/libs/util/emitter.js | 51 +
uni_modules/uview-ui/libs/util/route.js | 124 ++
uni_modules/uview-ui/package.json | 84 +
uni_modules/uview-ui/theme.scss | 44 +
532 files changed, 76020 insertions(+), 1 deletion(-)
create mode 100644 .gitignore
create mode 100644 .hbuilderx/launch.json
create mode 100644 .vscode/settings.json
create mode 100644 App.vue
create mode 100644 common/css/flex.css
create mode 100644 common/css/theme.scss
create mode 100644 common/css/uni.scss
create mode 100644 common/js/WXBizDataCrypt.js
create mode 100644 common/js/api.js
create mode 100644 common/js/lange.js
create mode 100644 common/js/uqrCode.js
create mode 100644 components/bottombbar.vue
create mode 100644 components/countdown.vue
create mode 100644 components/navbar.vue
create mode 100644 components/pick-regions/pick-regions.vue
create mode 100644 components/pick-regions/regions.json
create mode 100644 framework/0-conf.js
create mode 100644 framework/1-utils.js
create mode 100644 framework/11-api.js
create mode 100644 framework/12-resource.js
create mode 100644 framework/13-mixin.js
create mode 100644 framework/2-url.js
create mode 100644 framework/3-pro.js
create mode 100644 framework/4-queue.js
create mode 100644 framework/5-pro-ext.js
create mode 100644 framework/6-event.js
create mode 100644 framework/7-qiniu.js
create mode 100644 framework/8-cache.js
create mode 100644 framework/9-modal.js
create mode 100644 framework/bootstrap.js
create mode 100644 framework/bridge.js
create mode 100644 framework/md5.js
create mode 100644 framework/sign.js
create mode 100644 js_sdk/yushijie-ossutil/ossutil/base64.js
create mode 100644 js_sdk/yushijie-ossutil/ossutil/config.js
create mode 100644 js_sdk/yushijie-ossutil/ossutil/crypto.js
create mode 100644 js_sdk/yushijie-ossutil/ossutil/hmac.js
create mode 100644 js_sdk/yushijie-ossutil/ossutil/sha1.js
create mode 100644 js_sdk/yushijie-ossutil/ossutil/uploadFile.js
create mode 100644 main.js
create mode 100644 manifest.json
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 pages.json
create mode 100644 pages/app/pay.vue
create mode 100644 pages/city/city.vue
create mode 100644 pages/index/components/clothing/index.vue
create mode 100644 pages/index/components/clothingmetals/index.vue
create mode 100644 pages/index/components/employees/index.vue
create mode 100644 pages/index/components/flashsale/index.vue
create mode 100644 pages/index/components/flower/index.vue
create mode 100644 pages/index/components/index.vue
create mode 100644 pages/index/components/popula/index.vue
create mode 100644 pages/index/components/recommend/index.vue
create mode 100644 pages/index/components/salezone/index.vue
create mode 100644 pages/index/components/specials/index.vue
create mode 100644 pages/index/components/vipclass/index.vue
create mode 100644 pages/index/hotel.vue
create mode 100644 pages/index/index.vue
create mode 100644 pages/index/indexInfo.vue
create mode 100644 pages/index/iose.vue
create mode 100644 pages/index/lange.vue
create mode 100644 pages/index/member/index.vue
create mode 100644 pages/index/member/memberinfo.vue
create mode 100644 pages/index/specials.vue
create mode 100644 pages/mall/community.vue
create mode 100644 pages/mall/confirm.vue
create mode 100644 pages/mall/index.vue
create mode 100644 pages/mall/mallInfo.vue
create mode 100644 pages/mall/mallInfos.vue
create mode 100644 pages/mall/order/applylrefund.vue
create mode 100644 pages/mall/order/cporderinfo.vue
create mode 100644 pages/mall/order/index.vue
create mode 100644 pages/mall/order/orderInfo.vue
create mode 100644 pages/mall/order/ordersuccess.vue
create mode 100644 pages/mall/order/refund.vue
create mode 100644 pages/mall/series.vue
create mode 100644 pages/my/address/edit.vue
create mode 100644 pages/my/address/index.vue
create mode 100644 pages/my/index.vue
create mode 100644 pages/my/member/index.vue
create mode 100644 pages/my/member/memberinfo.vue
create mode 100644 pages/my/member/memberinfos.vue
create mode 100644 pages/my/member/memberone.vue
create mode 100644 pages/my/order/applylrefund.vue
create mode 100644 pages/my/order/cporderinfo.vue
create mode 100644 pages/my/order/index.vue
create mode 100644 pages/my/order/orderInfo.vue
create mode 100644 pages/my/order/refund.vue
create mode 100644 pages/my/setup/index.vue
create mode 100644 pages/my/setup/phone.vue
create mode 100644 pages/my/setup/repairpassword.vue
create mode 100644 pages/order/confirm.vue
create mode 100644 pages/order/confirmhotel.vue
create mode 100644 pages/order/index.vue
create mode 100644 pages/order/orderInfo.vue
create mode 100644 pages/order/orderInfohotel.vue
create mode 100644 pages/order/orderInfos.vue
create mode 100644 pages/order/ordersuccess.vue
create mode 100644 pages/order/paybill.vue
create mode 100644 pages/order/paymentorder.vue
create mode 100644 pages/shopcart/index.vue
create mode 100644 pages/task/index.vue
create mode 100644 pages/task/taskInfo.vue
create mode 100644 pages/webview/html.vue
create mode 100644 pages/webview/imge.vue
create mode 100644 pages/webview/webview.vue
create mode 100644 static/4.png
create mode 100644 static/address.png
create mode 100644 static/gwc.png
create mode 100644 static/iconfont.ttf
create mode 100644 static/img_vipno_vip1-1.png
create mode 100644 static/imge/flashsale.png
create mode 100644 static/imge/specials.png
create mode 100644 static/imge/specialss.png
create mode 100644 static/logo.png
create mode 100644 static/mall/cart.png
create mode 100644 static/mall/k.png
create mode 100644 static/mall/s.png
create mode 100644 static/positioning.png
create mode 100644 static/screen.png
create mode 100644 static/success.png
create mode 100644 static/towcontentitemtow_towposabslt.png
create mode 100644 static/uni.ttf
create mode 100644 static/ye.png
create mode 100644 store/index.js
create mode 100644 uni.scss
create mode 100644 uni_modules/d-swiper-type/changelog.md
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/d-swiper-type.vue
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/home/hometype.vue
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/home/readme.md
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/static/icon_img/bing.png
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/static/icon_img/del.png
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/static/icon_img/del2.png
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/static/icon_img/mangguo.png
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/static/icon_img/search.png
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/static/icon_img/xigua.png
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/static/icon_img/yan_close.png
create mode 100644 uni_modules/d-swiper-type/components/d-swiper-type/pages/static/icon_img/yan_open.png
create mode 100644 uni_modules/d-swiper-type/package.json
create mode 100644 uni_modules/d-swiper-type/readme.md
create mode 100644 uni_modules/uni-icons/changelog.md
create mode 100644 uni_modules/uni-icons/components/uni-icons/icons.js
create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue
create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css
create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf
create mode 100644 uni_modules/uni-icons/package.json
create mode 100644 uni_modules/uni-icons/readme.md
create mode 100644 uni_modules/uni-scss/changelog.md
create mode 100644 uni_modules/uni-scss/index.scss
create mode 100644 uni_modules/uni-scss/package.json
create mode 100644 uni_modules/uni-scss/readme.md
create mode 100644 uni_modules/uni-scss/styles/index.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_border.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_color.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_radius.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_space.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_styles.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_text.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_variables.scss
create mode 100644 uni_modules/uni-scss/styles/tools/functions.scss
create mode 100644 uni_modules/uni-scss/theme.scss
create mode 100644 uni_modules/uni-scss/variables.scss
create mode 100644 uni_modules/uview-ui/LICENSE
create mode 100644 uni_modules/uview-ui/README.md
create mode 100644 uni_modules/uview-ui/changelog.md
create mode 100644 uni_modules/uview-ui/components/u--form/u--form.vue
create mode 100644 uni_modules/uview-ui/components/u--image/u--image.vue
create mode 100644 uni_modules/uview-ui/components/u--input/u--input.vue
create mode 100644 uni_modules/uview-ui/components/u--text/u--text.vue
create mode 100644 uni_modules/uview-ui/components/u--textarea/u--textarea.vue
create mode 100644 uni_modules/uview-ui/components/u-action-sheet/props.js
create mode 100644 uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue
create mode 100644 uni_modules/uview-ui/components/u-album/props.js
create mode 100644 uni_modules/uview-ui/components/u-album/u-album.vue
create mode 100644 uni_modules/uview-ui/components/u-alert/props.js
create mode 100644 uni_modules/uview-ui/components/u-alert/u-alert.vue
create mode 100644 uni_modules/uview-ui/components/u-avatar-group/props.js
create mode 100644 uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue
create mode 100644 uni_modules/uview-ui/components/u-avatar/props.js
create mode 100644 uni_modules/uview-ui/components/u-avatar/u-avatar.vue
create mode 100644 uni_modules/uview-ui/components/u-back-top/props.js
create mode 100644 uni_modules/uview-ui/components/u-back-top/u-back-top.vue
create mode 100644 uni_modules/uview-ui/components/u-badge/props.js
create mode 100644 uni_modules/uview-ui/components/u-badge/u-badge.vue
create mode 100644 uni_modules/uview-ui/components/u-button/nvue.scss
create mode 100644 uni_modules/uview-ui/components/u-button/props.js
create mode 100644 uni_modules/uview-ui/components/u-button/u-button.vue
create mode 100644 uni_modules/uview-ui/components/u-button/vue.scss
create mode 100644 uni_modules/uview-ui/components/u-calendar/header.vue
create mode 100644 uni_modules/uview-ui/components/u-calendar/month.vue
create mode 100644 uni_modules/uview-ui/components/u-calendar/props.js
create mode 100644 uni_modules/uview-ui/components/u-calendar/u-calendar.vue
create mode 100644 uni_modules/uview-ui/components/u-calendar/util.js
create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/props.js
create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue
create mode 100644 uni_modules/uview-ui/components/u-cell-group/props.js
create mode 100644 uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue
create mode 100644 uni_modules/uview-ui/components/u-cell/props.js
create mode 100644 uni_modules/uview-ui/components/u-cell/u-cell.vue
create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/props.js
create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue
create mode 100644 uni_modules/uview-ui/components/u-checkbox/props.js
create mode 100644 uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue
create mode 100644 uni_modules/uview-ui/components/u-circle-progress/props.js
create mode 100644 uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue
create mode 100644 uni_modules/uview-ui/components/u-code-input/props.js
create mode 100644 uni_modules/uview-ui/components/u-code-input/u-code-input.vue
create mode 100644 uni_modules/uview-ui/components/u-code/props.js
create mode 100644 uni_modules/uview-ui/components/u-code/u-code.vue
create mode 100644 uni_modules/uview-ui/components/u-col/props.js
create mode 100644 uni_modules/uview-ui/components/u-col/u-col.vue
create mode 100644 uni_modules/uview-ui/components/u-collapse-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue
create mode 100644 uni_modules/uview-ui/components/u-collapse/props.js
create mode 100644 uni_modules/uview-ui/components/u-collapse/u-collapse.vue
create mode 100644 uni_modules/uview-ui/components/u-column-notice/props.js
create mode 100644 uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue
create mode 100644 uni_modules/uview-ui/components/u-count-down/props.js
create mode 100644 uni_modules/uview-ui/components/u-count-down/u-count-down.vue
create mode 100644 uni_modules/uview-ui/components/u-count-down/utils.js
create mode 100644 uni_modules/uview-ui/components/u-count-to/props.js
create mode 100644 uni_modules/uview-ui/components/u-count-to/u-count-to.vue
create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/props.js
create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue
create mode 100644 uni_modules/uview-ui/components/u-divider/props.js
create mode 100644 uni_modules/uview-ui/components/u-divider/u-divider.vue
create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue
create mode 100644 uni_modules/uview-ui/components/u-dropdown/props.js
create mode 100644 uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue
create mode 100644 uni_modules/uview-ui/components/u-empty/props.js
create mode 100644 uni_modules/uview-ui/components/u-empty/u-empty.vue
create mode 100644 uni_modules/uview-ui/components/u-form-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-form-item/u-form-item.vue
create mode 100644 uni_modules/uview-ui/components/u-form/props.js
create mode 100644 uni_modules/uview-ui/components/u-form/u-form.vue
create mode 100644 uni_modules/uview-ui/components/u-gap/props.js
create mode 100644 uni_modules/uview-ui/components/u-gap/u-gap.vue
create mode 100644 uni_modules/uview-ui/components/u-grid-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue
create mode 100644 uni_modules/uview-ui/components/u-grid/props.js
create mode 100644 uni_modules/uview-ui/components/u-grid/u-grid.vue
create mode 100644 uni_modules/uview-ui/components/u-icon/icons.js
create mode 100644 uni_modules/uview-ui/components/u-icon/props.js
create mode 100644 uni_modules/uview-ui/components/u-icon/u-icon.vue
create mode 100644 uni_modules/uview-ui/components/u-image/props.js
create mode 100644 uni_modules/uview-ui/components/u-image/u-image.vue
create mode 100644 uni_modules/uview-ui/components/u-index-anchor/props.js
create mode 100644 uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue
create mode 100644 uni_modules/uview-ui/components/u-index-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-index-item/u-index-item.vue
create mode 100644 uni_modules/uview-ui/components/u-index-list/props.js
create mode 100644 uni_modules/uview-ui/components/u-index-list/u-index-list.vue
create mode 100644 uni_modules/uview-ui/components/u-input/props.js
create mode 100644 uni_modules/uview-ui/components/u-input/u-input.vue
create mode 100644 uni_modules/uview-ui/components/u-keyboard/props.js
create mode 100644 uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue
create mode 100644 uni_modules/uview-ui/components/u-line-progress/props.js
create mode 100644 uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue
create mode 100644 uni_modules/uview-ui/components/u-line/props.js
create mode 100644 uni_modules/uview-ui/components/u-line/u-line.vue
create mode 100644 uni_modules/uview-ui/components/u-link/props.js
create mode 100644 uni_modules/uview-ui/components/u-link/u-link.vue
create mode 100644 uni_modules/uview-ui/components/u-list-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-list-item/u-list-item.vue
create mode 100644 uni_modules/uview-ui/components/u-list/props.js
create mode 100644 uni_modules/uview-ui/components/u-list/u-list.vue
create mode 100644 uni_modules/uview-ui/components/u-loading-icon/props.js
create mode 100644 uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue
create mode 100644 uni_modules/uview-ui/components/u-loading-page/props.js
create mode 100644 uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue
create mode 100644 uni_modules/uview-ui/components/u-loadmore/props.js
create mode 100644 uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue
create mode 100644 uni_modules/uview-ui/components/u-modal/props.js
create mode 100644 uni_modules/uview-ui/components/u-modal/u-modal.vue
create mode 100644 uni_modules/uview-ui/components/u-navbar/props.js
create mode 100644 uni_modules/uview-ui/components/u-navbar/u-navbar.vue
create mode 100644 uni_modules/uview-ui/components/u-no-network/props.js
create mode 100644 uni_modules/uview-ui/components/u-no-network/u-no-network.vue
create mode 100644 uni_modules/uview-ui/components/u-notice-bar/props.js
create mode 100644 uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue
create mode 100644 uni_modules/uview-ui/components/u-notify/props.js
create mode 100644 uni_modules/uview-ui/components/u-notify/u-notify.vue
create mode 100644 uni_modules/uview-ui/components/u-number-box/props.js
create mode 100644 uni_modules/uview-ui/components/u-number-box/u-number-box.vue
create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/props.js
create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue
create mode 100644 uni_modules/uview-ui/components/u-overlay/props.js
create mode 100644 uni_modules/uview-ui/components/u-overlay/u-overlay.vue
create mode 100644 uni_modules/uview-ui/components/u-parse/node/node.vue
create mode 100644 uni_modules/uview-ui/components/u-parse/parser.js
create mode 100644 uni_modules/uview-ui/components/u-parse/props.js
create mode 100644 uni_modules/uview-ui/components/u-parse/u-parse.vue
create mode 100644 uni_modules/uview-ui/components/u-picker-column/props.js
create mode 100644 uni_modules/uview-ui/components/u-picker-column/u-picker-column.vue
create mode 100644 uni_modules/uview-ui/components/u-picker/props.js
create mode 100644 uni_modules/uview-ui/components/u-picker/u-picker.vue
create mode 100644 uni_modules/uview-ui/components/u-popup/props.js
create mode 100644 uni_modules/uview-ui/components/u-popup/u-popup.vue
create mode 100644 uni_modules/uview-ui/components/u-radio-group/props.js
create mode 100644 uni_modules/uview-ui/components/u-radio-group/u-radio-group.vue
create mode 100644 uni_modules/uview-ui/components/u-radio/props.js
create mode 100644 uni_modules/uview-ui/components/u-radio/u-radio.vue
create mode 100644 uni_modules/uview-ui/components/u-rate/props.js
create mode 100644 uni_modules/uview-ui/components/u-rate/u-rate.vue
create mode 100644 uni_modules/uview-ui/components/u-read-more/props.js
create mode 100644 uni_modules/uview-ui/components/u-read-more/u-read-more.vue
create mode 100644 uni_modules/uview-ui/components/u-row-notice/props.js
create mode 100644 uni_modules/uview-ui/components/u-row-notice/u-row-notice.vue
create mode 100644 uni_modules/uview-ui/components/u-row/props.js
create mode 100644 uni_modules/uview-ui/components/u-row/u-row.vue
create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/props.js
create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.vue
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/nvue.js
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/other.js
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/props.js
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/scrollWxs.wxs
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/u-scroll-list.vue
create mode 100644 uni_modules/uview-ui/components/u-search/props.js
create mode 100644 uni_modules/uview-ui/components/u-search/u-search.vue
create mode 100644 uni_modules/uview-ui/components/u-skeleton/props.js
create mode 100644 uni_modules/uview-ui/components/u-skeleton/u-skeleton.vue
create mode 100644 uni_modules/uview-ui/components/u-slider/mpother.js
create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.js
create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.wxs
create mode 100644 uni_modules/uview-ui/components/u-slider/nvue - 副本.js
create mode 100644 uni_modules/uview-ui/components/u-slider/nvue.js
create mode 100644 uni_modules/uview-ui/components/u-slider/props.js
create mode 100644 uni_modules/uview-ui/components/u-slider/u-slider.vue
create mode 100644 uni_modules/uview-ui/components/u-status-bar/props.js
create mode 100644 uni_modules/uview-ui/components/u-status-bar/u-status-bar.vue
create mode 100644 uni_modules/uview-ui/components/u-steps-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-steps-item/u-steps-item.vue
create mode 100644 uni_modules/uview-ui/components/u-steps/props.js
create mode 100644 uni_modules/uview-ui/components/u-steps/u-steps.vue
create mode 100644 uni_modules/uview-ui/components/u-sticky/props.js
create mode 100644 uni_modules/uview-ui/components/u-sticky/u-sticky.vue
create mode 100644 uni_modules/uview-ui/components/u-subsection/props.js
create mode 100644 uni_modules/uview-ui/components/u-subsection/u-subsection.vue
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index - backup.wxs
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index.wxs
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue - backup.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/u-swipe-action-item.vue
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/wxs.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action/props.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue
create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/props.js
create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/u-swiper-indicator.vue
create mode 100644 uni_modules/uview-ui/components/u-swiper/props.js
create mode 100644 uni_modules/uview-ui/components/u-swiper/u-swiper.vue
create mode 100644 uni_modules/uview-ui/components/u-switch/props.js
create mode 100644 uni_modules/uview-ui/components/u-switch/u-switch.vue
create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue
create mode 100644 uni_modules/uview-ui/components/u-tabbar/props.js
create mode 100644 uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue
create mode 100644 uni_modules/uview-ui/components/u-table/props.js
create mode 100644 uni_modules/uview-ui/components/u-table/u-table.vue
create mode 100644 uni_modules/uview-ui/components/u-tabs-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-tabs-item/u-tabs-item.vue
create mode 100644 uni_modules/uview-ui/components/u-tabs/props.js
create mode 100644 uni_modules/uview-ui/components/u-tabs/u-tabs.vue
create mode 100644 uni_modules/uview-ui/components/u-tag/props.js
create mode 100644 uni_modules/uview-ui/components/u-tag/u-tag.vue
create mode 100644 uni_modules/uview-ui/components/u-td/props.js
create mode 100644 uni_modules/uview-ui/components/u-td/u-td.vue
create mode 100644 uni_modules/uview-ui/components/u-text/props.js
create mode 100644 uni_modules/uview-ui/components/u-text/u-text.vue
create mode 100644 uni_modules/uview-ui/components/u-text/value.js
create mode 100644 uni_modules/uview-ui/components/u-textarea/props.js
create mode 100644 uni_modules/uview-ui/components/u-textarea/u-textarea.vue
create mode 100644 uni_modules/uview-ui/components/u-toast/u-toast.vue
create mode 100644 uni_modules/uview-ui/components/u-toolbar/props.js
create mode 100644 uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue
create mode 100644 uni_modules/uview-ui/components/u-tooltip/clipboard.min.js
create mode 100644 uni_modules/uview-ui/components/u-tooltip/props.js
create mode 100644 uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue
create mode 100644 uni_modules/uview-ui/components/u-tr/props.js
create mode 100644 uni_modules/uview-ui/components/u-tr/u-tr.vue
create mode 100644 uni_modules/uview-ui/components/u-transition/nvue.ani-map.js
create mode 100644 uni_modules/uview-ui/components/u-transition/props.js
create mode 100644 uni_modules/uview-ui/components/u-transition/transition.js
create mode 100644 uni_modules/uview-ui/components/u-transition/u-transition.vue
create mode 100644 uni_modules/uview-ui/components/u-transition/vue.ani-style.scss
create mode 100644 uni_modules/uview-ui/components/u-upload/mixin.js
create mode 100644 uni_modules/uview-ui/components/u-upload/props.js
create mode 100644 uni_modules/uview-ui/components/u-upload/u-upload.vue
create mode 100644 uni_modules/uview-ui/components/u-upload/utils.js
create mode 100644 uni_modules/uview-ui/components/uview-ui/uview-ui.vue
create mode 100644 uni_modules/uview-ui/index.js
create mode 100644 uni_modules/uview-ui/index.scss
create mode 100644 uni_modules/uview-ui/libs/config/color.js
create mode 100644 uni_modules/uview-ui/libs/config/config.js
create mode 100644 uni_modules/uview-ui/libs/config/props.js
create mode 100644 uni_modules/uview-ui/libs/config/props/actionSheet.js
create mode 100644 uni_modules/uview-ui/libs/config/props/album.js
create mode 100644 uni_modules/uview-ui/libs/config/props/alert.js
create mode 100644 uni_modules/uview-ui/libs/config/props/avatar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/avatarGroup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/backtop.js
create mode 100644 uni_modules/uview-ui/libs/config/props/badge.js
create mode 100644 uni_modules/uview-ui/libs/config/props/button.js
create mode 100644 uni_modules/uview-ui/libs/config/props/calendar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/carKeyboard.js
create mode 100644 uni_modules/uview-ui/libs/config/props/cell.js
create mode 100644 uni_modules/uview-ui/libs/config/props/cellGroup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/checkbox.js
create mode 100644 uni_modules/uview-ui/libs/config/props/checkboxGroup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/circleProgress.js
create mode 100644 uni_modules/uview-ui/libs/config/props/code.js
create mode 100644 uni_modules/uview-ui/libs/config/props/codeInput.js
create mode 100644 uni_modules/uview-ui/libs/config/props/col.js
create mode 100644 uni_modules/uview-ui/libs/config/props/collapse.js
create mode 100644 uni_modules/uview-ui/libs/config/props/collapseItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/columnNotice.js
create mode 100644 uni_modules/uview-ui/libs/config/props/countDown.js
create mode 100644 uni_modules/uview-ui/libs/config/props/countTo.js
create mode 100644 uni_modules/uview-ui/libs/config/props/datetimePicker.js
create mode 100644 uni_modules/uview-ui/libs/config/props/divider.js
create mode 100644 uni_modules/uview-ui/libs/config/props/empty.js
create mode 100644 uni_modules/uview-ui/libs/config/props/form.js
create mode 100644 uni_modules/uview-ui/libs/config/props/formItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/gap.js
create mode 100644 uni_modules/uview-ui/libs/config/props/grid.js
create mode 100644 uni_modules/uview-ui/libs/config/props/gridItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/icon.js
create mode 100644 uni_modules/uview-ui/libs/config/props/image.js
create mode 100644 uni_modules/uview-ui/libs/config/props/indexAnchor.js
create mode 100644 uni_modules/uview-ui/libs/config/props/indexList.js
create mode 100644 uni_modules/uview-ui/libs/config/props/input.js
create mode 100644 uni_modules/uview-ui/libs/config/props/keyboard.js
create mode 100644 uni_modules/uview-ui/libs/config/props/line.js
create mode 100644 uni_modules/uview-ui/libs/config/props/lineProgress.js
create mode 100644 uni_modules/uview-ui/libs/config/props/link.js
create mode 100644 uni_modules/uview-ui/libs/config/props/list.js
create mode 100644 uni_modules/uview-ui/libs/config/props/listItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/loadingIcon.js
create mode 100644 uni_modules/uview-ui/libs/config/props/loadingPage.js
create mode 100644 uni_modules/uview-ui/libs/config/props/loadmore.js
create mode 100644 uni_modules/uview-ui/libs/config/props/modal.js
create mode 100644 uni_modules/uview-ui/libs/config/props/navbar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/noNetwork.js
create mode 100644 uni_modules/uview-ui/libs/config/props/noticeBar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/notify.js
create mode 100644 uni_modules/uview-ui/libs/config/props/numberBox.js
create mode 100644 uni_modules/uview-ui/libs/config/props/numberKeyboard.js
create mode 100644 uni_modules/uview-ui/libs/config/props/overlay.js
create mode 100644 uni_modules/uview-ui/libs/config/props/parse.js
create mode 100644 uni_modules/uview-ui/libs/config/props/picker.js
create mode 100644 uni_modules/uview-ui/libs/config/props/popup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/radio.js
create mode 100644 uni_modules/uview-ui/libs/config/props/radioGroup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/rate.js
create mode 100644 uni_modules/uview-ui/libs/config/props/readMore.js
create mode 100644 uni_modules/uview-ui/libs/config/props/row.js
create mode 100644 uni_modules/uview-ui/libs/config/props/rowNotice.js
create mode 100644 uni_modules/uview-ui/libs/config/props/scrollList.js
create mode 100644 uni_modules/uview-ui/libs/config/props/search.js
create mode 100644 uni_modules/uview-ui/libs/config/props/section.js
create mode 100644 uni_modules/uview-ui/libs/config/props/skeleton.js
create mode 100644 uni_modules/uview-ui/libs/config/props/slider.js
create mode 100644 uni_modules/uview-ui/libs/config/props/statusBar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/steps.js
create mode 100644 uni_modules/uview-ui/libs/config/props/stepsItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/sticky.js
create mode 100644 uni_modules/uview-ui/libs/config/props/subsection.js
create mode 100644 uni_modules/uview-ui/libs/config/props/swipeAction.js
create mode 100644 uni_modules/uview-ui/libs/config/props/swipeActionItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/swiper.js
create mode 100644 uni_modules/uview-ui/libs/config/props/swipterIndicator.js
create mode 100644 uni_modules/uview-ui/libs/config/props/switch.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tabbar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tabbarItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tabs.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tag.js
create mode 100644 uni_modules/uview-ui/libs/config/props/text.js
create mode 100644 uni_modules/uview-ui/libs/config/props/textarea.js
create mode 100644 uni_modules/uview-ui/libs/config/props/toast.js
create mode 100644 uni_modules/uview-ui/libs/config/props/toolbar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tooltip.js
create mode 100644 uni_modules/uview-ui/libs/config/props/transition.js
create mode 100644 uni_modules/uview-ui/libs/config/props/upload.js
create mode 100644 uni_modules/uview-ui/libs/config/zIndex.js
create mode 100644 uni_modules/uview-ui/libs/css/color.scss
create mode 100644 uni_modules/uview-ui/libs/css/common.scss
create mode 100644 uni_modules/uview-ui/libs/css/components.scss
create mode 100644 uni_modules/uview-ui/libs/css/flex.scss
create mode 100644 uni_modules/uview-ui/libs/css/h5.scss
create mode 100644 uni_modules/uview-ui/libs/css/mixin.scss
create mode 100644 uni_modules/uview-ui/libs/css/mp.scss
create mode 100644 uni_modules/uview-ui/libs/css/nvue.scss
create mode 100644 uni_modules/uview-ui/libs/css/vue.scss
create mode 100644 uni_modules/uview-ui/libs/function/colorGradient.js
create mode 100644 uni_modules/uview-ui/libs/function/debounce.js
create mode 100644 uni_modules/uview-ui/libs/function/digit.js
create mode 100644 uni_modules/uview-ui/libs/function/index.js
create mode 100644 uni_modules/uview-ui/libs/function/platform.js
create mode 100644 uni_modules/uview-ui/libs/function/test.js
create mode 100644 uni_modules/uview-ui/libs/function/throttle.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/adapters/index.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/Request.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/defaults.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/settle.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/index.d.ts
create mode 100644 uni_modules/uview-ui/libs/luch-request/index.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/utils.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/utils/clone.js
create mode 100644 uni_modules/uview-ui/libs/mixin/button.js
create mode 100644 uni_modules/uview-ui/libs/mixin/mixin.js
create mode 100644 uni_modules/uview-ui/libs/mixin/mpMixin.js
create mode 100644 uni_modules/uview-ui/libs/mixin/mpShare.js
create mode 100644 uni_modules/uview-ui/libs/mixin/openType.js
create mode 100644 uni_modules/uview-ui/libs/mixin/style.js
create mode 100644 uni_modules/uview-ui/libs/mixin/touch.js
create mode 100644 uni_modules/uview-ui/libs/util/async-validator.js
create mode 100644 uni_modules/uview-ui/libs/util/calendar.js
create mode 100644 uni_modules/uview-ui/libs/util/dayjs.js
create mode 100644 uni_modules/uview-ui/libs/util/emitter.js
create mode 100644 uni_modules/uview-ui/libs/util/route.js
create mode 100644 uni_modules/uview-ui/package.json
create mode 100644 uni_modules/uview-ui/theme.scss
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3561815
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+/node_modules
+.env
+.env.backup
+.phpunit.result.cache
+docker-compose.override.yml
+npm-debug.log
+yarn-error.log
+/unpackage
\ No newline at end of file
diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json
new file mode 100644
index 0000000..4016dc0
--- /dev/null
+++ b/.hbuilderx/launch.json
@@ -0,0 +1,23 @@
+{
+ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+ // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+ "version" : "0.0",
+ "configurations" : [
+ {
+ "app-plus" : {
+ "launchtype" : "local"
+ },
+ "default" : {
+ "launchtype" : "local"
+ },
+ "mp-weixin" : {
+ "launchtype" : "local"
+ },
+ "type" : "uniCloud"
+ },
+ {
+ "playground" : "standard",
+ "type" : "uni-app:app-ios"
+ }
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..684d827
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,6 @@
+{
+ "files.associations": {
+ "*.ttml": "xml",
+ "*.ttss": "css"
+ }
+}
\ No newline at end of file
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..2f04d0f
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,57 @@
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 1d2815c..9029c4a 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,109 @@
-#czg_zysh_ointment_weapp
+# project
+
+#### 介绍
+{**以下是 Gitee 平台说明,您可以替换此简介**
+Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
+无论是个人1、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
+
+## 目录说明
+```
+ 站点根目录
+ ├─common //公共文件
+ ├─api //api接口定义
+ ├─css //公共css定义
+ └─js //公共js定义
+ ├─components //uniapp组件目录
+ ├─framework //自定义js框架
+ ├─0-conf.js //项目请求地址配置
+ ├─1-utils.js //工具js
+ ├─2-url.js //获取当前页面路由地址
+ ├─3-pro.js //uni系统相关api
+ ├─4-queue.js //队列
+ ├─5-pro-ext.js //页面跳转相关方法
+ ├─6-event.js //事件监听
+ ├─7-qiniu.js //七牛云js
+ ├─8-cache.js //缓存方法
+ ├─9-modal.js //AB页面传参
+ ├─11-api.js //uni.request()方法封装
+ ├─13-mixin //页面混入方法
+ ├─14-device.js //调用uni系统震动
+ ├─bootstrap.js //js入口文件
+ ├─bridge.js //与原生交互
+ ├─md5.js //md5加密
+ ├─sign.js //签名
+ ├─vConsole.js //控制台
+ ├─pages //应用页面
+ ├─home //个人中心
+ ├─index //首页
+ ├─news //新闻
+ ├─public //公共页面(登录注册)
+ ├─shop //商城页面
+ ├─type //分类页面
+ ├─web //项目外链
+ ├─static //图片资源
+ ├─store //vuex状态管理
+ ├─unpackage //编译后目录
+ ├─uview-ui //uview-ui插件依赖
+ ├─app.vue //uni-app配置文件
+ ├─main.js //vue入口js
+ ├─manifest.json //uniapp项目配置文件
+ ├─pages.json //页面路由配置页
+ ├─uni.scss //uniapp内置的常用样式变量
+```
+#### 项目说明
+1. 项目基于Vue-uniApp,使用uview框架。
+
+#### 安装教程
+
+1. 下载安装:「HBuildX」
+2. 将项目拖进【HBuildX】- 运行 - 运行到浏览器 - 完成
+
+
+#### 使用说明
+1. ui框架使用uviewui https://www.uviewui.com/js/intro.html
+2. 请求接口统一定义在common/index.js (使用方式uni.ajax(option)
+3. 状态管理 使用vuex模块(module)
+4. css布局采用flex布局(详见common/css/flex.css)
+5. 接口域名配置(framework/0-conf.js)
+const debug = true//true是本地代理配置false服务器环境
+const proxyApi = "/api/"
+let baseUrl="";
+uni.is_online = false; //false 为测试服 true正式服
+if (uni.is_online) {
+ //正式
+ baseUrl = debug ? proxyApi : 'http://mc.test.hmsc000111.com/'
+} else {
+ // 测试
+ baseUrl = debug ? proxyApi : 'http://mc.test.hmsc000111.com/'
+}
+#### 开发规范
+0. 写注释要注意:写明代码的作用,重要的地方写注释
+1. js使用ES6语法
+2. 页面布局flex布局
+3. 减少页面代码体积,复杂,重复性代码应提取封装成组件引入
+4. 公共js函数统一封装在common/js目录下
+5. css统一使用scss
+6. 加载外链使用 page/web/index.vue
+7. 公共组件封装在根目录下 components 命名方式(ixxxxxx)
+8. 某个页面独享组件(封装在当前页面所在目录下components)
+9. 图片:除非特别要求图片必须高质量的显示,否则都应该进行对应的压缩处理
+10. 避免过多的if else判断
+
+
+
+#### 参与贡献
+
+1. Fork 本仓库
+2. 新建 Feat_xxx 分支
+3. 提交代码
+4. 新建 Pull Request
+
+
+#### 特技
+
+1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
+2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
+3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
+4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
+5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
+6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
\ No newline at end of file
diff --git a/common/css/flex.css b/common/css/flex.css
new file mode 100644
index 0000000..c3b19b8
--- /dev/null
+++ b/common/css/flex.css
@@ -0,0 +1,48 @@
+.flex-center{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ }
+ .flex-start{
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ flex-wrap: wrap;
+ }
+ .flex-end{
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ flex-wrap: wrap;
+ }
+ .flex-colum{
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ }
+ .flex-colum-start{
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: flex-start;
+ }
+ .flex-colum-end{
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: flex-end;
+ }
+ .flex-between{
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-wrap: wrap;
+ }
+ .flex-around{
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ flex-wrap: wrap;
+ }
\ No newline at end of file
diff --git a/common/css/theme.scss b/common/css/theme.scss
new file mode 100644
index 0000000..4f4b0fc
--- /dev/null
+++ b/common/css/theme.scss
@@ -0,0 +1,15 @@
+/* 普通字体颜色 */
+$text-color: var(--text-color);
+/* 按钮字体颜色 */
+$text-color-reverse: var(--text-color-reverse);
+/* tab字体颜色 */
+$text-color-tab: var(--text-color-tab);
+
+/* 普通背景颜色 */
+$bg-color: var(--bg-color);
+
+/* 普通阴影颜色 */
+$bg-shadow: var(--bg-shadow);
+
+/* 主题颜色 */
+$theme-color: var(--theme-color);
diff --git a/common/css/uni.scss b/common/css/uni.scss
new file mode 100644
index 0000000..1568e3f
--- /dev/null
+++ b/common/css/uni.scss
@@ -0,0 +1,1534 @@
+@font-face {
+ font-family: uniicons;
+ font-weight: normal;
+ font-style: normal;
+ src: url('~@/static/uni.ttf') format('truetype');
+}
+
+/* #ifdef H5 */
+.fix-left-window {
+ padding-left: var(--window-left);
+}
+.pc-hide {
+ display: none !important;
+}
+/* #endif */
+
+/*通用 */
+
+/* view{
+ font-size:28rpx;
+ line-height:1.8;
+} */
+progress, checkbox-group{
+ width: 100%;
+}
+form {
+ width: 100%;
+}
+.uni-flex {
+ display: flex;
+ flex-direction: row;
+}
+.uni-flex-item {
+ flex: 1;
+}
+.uni-row {
+ flex-direction: row;
+}
+.uni-column {
+ flex-direction: column;
+}
+.uni-link{
+ color:#576B95;
+ font-size:26rpx;
+}
+.uni-center{
+ text-align:center;
+}
+.uni-inline-item{
+ display: flex;
+ flex-direction: row;
+ align-items:center;
+}
+.uni-inline-item text{
+ margin-right: 20rpx;
+}
+.uni-inline-item text:last-child{
+ margin-right: 0rpx;
+ margin-left: 20rpx;
+}
+
+/* page */
+.uni-page-head{
+ padding:35rpx;
+ text-align: center;
+}
+.uni-page-head-title {
+ display: inline-block;
+ padding: 0 40rpx;
+ font-size: 30rpx;
+ height: 88rpx;
+ line-height: 88rpx;
+ color: #BEBEBE;
+ box-sizing: border-box;
+ border-bottom: 2rpx solid #D8D8D8;
+}
+.uni-page-body {
+ width: 100%;
+ padding:0 100px;
+ flex-grow: 1;
+ /* overflow-x: hidden; */
+}
+.uni-padding-wrap{
+ /* width:690rpx; */
+ padding:0 30rpx;
+}
+.uni-word {
+ text-align: center;
+ padding:200rpx 100rpx;
+}
+.uni-title {
+ font-size:30rpx;
+ font-weight:500;
+ padding:20rpx 0;
+ line-height:1.5;
+}
+.uni-text{
+ font-size:28rpx;
+}
+.uni-title text{
+ font-size:24rpx;
+ color:#888;
+}
+
+.uni-text-gray{
+ color: #ccc;
+}
+.uni-text-small {
+ font-size:24rpx;
+}
+.uni-common-mb{
+ margin-bottom:30rpx;
+}
+.uni-common-pb{
+ padding-bottom:30rpx;
+}
+.uni-common-pl{
+ padding-left:30rpx;
+}
+.uni-common-mt{
+ margin-top:30rpx;
+}
+/* 背景色 */
+.uni-bg-red{
+ background:#F76260; color:#FFF;
+}
+.uni-bg-green{
+ background:#09BB07; color:#FFF;
+}
+.uni-bg-blue{
+ background:#007AFF; color:#FFF;
+}
+/* 标题 */
+.uni-h1 {font-size: 80rpx; font-weight:700;}
+.uni-h2 {font-size: 60rpx; font-weight:700;}
+.uni-h3 {font-size: 48rpx; font-weight:700;}
+.uni-h4 {font-size: 36rpx; font-weight:700;}
+.uni-h5 {font-size: 28rpx; color: #8f8f94;}
+.uni-h6 {font-size: 24rpx; color: #8f8f94;}
+.uni-bold{font-weight:bold;}
+
+/* 文本溢出隐藏 */
+.uni-ellipsis {overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
+
+/* 竖向百分百按钮 */
+.uni-btn-v{
+ padding:10rpx 0;
+}
+.uni-btn-v button{margin:20rpx 0;}
+
+/* 表单 */
+.uni-form-item{
+ display:flex;
+ width:100%;
+ padding:10rpx 0;
+}
+.uni-form-item .title{
+ padding:10rpx 25rpx;
+}
+.uni-label {
+ width: 210rpx;
+ word-wrap: break-word;
+ word-break: break-all;
+ text-indent:20rpx;
+}
+.uni-input {
+ height: 50rpx;
+ padding: 15rpx 25rpx;
+ line-height:50rpx;
+ font-size:28rpx;
+ background:#FFF;
+ flex: 1;
+}
+radio-group, checkbox-group{
+ width:100%;
+}
+radio-group label, checkbox-group label{
+ padding-right:20rpx;
+}
+.uni-form-item .with-fun{
+ display:flex;
+ flex-wrap:nowrap;
+ background:#FFFFFF;
+}
+.uni-form-item .with-fun .uni-icon{
+ width:40px;
+ height:80rpx;
+ line-height:80rpx;
+ flex-shrink:0;
+}
+
+/* loadmore */
+.uni-loadmore{
+ height:80rpx;
+ line-height:80rpx;
+ text-align:center;
+ padding-bottom:30rpx;
+}
+/*数字角标*/
+.uni-badge,
+.uni-badge-default {
+ font-family: 'Helvetica Neue', Helvetica, sans-serif;
+ font-size: 12px;
+ line-height: 1;
+ display: inline-block;
+ padding: 3px 6px;
+ color: #333;
+ border-radius: 100px;
+ background-color: rgba(0, 0, 0, .15);
+}
+.uni-badge.uni-badge-inverted {
+ padding: 0 5px 0 0;
+ color: #929292;
+ background-color: transparent
+}
+.uni-badge-primary {
+ color: #fff;
+ background-color: #007aff
+}
+.uni-badge-blue.uni-badge-inverted,
+.uni-badge-primary.uni-badge-inverted {
+ color: #007aff;
+ background-color: transparent
+}
+.uni-badge-green,
+.uni-badge-success {
+ color: #fff;
+ background-color: #4cd964;
+}
+.uni-badge-green.uni-badge-inverted,
+.uni-badge-success.uni-badge-inverted {
+ color: #4cd964;
+ background-color: transparent
+}
+.uni-badge-warning,
+.uni-badge-yellow {
+ color: #fff;
+ background-color: #f0ad4e
+}
+.uni-badge-warning.uni-badge-inverted,
+.uni-badge-yellow.uni-badge-inverted {
+ color: #f0ad4e;
+ background-color: transparent
+}
+.uni-badge-danger,
+.uni-badge-red {
+ color: #fff;
+ background-color: #dd524d
+}
+.uni-badge-danger.uni-badge-inverted,
+.uni-badge-red.uni-badge-inverted {
+ color: #dd524d;
+ background-color: transparent
+}
+.uni-badge-purple,
+.uni-badge-royal {
+ color: #fff;
+ background-color: #8a6de9
+}
+.uni-badge-purple.uni-badge-inverted,
+.uni-badge-royal.uni-badge-inverted {
+ color: #8a6de9;
+ background-color: transparent
+}
+
+/*折叠面板 */
+.uni-collapse-content {
+ height: 0;
+ width: 100%;
+ overflow: hidden;
+}
+.uni-collapse-content.uni-active {
+ height: auto;
+}
+
+/*卡片视图 */
+.uni-card {
+ background: #fff;
+ border-radius: 8rpx;
+ margin:20rpx 0;
+ position: relative;
+ box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, .3);
+}
+.uni-card-content {
+ font-size: 30rpx;
+}
+.uni-card-content.image-view{
+ width: 100%;
+ margin: 0;
+}
+.uni-card-content-inner {
+ position: relative;
+ padding: 30rpx;
+}
+.uni-card-footer,
+.uni-card-header {
+ position: relative;
+ display: flex;
+ min-height: 50rpx;
+ padding: 20rpx 30rpx;
+ justify-content: space-between;
+ align-items: center;
+}
+.uni-card-header {
+ font-size: 36rpx;
+}
+.uni-card-footer {
+ color: #6d6d72;
+}
+.uni-card-footer:before,
+.uni-card-header:after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+.uni-card-header:after {
+ top: auto;
+ bottom: 0;
+}
+.uni-card-media {
+ justify-content: flex-start;
+}
+.uni-card-media-logo {
+ height: 84rpx;
+ width: 84rpx;
+ margin-right: 20rpx;
+}
+.uni-card-media-body {
+ height: 84rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+}
+.uni-card-media-text-top {
+ line-height: 36rpx;
+ font-size: 34rpx;
+}
+.uni-card-media-text-bottom {
+ line-height: 30rpx;
+ font-size: 28rpx;
+ color: #8f8f94;
+}
+.uni-card-link {
+ color: #007AFF;
+}
+
+/* 列表 */
+.uni-list {
+ background-color: #FFFFFF;
+ position: relative;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+}
+.uni-list:after {
+ position: absolute;
+ z-index: 10;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+.uni-list::before {
+ position: absolute;
+ z-index: 10;
+ right: 0;
+ top: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+.uni-list-cell {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+}
+.uni-list-cell-hover {
+ background-color: #eee;
+}
+.uni-list-cell-pd {
+ padding: 22rpx 30rpx;
+}
+.uni-list-cell-left {
+ white-space: nowrap;
+ font-size:28rpx;
+ padding: 0 30rpx;
+}
+.uni-list-cell-db,
+.uni-list-cell-right {
+ flex: 1;
+}
+.uni-list-cell::after {
+ position: absolute;
+ z-index: 3;
+ right: 0;
+ bottom: 0;
+ left: 30rpx;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+.uni-list .uni-list-cell:last-child::after {
+ height: 0rpx;
+}
+.uni-list-cell-last.uni-list-cell::after {
+ height: 0rpx;
+}
+.uni-list-cell-divider {
+ position: relative;
+ display: flex;
+ color: #999;
+ background-color: #f7f7f7;
+ padding:15rpx 20rpx;
+}
+.uni-list-cell-divider::before {
+ position: absolute;
+ right: 0;
+ top: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+.uni-list-cell-divider::after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0rpx;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+.uni-list-cell-navigate {
+ font-size:30rpx;
+ padding: 22rpx 30rpx;
+ line-height: 48rpx;
+ position: relative;
+ display: flex;
+ box-sizing: border-box;
+ width: 100%;
+ flex: 1;
+ justify-content: space-between;
+ align-items: center;
+}
+.uni-list-cell-navigate {
+ padding-right: 36rpx;
+}
+.uni-navigate-badge {
+ padding-right: 50rpx;
+}
+.uni-list-cell-navigate.uni-navigate-right:after {
+ font-family: uniicons;
+ content: '\e583';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+.uni-list-cell-navigate.uni-navigate-bottom:after {
+ font-family: uniicons;
+ content: '\e581';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+.uni-list-cell-navigate.uni-navigate-bottom.uni-active::after {
+ font-family: uniicons;
+ content: '\e580';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+.uni-collapse.uni-list-cell {
+ flex-direction: column;
+}
+.uni-list-cell-navigate.uni-active {
+ background: #eee;
+}
+.uni-list.uni-collapse {
+ box-sizing: border-box;
+ height: 0;
+ overflow: hidden;
+}
+.uni-collapse .uni-list-cell {
+ padding-left: 20rpx;
+}
+.uni-collapse .uni-list-cell::after {
+ left: 52rpx;
+}
+.uni-list.uni-active {
+ height: auto;
+}
+
+/* 三行列表 */
+.uni-triplex-row {
+ display: flex;
+ flex: 1;
+ width: 100%;
+ box-sizing: border-box;
+ flex-direction: row;
+ padding: 22rpx 30rpx;
+}
+.uni-triplex-right,
+.uni-triplex-left {
+ display: flex;
+ flex-direction: column;
+}
+.uni-triplex-left {
+ width: 84%;
+}
+.uni-triplex-left .uni-title{
+ padding:8rpx 0;
+}
+.uni-triplex-left .uni-text, .uni-triplex-left .uni-text-small{color:#999999;}
+.uni-triplex-right {
+ width: 16%;
+ text-align: right;
+}
+
+/* 图文列表 */
+.uni-media-list {
+ padding: 22rpx 30rpx;
+ box-sizing: border-box;
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+}
+.uni-navigate-right.uni-media-list {
+ padding-right: 74rpx;
+}
+.uni-pull-right {
+ flex-direction: row-reverse;
+}
+.uni-pull-right>.uni-media-list-logo {
+ margin-right: 0rpx;
+ margin-left: 20rpx;
+}
+.uni-media-list-logo {
+ height: 84rpx;
+ width: 84rpx;
+ margin-right: 20rpx;
+}
+.uni-media-list-logo image {
+ height: 100%;
+ width: 100%;
+}
+.uni-media-list-body {
+ height: 84rpx;
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+ overflow: hidden;
+}
+.uni-media-list-text-top {
+ width: 100%;
+ line-height: 36rpx;
+ font-size: 30rpx;
+}
+.uni-media-list-text-bottom {
+ width: 100%;
+ line-height: 30rpx;
+ font-size: 26rpx;
+ color: #8f8f94;
+}
+
+/* 九宫格 */
+.uni-grid-9 {
+ background: #f2f2f2;
+ width: 750rpx;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ border-top: 2rpx solid #eee;
+}
+.uni-grid-9-item {
+ width: 250rpx;
+ height: 200rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ border-bottom: 2rpx solid;
+ border-right: 2rpx solid;
+ border-color: #eee;
+ box-sizing: border-box;
+}
+.no-border-right {
+ border-right: none;
+}
+.uni-grid-9-image {
+ width: 100rpx;
+ height: 100rpx;
+}
+.uni-grid-9-text {
+ width: 250rpx;
+ line-height: 4rpx;
+ height: 40rpx;
+ text-align: center;
+ font-size: 30rpx;
+}
+.uni-grid-9-item-hover {
+ background: rgba(0, 0, 0, 0.1);
+}
+
+/* 上传 */
+.uni-uploader {
+ flex: 1;
+ flex-direction: column;
+}
+.uni-uploader-head {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+.uni-uploader-info {
+ color: #B2B2B2;
+}
+.uni-uploader-body {
+ margin-top: 16rpx;
+}
+.uni-uploader__files {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+.uni-uploader__file {
+ margin: 10rpx;
+ width: 210rpx;
+ height: 210rpx;
+}
+.uni-uploader__img {
+ display: block;
+ width: 210rpx;
+ height: 210rpx;
+}
+.uni-uploader__input-box {
+ position: relative;
+ margin:10rpx;
+ width: 208rpx;
+ height: 208rpx;
+ border: 2rpx solid #D9D9D9;
+}
+.uni-uploader__input-box:before,
+.uni-uploader__input-box:after {
+ content: " ";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ background-color: #D9D9D9;
+}
+.uni-uploader__input-box:before {
+ width: 4rpx;
+ height: 79rpx;
+}
+.uni-uploader__input-box:after {
+ width: 79rpx;
+ height: 4rpx;
+}
+.uni-uploader__input-box:active {
+ border-color: #999999;
+}
+.uni-uploader__input-box:active:before,
+.uni-uploader__input-box:active:after {
+ background-color: #999999;
+}
+.uni-uploader__input {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+}
+
+/*问题反馈*/
+.feedback-title {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20rpx;
+ color: #8f8f94;
+ font-size: 28rpx;
+}
+.feedback-star-view.feedback-title {
+ justify-content: flex-start;
+ margin: 0;
+}
+.feedback-quick {
+ position: relative;
+ padding-right: 40rpx;
+}
+.feedback-quick:after {
+ font-family: uniicons;
+ font-size: 40rpx;
+ content: '\e581';
+ position: absolute;
+ right: 0;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+.feedback-body {
+ background: #fff;
+}
+.feedback-textare {
+ height: 200rpx;
+ font-size: 34rpx;
+ line-height: 50rpx;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 20rpx 30rpx 0;
+}
+.feedback-input {
+ font-size: 34rpx;
+ height: 50rpx;
+ min-height: 50rpx;
+ padding: 15rpx 20rpx;
+ line-height: 50rpx;
+}
+.feedback-uploader {
+ padding: 22rpx 20rpx;
+}
+.feedback-star {
+ font-family: uniicons;
+ font-size: 40rpx;
+ margin-left: 6rpx;
+}
+.feedback-star-view {
+ margin-left: 20rpx;
+}
+.feedback-star:after {
+ content: '\e408';
+}
+.feedback-star.active {
+ color: #FFB400;
+}
+.feedback-star.active:after {
+ content: '\e438';
+}
+.feedback-submit {
+ background: #007AFF;
+ color: #FFFFFF;
+ margin: 20rpx;
+}
+
+/* input group */
+.uni-input-group {
+ position: relative;
+ padding: 0;
+ border: 0;
+ background-color: #fff;
+}
+
+.uni-input-group:before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-group:after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-row {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ font-size:28rpx;
+ padding: 22rpx 30rpx;
+ justify-content: space-between;
+}
+
+.uni-input-group .uni-input-row:after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 30rpx;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-row label {
+ line-height: 70rpx;
+}
+
+/* textarea */
+.uni-textarea{
+ width:100%;
+ background:#FFF;
+}
+.uni-textarea textarea{
+ width:96%;
+ padding:18rpx 2%;
+ line-height:1.6;
+ font-size:28rpx;
+ height:150rpx;
+}
+
+/* tab bar */
+.uni-tab-bar {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ overflow: hidden;
+ height: 100%;
+}
+
+.uni-tab-bar .list {
+ width: 750rpx;
+ height: 100%;
+}
+
+.uni-swiper-tab {
+ width: 100%;
+ white-space: nowrap;
+ line-height: 100rpx;
+ height: 100rpx;
+ border-bottom: 1px solid #c8c7cc;
+}
+
+.swiper-tab-list {
+ font-size: 30rpx;
+ width: 150rpx;
+ display: inline-block;
+ text-align: center;
+ color: #555;
+}
+
+.uni-tab-bar .active {
+ color: #007AFF;
+}
+
+.uni-tab-bar .swiper-box {
+ flex: 1;
+ width: 100%;
+ height: calc(100% - 100rpx);
+}
+
+.uni-tab-bar-loading{
+ padding:20rpx 0;
+}
+
+/* comment */
+.uni-comment{padding:5rpx 0; display: flex; flex-grow:1; flex-direction: column;}
+.uni-comment-list{flex-wrap:nowrap; padding:10rpx 0; margin:10rpx 0; width:100%; display: flex;}
+.uni-comment-face{width:70rpx; height:70rpx; border-radius:100%; margin-right:20rpx; flex-shrink:0; overflow:hidden;}
+.uni-comment-face image{width:100%; border-radius:100%;}
+.uni-comment-body{width:100%;}
+.uni-comment-top{line-height:1.5em; justify-content:space-between;}
+.uni-comment-top text{color:#0A98D5; font-size:24rpx;}
+.uni-comment-date{line-height:38rpx; flex-direction:row; justify-content:space-between; display:flex !important; flex-grow:1;}
+.uni-comment-date view{color:#666666; font-size:24rpx; line-height:38rpx;}
+.uni-comment-content{line-height:1.6em; font-size:28rpx; padding:8rpx 0;}
+.uni-comment-replay-btn{background:#FFF; font-size:24rpx; line-height:28rpx; padding:5rpx 20rpx; border-radius:30rpx; color:#333 !important; margin:0 10rpx;}
+
+/* swiper msg */
+.uni-swiper-msg{width:100%; padding:12rpx 0; flex-wrap:nowrap; display:flex;}
+.uni-swiper-msg-icon{width:50rpx; margin-right:20rpx;}
+.uni-swiper-msg-icon image{width:100%; flex-shrink:0;}
+.uni-swiper-msg swiper{width:100%; height:50rpx;}
+.uni-swiper-msg swiper-item{line-height:50rpx;}
+
+/* product */
+.uni-product-list {
+ display: flex;
+ width: 100%;
+ flex-wrap: wrap;
+ flex-direction: row;
+}
+
+.uni-product {
+ padding: 20rpx;
+ display: flex;
+ flex-direction: column;
+}
+
+.image-view {
+ height: 330rpx;
+ width: 330rpx;
+ margin:12rpx 0;
+}
+
+.uni-product-image {
+ height: 330rpx;
+ width: 330rpx;
+}
+
+.uni-product-title {
+ width: 300rpx;
+ word-break: break-all;
+ display: -webkit-box;
+ overflow: hidden;
+ line-height:1.5;
+ text-overflow: ellipsis;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+}
+
+.uni-product-price {
+ margin-top:10rpx;
+ font-size: 28rpx;
+ line-height:1.5;
+ position: relative;
+}
+
+.uni-product-price-original {
+ color: #e80080;
+}
+
+.uni-product-price-favour {
+ color: #888888;
+ text-decoration: line-through;
+ margin-left: 10rpx;
+}
+
+.uni-product-tip {
+ position: absolute;
+ right: 10rpx;
+ background-color: #ff3333;
+ color: #ffffff;
+ padding: 0 10rpx;
+ border-radius: 5rpx;
+}
+
+/* timeline */
+.uni-timeline {
+ margin: 35rpx 0;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ }
+
+
+ .uni-timeline-item {
+ display: flex;
+ flex-direction: row;
+ position: relative;
+ padding-bottom: 20rpx;
+ box-sizing: border-box;
+ overflow: hidden;
+
+ }
+
+ .uni-timeline-item .uni-timeline-item-keynode {
+ width: 160rpx;
+ flex-shrink: 0;
+ box-sizing: border-box;
+ padding-right: 20rpx;
+ text-align: right;
+ line-height: 65rpx;
+ }
+
+ .uni-timeline-item .uni-timeline-item-divider {
+ flex-shrink: 0;
+ position: relative;
+ width: 30rpx;
+ height: 30rpx;
+ top: 15rpx;
+ border-radius: 50%;
+ background-color: #bbb;
+ }
+
+
+
+ .uni-timeline-item-divider::before,
+ .uni-timeline-item-divider::after {
+ position: absolute;
+ left: 15rpx;
+ width: 1rpx;
+ height: 100vh;
+ content: '';
+ background: inherit;
+ }
+
+ .uni-timeline-item-divider::before {
+ bottom: 100%;
+ }
+
+ .uni-timeline-item-divider::after {
+ top: 100%;
+ }
+
+
+ .uni-timeline-last-item .uni-timeline-item-divider:after {
+ display: none;
+ }
+
+ .uni-timeline-first-item .uni-timeline-item-divider:before {
+ display: none;
+ }
+
+ .uni-timeline-item .uni-timeline-item-content {
+ padding-left: 20rpx;
+ }
+
+ .uni-timeline-last-item .bottom-border::after{
+ display: none;
+ }
+
+ .uni-timeline-item-content .datetime{
+ color: #CCCCCC;
+ }
+
+ /* 自定义节点颜色 */
+ .uni-timeline-last-item .uni-timeline-item-divider{
+ background-color: #1AAD19;
+ }
+
+
+/* uni-icon */
+
+.uni-icon {
+ font-family: uniicons;
+ font-size: 24px;
+ font-weight: normal;
+ font-style: normal;
+ line-height: 1;
+ display: inline-block;
+ text-decoration: none;
+ -webkit-font-smoothing: antialiased;
+}
+
+.uni-icon.uni-active {
+ color: #007aff;
+}
+
+.uni-icon-contact:before {
+ content: '\e100';
+}
+
+.uni-icon-person:before {
+ content: '\e101';
+}
+
+.uni-icon-personadd:before {
+ content: '\e102';
+}
+
+.uni-icon-contact-filled:before {
+ content: '\e130';
+}
+
+.uni-icon-person-filled:before {
+ content: '\e131';
+}
+
+.uni-icon-personadd-filled:before {
+ content: '\e132';
+}
+
+.uni-icon-phone:before {
+ content: '\e200';
+}
+
+.uni-icon-email:before {
+ content: '\e201';
+}
+
+.uni-icon-chatbubble:before {
+ content: '\e202';
+}
+
+.uni-icon-chatboxes:before {
+ content: '\e203';
+}
+
+.uni-icon-phone-filled:before {
+ content: '\e230';
+}
+
+.uni-icon-email-filled:before {
+ content: '\e231';
+}
+
+.uni-icon-chatbubble-filled:before {
+ content: '\e232';
+}
+
+.uni-icon-chatboxes-filled:before {
+ content: '\e233';
+}
+
+.uni-icon-weibo:before {
+ content: '\e260';
+}
+
+.uni-icon-weixin:before {
+ content: '\e261';
+}
+
+.uni-icon-pengyouquan:before {
+ content: '\e262';
+}
+
+.uni-icon-chat:before {
+ content: '\e263';
+}
+
+.uni-icon-qq:before {
+ content: '\e264';
+}
+
+.uni-icon-videocam:before {
+ content: '\e300';
+}
+
+.uni-icon-camera:before {
+ content: '\e301';
+}
+
+.uni-icon-mic:before {
+ content: '\e302';
+}
+
+.uni-icon-location:before {
+ content: '\e303';
+}
+
+.uni-icon-mic-filled:before,
+.uni-icon-speech:before {
+ content: '\e332';
+}
+
+.uni-icon-location-filled:before {
+ content: '\e333';
+}
+
+.uni-icon-micoff:before {
+ content: '\e360';
+}
+
+.uni-icon-image:before {
+ content: '\e363';
+}
+
+.uni-icon-map:before {
+ content: '\e364';
+}
+
+.uni-icon-compose:before {
+ content: '\e400';
+}
+
+.uni-icon-trash:before {
+ content: '\e401';
+}
+
+.uni-icon-upload:before {
+ content: '\e402';
+}
+
+.uni-icon-download:before {
+ content: '\e403';
+}
+
+.uni-icon-close:before {
+ content: '\e404';
+}
+
+.uni-icon-redo:before {
+ content: '\e405';
+}
+
+.uni-icon-undo:before {
+ content: '\e406';
+}
+
+.uni-icon-refresh:before {
+ content: '\e407';
+}
+
+.uni-icon-star:before {
+ content: '\e408';
+}
+
+.uni-icon-plus:before {
+ content: '\e409';
+}
+
+.uni-icon-minus:before {
+ content: '\e410';
+}
+
+.uni-icon-circle:before,
+.uni-icon-checkbox:before {
+ content: '\e411';
+}
+
+.uni-icon-close-filled:before,
+.uni-icon-clear:before {
+ content: '\e434';
+}
+
+.uni-icon-refresh-filled:before {
+ content: '\e437';
+}
+
+.uni-icon-star-filled:before {
+ content: '\e438';
+}
+
+.uni-icon-plus-filled:before {
+ content: '\e439';
+}
+
+.uni-icon-minus-filled:before {
+ content: '\e440';
+}
+
+.uni-icon-circle-filled:before {
+ content: '\e441';
+}
+
+.uni-icon-checkbox-filled:before {
+ content: '\e442';
+}
+
+.uni-icon-closeempty:before {
+ content: '\e460';
+}
+
+.uni-icon-refreshempty:before {
+ content: '\e461';
+}
+
+.uni-icon-reload:before {
+ content: '\e462';
+}
+
+.uni-icon-starhalf:before {
+ content: '\e463';
+}
+
+.uni-icon-spinner:before {
+ content: '\e464';
+}
+
+.uni-icon-spinner-cycle:before {
+ content: '\e465';
+}
+
+.uni-icon-search:before {
+ content: '\e466';
+}
+
+.uni-icon-plusempty:before {
+ content: '\e468';
+}
+
+.uni-icon-forward:before {
+ content: '\e470';
+}
+
+.uni-icon-back:before,
+.uni-icon-left-nav:before {
+ content: '\e471';
+}
+
+.uni-icon-checkmarkempty:before {
+ content: '\e472';
+}
+
+.uni-icon-home:before {
+ content: '\e500';
+}
+
+.uni-icon-navigate:before {
+ content: '\e501';
+}
+
+.uni-icon-gear:before {
+ content: '\e502';
+}
+
+.uni-icon-paperplane:before {
+ content: '\e503';
+}
+
+.uni-icon-info:before {
+ content: '\e504';
+}
+
+.uni-icon-help:before {
+ content: '\e505';
+}
+
+.uni-icon-locked:before {
+ content: '\e506';
+}
+
+.uni-icon-more:before {
+ content: '\e507';
+}
+
+.uni-icon-flag:before {
+ content: '\e508';
+}
+
+.uni-icon-home-filled:before {
+ content: '\e530';
+}
+
+.uni-icon-gear-filled:before {
+ content: '\e532';
+}
+
+.uni-icon-info-filled:before {
+ content: '\e534';
+}
+
+.uni-icon-help-filled:before {
+ content: '\e535';
+}
+
+.uni-icon-more-filled:before {
+ content: '\e537';
+}
+
+.uni-icon-settings:before {
+ content: '\e560';
+}
+
+.uni-icon-list:before {
+ content: '\e562';
+}
+
+.uni-icon-bars:before {
+ content: '\e563';
+}
+
+.uni-icon-loop:before {
+ content: '\e565';
+}
+
+.uni-icon-paperclip:before {
+ content: '\e567';
+}
+
+.uni-icon-eye:before {
+ content: '\e568';
+}
+
+.uni-icon-arrowup:before {
+ content: '\e580';
+}
+
+.uni-icon-arrowdown:before {
+ content: '\e581';
+}
+
+.uni-icon-arrowleft:before {
+ content: '\e582';
+}
+
+.uni-icon-arrowright:before {
+ content: '\e583';
+}
+
+.uni-icon-arrowthinup:before {
+ content: '\e584';
+}
+
+.uni-icon-arrowthindown:before {
+ content: '\e585';
+}
+
+.uni-icon-arrowthinleft:before {
+ content: '\e586';
+}
+
+.uni-icon-arrowthinright:before {
+ content: '\e587';
+}
+
+.uni-icon-pulldown:before {
+ content: '\e588';
+}
+
+.uni-icon-scan:before {
+ content: "\e612";
+}
+
+/* 分界线 */
+.uni-divider{
+ height: 110rpx;
+ display: flex;
+ align-items:center;
+ justify-content: center;
+ position: relative;
+}
+.uni-divider__content{
+ font-size: 28rpx;
+ color: #999;
+ padding: 0 20rpx;
+ position: relative;
+ z-index: 101;
+ background: #F4F5F6;
+}
+.uni-divider__line{
+ background-color: #CCCCCC;
+ height: 1px;
+ width: 100%;
+ position: absolute;
+ z-index: 100;
+ top: 50%;
+ left: 0;
+ transform: translateY(50%);
+}
+
+.left-win-active text{
+ color: #007AFF !important;
+}
+page,
+ view,
+ scroll-view,
+ swiper,
+ swiper-item,
+ match-media,
+ movable-area,
+ movable-view,
+ cover-view,
+ cover-image,
+ icon,
+ text,
+ rich-text,
+ progress,
+ button,
+ checkbox-group,
+ editor,
+ form,
+ input,
+ label,
+ picker,
+ picker-view,
+ radio-group,
+ slider,
+ switch,
+ textarea,
+ navigator,
+ audio,
+ camera,
+ image,
+ video,
+ live-player,
+ live-pusher,
+ map,
+ canvas,
+ web-view {
+ box-sizing: border-box;
+ }
+
+ input {
+ height: auto;
+ }
+
+ image {
+ display: block;
+ }
+
+ .u-status-bar {
+ width: 100%;
+ height: var(--status-bar-height);
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 999;
+ }
+
+ .empty-wrap {
+ padding: 24rpx 0;
+ .empty {
+ padding-top: 180rpx;
+ }
+ }
+
+ .ios_ptm {
+ &::after {
+ content: '';
+ display: block;
+ width: 100%;
+ padding-bottom: env(safe-area-inset-bottom);
+ }
+ }
\ No newline at end of file
diff --git a/common/js/WXBizDataCrypt.js b/common/js/WXBizDataCrypt.js
new file mode 100644
index 0000000..6727256
--- /dev/null
+++ b/common/js/WXBizDataCrypt.js
@@ -0,0 +1,35 @@
+var crypto = require('crypto')
+
+function WXBizDataCrypt(appId, sessionKey) {
+ this.appId = appId
+ this.sessionKey = sessionKey
+}
+
+WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
+ // base64 decode
+ var sessionKey = new Buffer(this.sessionKey, 'base64')
+ encryptedData = new Buffer(encryptedData, 'base64')
+ iv = new Buffer(iv, 'base64')
+
+ try {
+ // 解密
+ var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
+ // 设置自动 padding 为 true,删除填充补位
+ decipher.setAutoPadding(true)
+ var decoded = decipher.update(encryptedData, 'binary', 'utf8')
+ decoded += decipher.final('utf8')
+
+ decoded = JSON.parse(decoded)
+
+ } catch (err) {
+ throw new Error('Illegal Buffer')
+ }
+
+ if (decoded.watermark.appid !== this.appId) {
+ throw new Error('Illegal Buffer')
+ }
+
+ return decoded
+}
+
+module.exports = WXBizDataCrypt
diff --git a/common/js/api.js b/common/js/api.js
new file mode 100644
index 0000000..34455e4
--- /dev/null
+++ b/common/js/api.js
@@ -0,0 +1,224 @@
+export default {
+ userlogin(data) { //登录
+ return uni.api.post("/user/login", data);
+ },
+ classificationbottomnavigation(data) { //底部导航
+ return uni.api.post("/classification/bottomnavigation", data);
+ },
+ usermy(data) { //我的
+ return uni.api.post("/my", data);
+ },
+ smssend(data) { //发送验证码
+ return uni.api.post("/sms/send", data);
+ },
+ userbindingphone(data) { //绑定手机号
+ return uni.api.post("/user/bindingphone", data);
+ },
+ useruserinfo(data) { //个人资料
+ return uni.api.post("/user/userinfo", data);
+ },
+ useruserinfoedit(data) { //个人资料修改
+ return uni.api.post("/user/userinfoedit", data);
+ },
+ reservationclassyy(data) { //预约分类
+ return uni.api.post("/reservation/classyy", data);
+ },
+ reservationlist(data) { //预约列表
+ return uni.api.post("/reservation/list", data, false);
+ },
+ indexworksdetail(data) { //作品详情
+ return uni.api.post("/index/worksdetail", data);
+ },
+ indexworks(data) { //作品
+ return uni.api.post("/index/works", data);
+ },
+ indexappclassindex(data) { //店铺详情
+ return uni.api.post("/index/appclassindex", data);
+ },
+ indexnewappclassindex(data) { //新店铺详情
+ return uni.api.post("/index/newappclassindex", data);
+ },
+ positionindex(data) { //首页
+ return uni.api.post("/index", data, false);
+ },
+ reservationdetail(data) { //服务详情
+ return uni.api.post("/reservation/detail", data, false);
+ },
+ okmakenowreservation(data) { //确认预约页面
+ return uni.api.post("/reservation/okmakenow", data);
+ },
+ reservationmakenowsub(data) { //确认支付
+ return uni.api.post("/reservation/makenowsub", data, false, 1);
+ },
+ paygetpayparams(data) { //获取支付参数
+ return uni.api.post("/pay/getpayparams", data, false, 1);
+ },
+ payorderstatus(data) { //获取支付状态
+ return uni.api.post("/pay/orderstatus", data);
+ },
+ orderlist(data) { //订单列表
+ return uni.api.post("/order/list", data);
+ },
+ orderorderdetail(data) { //订单详情
+ return uni.api.post("/order/orderdetail", data);
+ },
+ orderordercancel(data) { //取消订单
+ return uni.api.post("/order/ordercancel", data);
+ },
+ orderorderdelete(data) { //取消订单订单
+ return uni.api.post("/order/orderdelete", data);
+ },
+ orderorderrefund(data) { //申请/修改退款
+ return uni.api.post("/order/orderrefund", data);
+ },
+ orderrefunddetail(data) { //退款详情
+ return uni.api.post("/order/orderrefunddetail", data);
+ },
+ userusercarlist(data) { //会员卡列表
+ return uni.api.post("/user/usercarlist", data);
+ },
+ userbalancerechange(data) { //余额卡充值金额
+ return uni.api.post("/user/balancerechange", data);
+ },
+ userreceivebalancecar(data) { //领取会员卡
+ return uni.api.post("/user/receivebalancecar", data);
+ },
+ orderorderrefundcancel(data) { //取消退款
+ return uni.api.post("/order/orderrefundcancel", data);
+ },
+ useruserpolicy(data) { //
+ return uni.api.post("/user/userpolicy", data);
+ },
+ userbalancerechangesub(data) { //取消退款
+ return uni.api.post("/user/balancerechangesub", data);
+ },
+ usergetwechatphone(data) { //微信获取手机号
+ return uni.api.post("/user/getwechatphone", data);
+ },
+ userputopenid(data) { //openid
+ return uni.api.post("/user/putopenid", data);
+ },
+ reservationmakenow(data) { //可预约时间
+ return uni.api.post("/reservation/makenow", data);
+ },
+ reservationattendantavailable(data) { //有空服务员
+ return uni.api.post("/reservation/attendantavailable", data);
+ },
+ uservippassword(data) { //设置安全密码
+ return uni.api.post("/user/vippassword", data, true);
+ },
+ reservationdirectorder(data) { //直接下单
+ return uni.api.post("/reservation/directorder", data);
+ },
+ reservationorderecho(data) { //订单回显
+ return uni.api.post("/reservation/orderecho", data);
+ },
+ reservationvipdetail(data) { //店铺会员卡详情
+ return uni.api.post("/reservation/vipdetail", data);
+ },
+ useropenuserseccrd(data) { //开通次卡
+ return uni.api.post("/user/openuserseccrd", data);
+ },
+ useruserbalance(data) { //用户余额卡信息
+ return uni.api.post("/user/userbalance", data);
+ },
+ reservationdesignerviewtime(data) { //设计师可预约时间
+ return uni.api.post("/reservation/designerviewtime", data);
+ },
+ reservationpeopleinfo(data) { //服务员详情
+ return uni.api.post("/reservation/peopleinfo", data);
+ },
+ reservationpaythebill(data) { //买单页面
+ return uni.api.post("/reservation/paythebill", data);
+ },
+ reservationpaythebillsub(data) { //买单付款
+ return uni.api.post("/reservation/paythebillsub", data);
+ },
+ shoppingindex(data) { //商城首页
+ return uni.api.post("/shopping/index", data);
+ },
+ shoppingindexgoodsclass(data) { //商品分类
+ return uni.api.post("/shopping/index/goodsclass", data);
+ },
+ shoppingindexgoodsgoodsdetail(data) { //商品详情
+ return uni.api.post("/shopping/goods/goodsdetail", data);
+ },
+ shoppingindexgoodindexsaddcar(data) { //添加购物车
+ return uni.api.post("/shopping/index/addcar",data);
+ },
+ shoppingindexgoodindexcarlistr(data) { //购物车列表
+ return uni.api.post("/shopping/index/carlist",data,false);
+ },
+ shoppingindexgoodindexcardelcarr(data) { //删除购物车
+ return uni.api.post("/shopping/index/delcar",data);
+ },
+ shoppingindexgoodindexcareditcar(data) { //编辑购物车
+ return uni.api.post("/shopping/index/editcar",data);
+ },
+ shoppingindexgoodindexoforders(data) { //结算/确认订单
+ return uni.api.post("/shopping/index/oforders",data);
+ },
+ shoppingindexgoodindexsuborder(data) { //提交订单
+ return uni.api.post("/shopping/index/suborder",data,false, 1);
+ },
+ shoppingindexgoodindexgetpayparams(data) { //获取支付参数
+ return uni.api.post("/shopping/index/getpayparams", data, false, 1);
+ },
+ usermyaddresslist(data) { //我的地址列表
+ return uni.api.post("/user/myaddresslist", data);
+ },
+ usereditaddress(data) { //编辑/添加地址
+ return uni.api.post("/user/editaddress", data);
+ },
+ useredeleteaddress(data) { //删除地址
+ return uni.api.post("/user/deleteaddress", data);
+ },
+ usereaddressshow(data) { //地址回显
+ return uni.api.post("/user/addressshow", data);
+ },
+ shoppingorderlist(data) { //商城订单列表
+ return uni.api.post("/shopping/order/list", data);
+ },
+ shoppingorderordercancel(data) { //商城订单取消
+ return uni.api.post("/shopping/order/ordercancel", data);
+ },
+ shoppingorderorderorderdelete(data) { //商城删除订单
+ return uni.api.post("/shopping/order/orderdelete", data);
+ },
+ shoppingorderorderororderrefund(data) { //商城申请/修改退款
+ return uni.api.post("/shopping/order/orderrefund", data);
+ },
+ shoppingorderoorderdetail(data) { //商城订单详情
+ return uni.api.post("/shopping/order/orderdetail", data);
+ },
+ shoppingorderorderrefunddetail(data) { //商城退款详情
+ return uni.api.post("/shopping/order/orderrefunddetail", data);
+ },
+ shoppingorderorderorderrefundcancel(data) { //商城取消退款
+ return uni.api.post("/shopping/order/orderrefundcancel", data);
+ },
+ shoppingorderordershoppingorderstatus(data) { //商城支付状态查询
+ return uni.api.post("/shopping/user/shoppingorderstatus", data);
+ },
+ shoppinggoodsproductspec(data) { //商品规格
+ return uni.api.post("/shopping/goods/productspec", data);
+ },
+ shoppingbuyingspeciallist(data) { //每日特价
+ return uni.api.post("/shopping//buying/speciallist",data);
+ },
+ reservationhoteldetial(data) { //酒店详情
+ return uni.api.post("/reservation/hoteldetial",data);
+ },
+ reservationhotelconfirm(data) { //确认支付页面
+ return uni.api.post("/reservation/hotelconfirm",data);
+ },
+ reservationhotelsub(data) { //立即提交
+ return uni.api.post("/reservation/hotelsub",data);
+ },
+ reservationhotelgetpay(data) { //获取支付参数
+ return uni.api.post("/reservation/hotelgetpay",data);
+ },
+ payhotelorderstatus(data) { //获取支付参数
+ return uni.api.post("/pay/hotelorderstatus",data);
+ },
+}
\ No newline at end of file
diff --git a/common/js/lange.js b/common/js/lange.js
new file mode 100644
index 0000000..b2ba176
--- /dev/null
+++ b/common/js/lange.js
@@ -0,0 +1,74 @@
+const env = {
+ aliyunServerURL: 'https://czg-oss.oss-cn-beijing.aliyuncs.com',
+ accessid: 'LTAI5tMLHwnM1zYYAFuRa1fK',
+ AccessKeySecret: 'jS1h2STq1vcODczDNFQkjcU6ODyYAj',
+ timeout: 100000
+}
+
+const Base64 = require('./Base64.js');
+
+require('./hmac.js');
+require('./sha1.js');
+const Crypto = require('./crypto.js');
+
+
+const uploadFile = function(filePath, key = new Date().getTime()) {
+ return new Promise((resolve, reject) => {
+ // const aliyunFileKey = `${new Date().getTime()}_${userId}`;
+ const aliyunServerURL = env.aliyunServerURL;
+ const accessid = env.accessid;
+ const policyBase64 = getPolicyBase64();
+ const signature = getSignature(policyBase64);
+
+ wx.uploadFile({
+ url: aliyunServerURL, //仅为示例,非真实的接口地址
+ filePath: filePath,
+ name: 'file',
+ formData: {
+ 'key': 'headportrait/' + key,
+ 'OSSAccessKeyId': accessid,
+ 'policy': policyBase64,
+ 'Signature': signature,
+ 'success_action_status': '200',
+ },
+ success: function(res) {
+ if (res.statusCode != 200) {
+ reject('上传错误:' + JSON.stringify(res))
+ return;
+ }
+ resolve(`https://czh5.sxczgkj.cn/headportrait/${key}`)
+ },
+ fail: function(err) {
+ reject('上传错误:' + JSON.stringify(err))
+ }
+ })
+ })
+}
+
+const getPolicyBase64 = function() {
+ let date = new Date();
+ date.setHours(date.getHours() + env.timeout);
+ let srcT = date.toISOString();
+ const policyText = {
+ "expiration": srcT, //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了 指定了Post请求必须发生在2020年01月01日12点之前("2020-01-01T12:00:00.000Z")。
+ "conditions": [
+ ["content-length-range", 0, 20 * 1024 * 1024] // 设置上传文件的大小限制,1048576000=1000mb
+ ]
+ };
+
+ const policyBase64 = Base64.encode(JSON.stringify(policyText));
+ return policyBase64;
+}
+
+const getSignature = function(policyBase64) {
+ const accesskey = env.AccessKeySecret;
+
+ const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
+ asBytes: true
+ });
+ const signature = Crypto.util.bytesToBase64(bytes);
+
+ return signature;
+}
+
+module.exports = uploadFile;
diff --git a/common/js/uqrCode.js b/common/js/uqrCode.js
new file mode 100644
index 0000000..62a4ad4
--- /dev/null
+++ b/common/js/uqrCode.js
@@ -0,0 +1,1437 @@
+// uqrcode.js
+//---------------------------------------------------------------------
+// github https://github.com/Sansnn/uQRCode
+//---------------------------------------------------------------------
+
+let uQRCode = {};
+
+(function() {
+ //---------------------------------------------------------------------
+ // QRCode for JavaScript
+ //
+ // Copyright (c) 2009 Kazuhiko Arase
+ //
+ // URL: http://www.d-project.com/
+ //
+ // Licensed under the MIT license:
+ // http://www.opensource.org/licenses/mit-license.php
+ //
+ // The word "QR Code" is registered trademark of
+ // DENSO WAVE INCORPORATED
+ // http://www.denso-wave.com/qrcode/faqpatent-e.html
+ //
+ //---------------------------------------------------------------------
+
+ //---------------------------------------------------------------------
+ // QR8bitByte
+ //---------------------------------------------------------------------
+
+ function QR8bitByte(data) {
+ this.mode = QRMode.MODE_8BIT_BYTE;
+ this.data = data;
+ }
+
+ QR8bitByte.prototype = {
+
+ getLength: function(buffer) {
+ return this.data.length;
+ },
+
+ write: function(buffer) {
+ for (var i = 0; i < this.data.length; i++) {
+ // not JIS ...
+ buffer.put(this.data.charCodeAt(i), 8);
+ }
+ }
+ };
+
+ //---------------------------------------------------------------------
+ // QRCode
+ //---------------------------------------------------------------------
+
+ function QRCode(typeNumber, errorCorrectLevel) {
+ this.typeNumber = typeNumber;
+ this.errorCorrectLevel = errorCorrectLevel;
+ this.modules = null;
+ this.moduleCount = 0;
+ this.dataCache = null;
+ this.dataList = new Array();
+ }
+
+ QRCode.prototype = {
+
+ addData: function(data) {
+ var newData = new QR8bitByte(data);
+ this.dataList.push(newData);
+ this.dataCache = null;
+ },
+
+ isDark: function(row, col) {
+ if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+ throw new Error(row + "," + col);
+ }
+ return this.modules[row][col];
+ },
+
+ getModuleCount: function() {
+ return this.moduleCount;
+ },
+
+ make: function() {
+ // Calculate automatically typeNumber if provided is < 1
+ if (this.typeNumber < 1) {
+ var typeNumber = 1;
+ for (typeNumber = 1; typeNumber < 40; typeNumber++) {
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);
+
+ var buffer = new QRBitBuffer();
+ var totalDataCount = 0;
+ for (var i = 0; i < rsBlocks.length; i++) {
+ totalDataCount += rsBlocks[i].dataCount;
+ }
+
+ for (var i = 0; i < this.dataList.length; i++) {
+ var data = this.dataList[i];
+ buffer.put(data.mode, 4);
+ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+ data.write(buffer);
+ }
+ if (buffer.getLengthInBits() <= totalDataCount * 8)
+ break;
+ }
+ this.typeNumber = typeNumber;
+ }
+ this.makeImpl(false, this.getBestMaskPattern());
+ },
+
+ makeImpl: function(test, maskPattern) {
+
+ this.moduleCount = this.typeNumber * 4 + 17;
+ this.modules = new Array(this.moduleCount);
+
+ for (var row = 0; row < this.moduleCount; row++) {
+
+ this.modules[row] = new Array(this.moduleCount);
+
+ for (var col = 0; col < this.moduleCount; col++) {
+ this.modules[row][col] = null; //(col + row) % 3;
+ }
+ }
+
+ this.setupPositionProbePattern(0, 0);
+ this.setupPositionProbePattern(this.moduleCount - 7, 0);
+ this.setupPositionProbePattern(0, this.moduleCount - 7);
+ this.setupPositionAdjustPattern();
+ this.setupTimingPattern();
+ this.setupTypeInfo(test, maskPattern);
+
+ if (this.typeNumber >= 7) {
+ this.setupTypeNumber(test);
+ }
+
+ if (this.dataCache == null) {
+ this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
+ }
+
+ this.mapData(this.dataCache, maskPattern);
+ },
+
+ setupPositionProbePattern: function(row, col) {
+
+ for (var r = -1; r <= 7; r++) {
+
+ if (row + r <= -1 || this.moduleCount <= row + r) continue;
+
+ for (var c = -1; c <= 7; c++) {
+
+ if (col + c <= -1 || this.moduleCount <= col + c) continue;
+
+ if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||
+ (0 <= c && c <= 6 && (r == 0 || r == 6)) ||
+ (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
+ this.modules[row + r][col + c] = true;
+ } else {
+ this.modules[row + r][col + c] = false;
+ }
+ }
+ }
+ },
+
+ getBestMaskPattern: function() {
+
+ var minLostPoint = 0;
+ var pattern = 0;
+
+ for (var i = 0; i < 8; i++) {
+
+ this.makeImpl(true, i);
+
+ var lostPoint = QRUtil.getLostPoint(this);
+
+ if (i == 0 || minLostPoint > lostPoint) {
+ minLostPoint = lostPoint;
+ pattern = i;
+ }
+ }
+
+ return pattern;
+ },
+
+ createMovieClip: function(target_mc, instance_name, depth) {
+
+ var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
+ var cs = 1;
+
+ this.make();
+
+ for (var row = 0; row < this.modules.length; row++) {
+
+ var y = row * cs;
+
+ for (var col = 0; col < this.modules[row].length; col++) {
+
+ var x = col * cs;
+ var dark = this.modules[row][col];
+
+ if (dark) {
+ qr_mc.beginFill(0, 100);
+ qr_mc.moveTo(x, y);
+ qr_mc.lineTo(x + cs, y);
+ qr_mc.lineTo(x + cs, y + cs);
+ qr_mc.lineTo(x, y + cs);
+ qr_mc.endFill();
+ }
+ }
+ }
+
+ return qr_mc;
+ },
+
+ setupTimingPattern: function() {
+
+ for (var r = 8; r < this.moduleCount - 8; r++) {
+ if (this.modules[r][6] != null) {
+ continue;
+ }
+ this.modules[r][6] = (r % 2 == 0);
+ }
+
+ for (var c = 8; c < this.moduleCount - 8; c++) {
+ if (this.modules[6][c] != null) {
+ continue;
+ }
+ this.modules[6][c] = (c % 2 == 0);
+ }
+ },
+
+ setupPositionAdjustPattern: function() {
+
+ var pos = QRUtil.getPatternPosition(this.typeNumber);
+
+ for (var i = 0; i < pos.length; i++) {
+
+ for (var j = 0; j < pos.length; j++) {
+
+ var row = pos[i];
+ var col = pos[j];
+
+ if (this.modules[row][col] != null) {
+ continue;
+ }
+
+ for (var r = -2; r <= 2; r++) {
+
+ for (var c = -2; c <= 2; c++) {
+
+ if (r == -2 || r == 2 || c == -2 || c == 2 ||
+ (r == 0 && c == 0)) {
+ this.modules[row + r][col + c] = true;
+ } else {
+ this.modules[row + r][col + c] = false;
+ }
+ }
+ }
+ }
+ }
+ },
+
+ setupTypeNumber: function(test) {
+
+ var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+
+ for (var i = 0; i < 18; i++) {
+ var mod = (!test && ((bits >> i) & 1) == 1);
+ this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+ }
+
+ for (var i = 0; i < 18; i++) {
+ var mod = (!test && ((bits >> i) & 1) == 1);
+ this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+ }
+ },
+
+ setupTypeInfo: function(test, maskPattern) {
+
+ var data = (this.errorCorrectLevel << 3) | maskPattern;
+ var bits = QRUtil.getBCHTypeInfo(data);
+
+ // vertical
+ for (var i = 0; i < 15; i++) {
+
+ var mod = (!test && ((bits >> i) & 1) == 1);
+ if (i < 6) {
+ this.modules[i][8] = mod;
+ } else if (i < 8) {
+ this.modules[i + 1][8] = mod;
+ } else {
+ this.modules[this.moduleCount - 15 + i][8] = mod;
+ }
+ }
+
+ // horizontal
+ for (var i = 0; i < 15; i++) {
+
+ var mod = (!test && ((bits >> i) & 1) == 1);
+ if (i < 8) {
+ this.modules[8][this.moduleCount - i - 1] = mod;
+ } else if (i < 9) {
+ this.modules[8][15 - i - 1 + 1] = mod;
+ } else {
+ this.modules[8][15 - i - 1] = mod;
+ }
+ }
+
+ // fixed module
+ this.modules[this.moduleCount - 8][8] = (!test);
+
+ },
+
+ mapData: function(data, maskPattern) {
+
+ var inc = -1;
+ var row = this.moduleCount - 1;
+ var bitIndex = 7;
+ var byteIndex = 0;
+
+ for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+
+ if (col == 6) col--;
+
+ while (true) {
+
+ for (var c = 0; c < 2; c++) {
+
+ if (this.modules[row][col - c] == null) {
+
+ var dark = false;
+
+ if (byteIndex < data.length) {
+ dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
+ }
+
+ var mask = QRUtil.getMask(maskPattern, row, col - c);
+
+ if (mask) {
+ dark = !dark;
+ }
+
+ this.modules[row][col - c] = dark;
+ bitIndex--;
+
+ if (bitIndex == -1) {
+ byteIndex++;
+ bitIndex = 7;
+ }
+ }
+ }
+
+ row += inc;
+
+ if (row < 0 || this.moduleCount <= row) {
+ row -= inc;
+ inc = -inc;
+ break;
+ }
+ }
+ }
+
+ }
+
+ };
+
+ QRCode.PAD0 = 0xEC;
+ QRCode.PAD1 = 0x11;
+
+ QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {
+
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
+
+ var buffer = new QRBitBuffer();
+
+ for (var i = 0; i < dataList.length; i++) {
+ var data = dataList[i];
+ buffer.put(data.mode, 4);
+ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+ data.write(buffer);
+ }
+
+ // calc num max data.
+ var totalDataCount = 0;
+ for (var i = 0; i < rsBlocks.length; i++) {
+ totalDataCount += rsBlocks[i].dataCount;
+ }
+
+ if (buffer.getLengthInBits() > totalDataCount * 8) {
+ throw new Error("code length overflow. (" +
+ buffer.getLengthInBits() +
+ ">" +
+ totalDataCount * 8 +
+ ")");
+ }
+
+ // end code
+ if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
+ buffer.put(0, 4);
+ }
+
+ // padding
+ while (buffer.getLengthInBits() % 8 != 0) {
+ buffer.putBit(false);
+ }
+
+ // padding
+ while (true) {
+
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
+ break;
+ }
+ buffer.put(QRCode.PAD0, 8);
+
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
+ break;
+ }
+ buffer.put(QRCode.PAD1, 8);
+ }
+
+ return QRCode.createBytes(buffer, rsBlocks);
+ }
+
+ QRCode.createBytes = function(buffer, rsBlocks) {
+
+ var offset = 0;
+
+ var maxDcCount = 0;
+ var maxEcCount = 0;
+
+ var dcdata = new Array(rsBlocks.length);
+ var ecdata = new Array(rsBlocks.length);
+
+ for (var r = 0; r < rsBlocks.length; r++) {
+
+ var dcCount = rsBlocks[r].dataCount;
+ var ecCount = rsBlocks[r].totalCount - dcCount;
+
+ maxDcCount = Math.max(maxDcCount, dcCount);
+ maxEcCount = Math.max(maxEcCount, ecCount);
+
+ dcdata[r] = new Array(dcCount);
+
+ for (var i = 0; i < dcdata[r].length; i++) {
+ dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+ }
+ offset += dcCount;
+
+ var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+ var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+
+ var modPoly = rawPoly.mod(rsPoly);
+ ecdata[r] = new Array(rsPoly.getLength() - 1);
+ for (var i = 0; i < ecdata[r].length; i++) {
+ var modIndex = i + modPoly.getLength() - ecdata[r].length;
+ ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
+ }
+
+ }
+
+ var totalCodeCount = 0;
+ for (var i = 0; i < rsBlocks.length; i++) {
+ totalCodeCount += rsBlocks[i].totalCount;
+ }
+
+ var data = new Array(totalCodeCount);
+ var index = 0;
+
+ for (var i = 0; i < maxDcCount; i++) {
+ for (var r = 0; r < rsBlocks.length; r++) {
+ if (i < dcdata[r].length) {
+ data[index++] = dcdata[r][i];
+ }
+ }
+ }
+
+ for (var i = 0; i < maxEcCount; i++) {
+ for (var r = 0; r < rsBlocks.length; r++) {
+ if (i < ecdata[r].length) {
+ data[index++] = ecdata[r][i];
+ }
+ }
+ }
+
+ return data;
+
+ }
+
+ //---------------------------------------------------------------------
+ // QRMode
+ //---------------------------------------------------------------------
+
+ var QRMode = {
+ MODE_NUMBER: 1 << 0,
+ MODE_ALPHA_NUM: 1 << 1,
+ MODE_8BIT_BYTE: 1 << 2,
+ MODE_KANJI: 1 << 3
+ };
+
+ //---------------------------------------------------------------------
+ // QRErrorCorrectLevel
+ //---------------------------------------------------------------------
+
+ var QRErrorCorrectLevel = {
+ L: 1,
+ M: 0,
+ Q: 3,
+ H: 2
+ };
+
+ //---------------------------------------------------------------------
+ // QRMaskPattern
+ //---------------------------------------------------------------------
+
+ var QRMaskPattern = {
+ PATTERN000: 0,
+ PATTERN001: 1,
+ PATTERN010: 2,
+ PATTERN011: 3,
+ PATTERN100: 4,
+ PATTERN101: 5,
+ PATTERN110: 6,
+ PATTERN111: 7
+ };
+
+ //---------------------------------------------------------------------
+ // QRUtil
+ //---------------------------------------------------------------------
+
+ var QRUtil = {
+
+ PATTERN_POSITION_TABLE: [
+ [],
+ [6, 18],
+ [6, 22],
+ [6, 26],
+ [6, 30],
+ [6, 34],
+ [6, 22, 38],
+ [6, 24, 42],
+ [6, 26, 46],
+ [6, 28, 50],
+ [6, 30, 54],
+ [6, 32, 58],
+ [6, 34, 62],
+ [6, 26, 46, 66],
+ [6, 26, 48, 70],
+ [6, 26, 50, 74],
+ [6, 30, 54, 78],
+ [6, 30, 56, 82],
+ [6, 30, 58, 86],
+ [6, 34, 62, 90],
+ [6, 28, 50, 72, 94],
+ [6, 26, 50, 74, 98],
+ [6, 30, 54, 78, 102],
+ [6, 28, 54, 80, 106],
+ [6, 32, 58, 84, 110],
+ [6, 30, 58, 86, 114],
+ [6, 34, 62, 90, 118],
+ [6, 26, 50, 74, 98, 122],
+ [6, 30, 54, 78, 102, 126],
+ [6, 26, 52, 78, 104, 130],
+ [6, 30, 56, 82, 108, 134],
+ [6, 34, 60, 86, 112, 138],
+ [6, 30, 58, 86, 114, 142],
+ [6, 34, 62, 90, 118, 146],
+ [6, 30, 54, 78, 102, 126, 150],
+ [6, 24, 50, 76, 102, 128, 154],
+ [6, 28, 54, 80, 106, 132, 158],
+ [6, 32, 58, 84, 110, 136, 162],
+ [6, 26, 54, 82, 110, 138, 166],
+ [6, 30, 58, 86, 114, 142, 170]
+ ],
+
+ G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
+ G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
+ G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
+
+ getBCHTypeInfo: function(data) {
+ var d = data << 10;
+ while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+ d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)));
+ }
+ return ((data << 10) | d) ^ QRUtil.G15_MASK;
+ },
+
+ getBCHTypeNumber: function(data) {
+ var d = data << 12;
+ while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+ d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)));
+ }
+ return (data << 12) | d;
+ },
+
+ getBCHDigit: function(data) {
+
+ var digit = 0;
+
+ while (data != 0) {
+ digit++;
+ data >>>= 1;
+ }
+
+ return digit;
+ },
+
+ getPatternPosition: function(typeNumber) {
+ return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+ },
+
+ getMask: function(maskPattern, i, j) {
+
+ switch (maskPattern) {
+
+ case QRMaskPattern.PATTERN000:
+ return (i + j) % 2 == 0;
+ case QRMaskPattern.PATTERN001:
+ return i % 2 == 0;
+ case QRMaskPattern.PATTERN010:
+ return j % 3 == 0;
+ case QRMaskPattern.PATTERN011:
+ return (i + j) % 3 == 0;
+ case QRMaskPattern.PATTERN100:
+ return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+ case QRMaskPattern.PATTERN101:
+ return (i * j) % 2 + (i * j) % 3 == 0;
+ case QRMaskPattern.PATTERN110:
+ return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
+ case QRMaskPattern.PATTERN111:
+ return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
+
+ default:
+ throw new Error("bad maskPattern:" + maskPattern);
+ }
+ },
+
+ getErrorCorrectPolynomial: function(errorCorrectLength) {
+
+ var a = new QRPolynomial([1], 0);
+
+ for (var i = 0; i < errorCorrectLength; i++) {
+ a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+ }
+
+ return a;
+ },
+
+ getLengthInBits: function(mode, type) {
+
+ if (1 <= type && type < 10) {
+
+ // 1 - 9
+
+ switch (mode) {
+ case QRMode.MODE_NUMBER:
+ return 10;
+ case QRMode.MODE_ALPHA_NUM:
+ return 9;
+ case QRMode.MODE_8BIT_BYTE:
+ return 8;
+ case QRMode.MODE_KANJI:
+ return 8;
+ default:
+ throw new Error("mode:" + mode);
+ }
+
+ } else if (type < 27) {
+
+ // 10 - 26
+
+ switch (mode) {
+ case QRMode.MODE_NUMBER:
+ return 12;
+ case QRMode.MODE_ALPHA_NUM:
+ return 11;
+ case QRMode.MODE_8BIT_BYTE:
+ return 16;
+ case QRMode.MODE_KANJI:
+ return 10;
+ default:
+ throw new Error("mode:" + mode);
+ }
+
+ } else if (type < 41) {
+
+ // 27 - 40
+
+ switch (mode) {
+ case QRMode.MODE_NUMBER:
+ return 14;
+ case QRMode.MODE_ALPHA_NUM:
+ return 13;
+ case QRMode.MODE_8BIT_BYTE:
+ return 16;
+ case QRMode.MODE_KANJI:
+ return 12;
+ default:
+ throw new Error("mode:" + mode);
+ }
+
+ } else {
+ throw new Error("type:" + type);
+ }
+ },
+
+ getLostPoint: function(qrCode) {
+
+ var moduleCount = qrCode.getModuleCount();
+
+ var lostPoint = 0;
+
+ // LEVEL1
+
+ for (var row = 0; row < moduleCount; row++) {
+
+ for (var col = 0; col < moduleCount; col++) {
+
+ var sameCount = 0;
+ var dark = qrCode.isDark(row, col);
+
+ for (var r = -1; r <= 1; r++) {
+
+ if (row + r < 0 || moduleCount <= row + r) {
+ continue;
+ }
+
+ for (var c = -1; c <= 1; c++) {
+
+ if (col + c < 0 || moduleCount <= col + c) {
+ continue;
+ }
+
+ if (r == 0 && c == 0) {
+ continue;
+ }
+
+ if (dark == qrCode.isDark(row + r, col + c)) {
+ sameCount++;
+ }
+ }
+ }
+
+ if (sameCount > 5) {
+ lostPoint += (3 + sameCount - 5);
+ }
+ }
+ }
+
+ // LEVEL2
+
+ for (var row = 0; row < moduleCount - 1; row++) {
+ for (var col = 0; col < moduleCount - 1; col++) {
+ var count = 0;
+ if (qrCode.isDark(row, col)) count++;
+ if (qrCode.isDark(row + 1, col)) count++;
+ if (qrCode.isDark(row, col + 1)) count++;
+ if (qrCode.isDark(row + 1, col + 1)) count++;
+ if (count == 0 || count == 4) {
+ lostPoint += 3;
+ }
+ }
+ }
+
+ // LEVEL3
+
+ for (var row = 0; row < moduleCount; row++) {
+ for (var col = 0; col < moduleCount - 6; col++) {
+ if (qrCode.isDark(row, col) &&
+ !qrCode.isDark(row, col + 1) &&
+ qrCode.isDark(row, col + 2) &&
+ qrCode.isDark(row, col + 3) &&
+ qrCode.isDark(row, col + 4) &&
+ !qrCode.isDark(row, col + 5) &&
+ qrCode.isDark(row, col + 6)) {
+ lostPoint += 40;
+ }
+ }
+ }
+
+ for (var col = 0; col < moduleCount; col++) {
+ for (var row = 0; row < moduleCount - 6; row++) {
+ if (qrCode.isDark(row, col) &&
+ !qrCode.isDark(row + 1, col) &&
+ qrCode.isDark(row + 2, col) &&
+ qrCode.isDark(row + 3, col) &&
+ qrCode.isDark(row + 4, col) &&
+ !qrCode.isDark(row + 5, col) &&
+ qrCode.isDark(row + 6, col)) {
+ lostPoint += 40;
+ }
+ }
+ }
+
+ // LEVEL4
+
+ var darkCount = 0;
+
+ for (var col = 0; col < moduleCount; col++) {
+ for (var row = 0; row < moduleCount; row++) {
+ if (qrCode.isDark(row, col)) {
+ darkCount++;
+ }
+ }
+ }
+
+ var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+ lostPoint += ratio * 10;
+
+ return lostPoint;
+ }
+
+ };
+
+
+ //---------------------------------------------------------------------
+ // QRMath
+ //---------------------------------------------------------------------
+
+ var QRMath = {
+
+ glog: function(n) {
+
+ if (n < 1) {
+ throw new Error("glog(" + n + ")");
+ }
+
+ return QRMath.LOG_TABLE[n];
+ },
+
+ gexp: function(n) {
+
+ while (n < 0) {
+ n += 255;
+ }
+
+ while (n >= 256) {
+ n -= 255;
+ }
+
+ return QRMath.EXP_TABLE[n];
+ },
+
+ EXP_TABLE: new Array(256),
+
+ LOG_TABLE: new Array(256)
+
+ };
+
+ for (var i = 0; i < 8; i++) {
+ QRMath.EXP_TABLE[i] = 1 << i;
+ }
+ for (var i = 8; i < 256; i++) {
+ QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^
+ QRMath.EXP_TABLE[i - 5] ^
+ QRMath.EXP_TABLE[i - 6] ^
+ QRMath.EXP_TABLE[i - 8];
+ }
+ for (var i = 0; i < 255; i++) {
+ QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+ }
+
+ //---------------------------------------------------------------------
+ // QRPolynomial
+ //---------------------------------------------------------------------
+
+ function QRPolynomial(num, shift) {
+
+ if (num.length == undefined) {
+ throw new Error(num.length + "/" + shift);
+ }
+
+ var offset = 0;
+
+ while (offset < num.length && num[offset] == 0) {
+ offset++;
+ }
+
+ this.num = new Array(num.length - offset + shift);
+ for (var i = 0; i < num.length - offset; i++) {
+ this.num[i] = num[i + offset];
+ }
+ }
+
+ QRPolynomial.prototype = {
+
+ get: function(index) {
+ return this.num[index];
+ },
+
+ getLength: function() {
+ return this.num.length;
+ },
+
+ multiply: function(e) {
+
+ var num = new Array(this.getLength() + e.getLength() - 1);
+
+ for (var i = 0; i < this.getLength(); i++) {
+ for (var j = 0; j < e.getLength(); j++) {
+ num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+ }
+ }
+
+ return new QRPolynomial(num, 0);
+ },
+
+ mod: function(e) {
+
+ if (this.getLength() - e.getLength() < 0) {
+ return this;
+ }
+
+ var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
+
+ var num = new Array(this.getLength());
+
+ for (var i = 0; i < this.getLength(); i++) {
+ num[i] = this.get(i);
+ }
+
+ for (var i = 0; i < e.getLength(); i++) {
+ num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+ }
+
+ // recursive call
+ return new QRPolynomial(num, 0).mod(e);
+ }
+ };
+
+ //---------------------------------------------------------------------
+ // QRRSBlock
+ //---------------------------------------------------------------------
+
+ function QRRSBlock(totalCount, dataCount) {
+ this.totalCount = totalCount;
+ this.dataCount = dataCount;
+ }
+
+ QRRSBlock.RS_BLOCK_TABLE = [
+
+ // L
+ // M
+ // Q
+ // H
+
+ // 1
+ [1, 26, 19],
+ [1, 26, 16],
+ [1, 26, 13],
+ [1, 26, 9],
+
+ // 2
+ [1, 44, 34],
+ [1, 44, 28],
+ [1, 44, 22],
+ [1, 44, 16],
+
+ // 3
+ [1, 70, 55],
+ [1, 70, 44],
+ [2, 35, 17],
+ [2, 35, 13],
+
+ // 4
+ [1, 100, 80],
+ [2, 50, 32],
+ [2, 50, 24],
+ [4, 25, 9],
+
+ // 5
+ [1, 134, 108],
+ [2, 67, 43],
+ [2, 33, 15, 2, 34, 16],
+ [2, 33, 11, 2, 34, 12],
+
+ // 6
+ [2, 86, 68],
+ [4, 43, 27],
+ [4, 43, 19],
+ [4, 43, 15],
+
+ // 7
+ [2, 98, 78],
+ [4, 49, 31],
+ [2, 32, 14, 4, 33, 15],
+ [4, 39, 13, 1, 40, 14],
+
+ // 8
+ [2, 121, 97],
+ [2, 60, 38, 2, 61, 39],
+ [4, 40, 18, 2, 41, 19],
+ [4, 40, 14, 2, 41, 15],
+
+ // 9
+ [2, 146, 116],
+ [3, 58, 36, 2, 59, 37],
+ [4, 36, 16, 4, 37, 17],
+ [4, 36, 12, 4, 37, 13],
+
+ // 10
+ [2, 86, 68, 2, 87, 69],
+ [4, 69, 43, 1, 70, 44],
+ [6, 43, 19, 2, 44, 20],
+ [6, 43, 15, 2, 44, 16],
+
+ // 11
+ [4, 101, 81],
+ [1, 80, 50, 4, 81, 51],
+ [4, 50, 22, 4, 51, 23],
+ [3, 36, 12, 8, 37, 13],
+
+ // 12
+ [2, 116, 92, 2, 117, 93],
+ [6, 58, 36, 2, 59, 37],
+ [4, 46, 20, 6, 47, 21],
+ [7, 42, 14, 4, 43, 15],
+
+ // 13
+ [4, 133, 107],
+ [8, 59, 37, 1, 60, 38],
+ [8, 44, 20, 4, 45, 21],
+ [12, 33, 11, 4, 34, 12],
+
+ // 14
+ [3, 145, 115, 1, 146, 116],
+ [4, 64, 40, 5, 65, 41],
+ [11, 36, 16, 5, 37, 17],
+ [11, 36, 12, 5, 37, 13],
+
+ // 15
+ [5, 109, 87, 1, 110, 88],
+ [5, 65, 41, 5, 66, 42],
+ [5, 54, 24, 7, 55, 25],
+ [11, 36, 12],
+
+ // 16
+ [5, 122, 98, 1, 123, 99],
+ [7, 73, 45, 3, 74, 46],
+ [15, 43, 19, 2, 44, 20],
+ [3, 45, 15, 13, 46, 16],
+
+ // 17
+ [1, 135, 107, 5, 136, 108],
+ [10, 74, 46, 1, 75, 47],
+ [1, 50, 22, 15, 51, 23],
+ [2, 42, 14, 17, 43, 15],
+
+ // 18
+ [5, 150, 120, 1, 151, 121],
+ [9, 69, 43, 4, 70, 44],
+ [17, 50, 22, 1, 51, 23],
+ [2, 42, 14, 19, 43, 15],
+
+ // 19
+ [3, 141, 113, 4, 142, 114],
+ [3, 70, 44, 11, 71, 45],
+ [17, 47, 21, 4, 48, 22],
+ [9, 39, 13, 16, 40, 14],
+
+ // 20
+ [3, 135, 107, 5, 136, 108],
+ [3, 67, 41, 13, 68, 42],
+ [15, 54, 24, 5, 55, 25],
+ [15, 43, 15, 10, 44, 16],
+
+ // 21
+ [4, 144, 116, 4, 145, 117],
+ [17, 68, 42],
+ [17, 50, 22, 6, 51, 23],
+ [19, 46, 16, 6, 47, 17],
+
+ // 22
+ [2, 139, 111, 7, 140, 112],
+ [17, 74, 46],
+ [7, 54, 24, 16, 55, 25],
+ [34, 37, 13],
+
+ // 23
+ [4, 151, 121, 5, 152, 122],
+ [4, 75, 47, 14, 76, 48],
+ [11, 54, 24, 14, 55, 25],
+ [16, 45, 15, 14, 46, 16],
+
+ // 24
+ [6, 147, 117, 4, 148, 118],
+ [6, 73, 45, 14, 74, 46],
+ [11, 54, 24, 16, 55, 25],
+ [30, 46, 16, 2, 47, 17],
+
+ // 25
+ [8, 132, 106, 4, 133, 107],
+ [8, 75, 47, 13, 76, 48],
+ [7, 54, 24, 22, 55, 25],
+ [22, 45, 15, 13, 46, 16],
+
+ // 26
+ [10, 142, 114, 2, 143, 115],
+ [19, 74, 46, 4, 75, 47],
+ [28, 50, 22, 6, 51, 23],
+ [33, 46, 16, 4, 47, 17],
+
+ // 27
+ [8, 152, 122, 4, 153, 123],
+ [22, 73, 45, 3, 74, 46],
+ [8, 53, 23, 26, 54, 24],
+ [12, 45, 15, 28, 46, 16],
+
+ // 28
+ [3, 147, 117, 10, 148, 118],
+ [3, 73, 45, 23, 74, 46],
+ [4, 54, 24, 31, 55, 25],
+ [11, 45, 15, 31, 46, 16],
+
+ // 29
+ [7, 146, 116, 7, 147, 117],
+ [21, 73, 45, 7, 74, 46],
+ [1, 53, 23, 37, 54, 24],
+ [19, 45, 15, 26, 46, 16],
+
+ // 30
+ [5, 145, 115, 10, 146, 116],
+ [19, 75, 47, 10, 76, 48],
+ [15, 54, 24, 25, 55, 25],
+ [23, 45, 15, 25, 46, 16],
+
+ // 31
+ [13, 145, 115, 3, 146, 116],
+ [2, 74, 46, 29, 75, 47],
+ [42, 54, 24, 1, 55, 25],
+ [23, 45, 15, 28, 46, 16],
+
+ // 32
+ [17, 145, 115],
+ [10, 74, 46, 23, 75, 47],
+ [10, 54, 24, 35, 55, 25],
+ [19, 45, 15, 35, 46, 16],
+
+ // 33
+ [17, 145, 115, 1, 146, 116],
+ [14, 74, 46, 21, 75, 47],
+ [29, 54, 24, 19, 55, 25],
+ [11, 45, 15, 46, 46, 16],
+
+ // 34
+ [13, 145, 115, 6, 146, 116],
+ [14, 74, 46, 23, 75, 47],
+ [44, 54, 24, 7, 55, 25],
+ [59, 46, 16, 1, 47, 17],
+
+ // 35
+ [12, 151, 121, 7, 152, 122],
+ [12, 75, 47, 26, 76, 48],
+ [39, 54, 24, 14, 55, 25],
+ [22, 45, 15, 41, 46, 16],
+
+ // 36
+ [6, 151, 121, 14, 152, 122],
+ [6, 75, 47, 34, 76, 48],
+ [46, 54, 24, 10, 55, 25],
+ [2, 45, 15, 64, 46, 16],
+
+ // 37
+ [17, 152, 122, 4, 153, 123],
+ [29, 74, 46, 14, 75, 47],
+ [49, 54, 24, 10, 55, 25],
+ [24, 45, 15, 46, 46, 16],
+
+ // 38
+ [4, 152, 122, 18, 153, 123],
+ [13, 74, 46, 32, 75, 47],
+ [48, 54, 24, 14, 55, 25],
+ [42, 45, 15, 32, 46, 16],
+
+ // 39
+ [20, 147, 117, 4, 148, 118],
+ [40, 75, 47, 7, 76, 48],
+ [43, 54, 24, 22, 55, 25],
+ [10, 45, 15, 67, 46, 16],
+
+ // 40
+ [19, 148, 118, 6, 149, 119],
+ [18, 75, 47, 31, 76, 48],
+ [34, 54, 24, 34, 55, 25],
+ [20, 45, 15, 61, 46, 16]
+ ];
+
+ QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {
+
+ var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
+
+ if (rsBlock == undefined) {
+ throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
+ }
+
+ var length = rsBlock.length / 3;
+
+ var list = new Array();
+
+ for (var i = 0; i < length; i++) {
+
+ var count = rsBlock[i * 3 + 0];
+ var totalCount = rsBlock[i * 3 + 1];
+ var dataCount = rsBlock[i * 3 + 2];
+
+ for (var j = 0; j < count; j++) {
+ list.push(new QRRSBlock(totalCount, dataCount));
+ }
+ }
+
+ return list;
+ }
+
+ QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {
+
+ switch (errorCorrectLevel) {
+ case QRErrorCorrectLevel.L:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
+ case QRErrorCorrectLevel.M:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
+ case QRErrorCorrectLevel.Q:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
+ case QRErrorCorrectLevel.H:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
+ default:
+ return undefined;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ // QRBitBuffer
+ //---------------------------------------------------------------------
+
+ function QRBitBuffer() {
+ this.buffer = new Array();
+ this.length = 0;
+ }
+
+ QRBitBuffer.prototype = {
+
+ get: function(index) {
+ var bufIndex = Math.floor(index / 8);
+ return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1;
+ },
+
+ put: function(num, length) {
+ for (var i = 0; i < length; i++) {
+ this.putBit(((num >>> (length - i - 1)) & 1) == 1);
+ }
+ },
+
+ getLengthInBits: function() {
+ return this.length;
+ },
+
+ putBit: function(bit) {
+
+ var bufIndex = Math.floor(this.length / 8);
+ if (this.buffer.length <= bufIndex) {
+ this.buffer.push(0);
+ }
+
+ if (bit) {
+ this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));
+ }
+
+ this.length++;
+ }
+ };
+
+ //---------------------------------------------------------------------
+ // Support Chinese
+ //---------------------------------------------------------------------
+ function utf16To8(text) {
+ var result = '';
+ var c;
+ for (var i = 0; i < text.length; i++) {
+ c = text.charCodeAt(i);
+ if (c >= 0x0001 && c <= 0x007F) {
+ result += text.charAt(i);
+ } else if (c > 0x07FF) {
+ result += String.fromCharCode(0xE0 | c >> 12 & 0x0F);
+ result += String.fromCharCode(0x80 | c >> 6 & 0x3F);
+ result += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+ } else {
+ result += String.fromCharCode(0xC0 | c >> 6 & 0x1F);
+ result += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+ }
+ }
+ return result;
+ }
+
+ uQRCode = {
+
+ errorCorrectLevel: QRErrorCorrectLevel,
+
+ defaults: {
+ size: 354,
+ margin: 0,
+ backgroundColor: '#ffffff',
+ foregroundColor: '#000000',
+ fileType: 'png', // 'jpg', 'png'
+ errorCorrectLevel: QRErrorCorrectLevel.H,
+ typeNumber: -1
+ },
+
+ make: function(options) {
+ return new Promise((reslove, reject) => {
+ var defaultOptions = {
+ canvasId: options.canvasId,
+ componentInstance: options.componentInstance,
+ text: options.text,
+ size: this.defaults.size,
+ margin: this.defaults.margin,
+ backgroundColor: this.defaults.backgroundColor,
+ foregroundColor: this.defaults.foregroundColor,
+ fileType: this.defaults.fileType,
+ errorCorrectLevel: this.defaults.errorCorrectLevel,
+ typeNumber: this.defaults.typeNumber
+ };
+ if (options) {
+ for (var i in options) {
+ defaultOptions[i] = options[i];
+ }
+ }
+ options = defaultOptions;
+ if (!options.canvasId) {
+ console.error('uQRCode: Please set canvasId!');
+ return;
+ }
+
+ function createCanvas() {
+ var qrcode = new QRCode(options.typeNumber, options.errorCorrectLevel);
+ qrcode.addData(utf16To8(options.text));
+ qrcode.make();
+
+ var ctx = uni.createCanvasContext(options.canvasId, options.componentInstance);
+ ctx.setFillStyle(options.backgroundColor);
+ ctx.fillRect(0, 0, options.size, options.size);
+
+ var tileW = (options.size - options.margin * 2) / qrcode.getModuleCount();
+ var tileH = tileW;
+
+ for (var row = 0; row < qrcode.getModuleCount(); row++) {
+ for (var col = 0; col < qrcode.getModuleCount(); col++) {
+ var style = qrcode.isDark(row, col) ? options.foregroundColor : options.backgroundColor;
+ ctx.setFillStyle(style);
+ var x = Math.round(col * tileW) + options.margin;
+ var y = Math.round(row * tileH) + options.margin;
+ var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW);
+ var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW);
+ ctx.fillRect(x, y, w, h);
+ }
+ }
+
+ setTimeout(function() {
+ ctx.draw(false, (function() {
+ setTimeout(function() {
+ uni.canvasToTempFilePath({
+ canvasId: options.canvasId,
+ fileType: options.fileType,
+ width: options.size,
+ height: options.size,
+ destWidth: options.size,
+ destHeight: options.size,
+ success: function(res) {
+ let resData; // 将统一为base64格式
+ let tempFilePath = res.tempFilePath; // H5为base64,其他为相对路径
+
+ // #ifdef H5
+ resData = tempFilePath;
+ options.success && options.success(resData);
+ reslove(resData);
+ // #endif
+
+ // #ifdef APP-PLUS
+ const path = plus.io.convertLocalFileSystemURL(tempFilePath) // 绝对路径
+ let fileReader = new plus.io.FileReader();
+ fileReader.readAsDataURL(path);
+ fileReader.onloadend = res => {
+ resData = res.target.result;
+ options.success && options.success(resData);
+ reslove(resData);
+ };
+ // #endif
+
+ // #ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO
+ uni.getFileSystemManager().readFile({
+ filePath: tempFilePath,
+ encoding: 'base64',
+ success: res => {
+ resData = 'data:image/png;base64,' + res.data;
+ options.success && options.success(resData);
+ reslove(resData);
+ }
+ })
+ // #endif
+
+ // #ifndef H5 || APP-PLUS || MP-WEIXIN || MP-QQ || MP-TOUTIAO
+ if (plus) {
+ const path = plus.io.convertLocalFileSystemURL(tempFilePath) // 绝对路径
+ let fileReader = new plus.io.FileReader();
+ fileReader.readAsDataURL(path);
+ fileReader.onloadend = res => {
+ resData = res.target.result;
+ options.success && options.success(resData);
+ reslove(resData);
+ };
+ } else {
+ uni.request({
+ url: tempFilePath,
+ method: 'GET',
+ responseType: 'arraybuffer',
+ success: res => {
+ resData = `data:image/png;base64,${uni.arrayBufferToBase64(res.data)}`; // 把arraybuffer转成base64
+ options.success && options.success(resData);
+ reslove(resData);
+ }
+ })
+ }
+ // #endif
+ },
+ fail: function(error) {
+ options.fail && options.fail(error);
+ reject(error);
+ },
+ complete: function(res) {
+ options.complete && options.complete(res);
+ }
+ }, options.componentInstance);
+ }, options.text.length + 100);
+ })());
+ }, 150);
+ }
+
+ createCanvas();
+ });
+ }
+ }
+
+})()
+
+export default uQRCode
diff --git a/components/bottombbar.vue b/components/bottombbar.vue
new file mode 100644
index 0000000..fd3d035
--- /dev/null
+++ b/components/bottombbar.vue
@@ -0,0 +1,129 @@
+
+
+
+ value = name" :placeholder="false"
+ activeColor="#66666" :safeAreaInsetBottom="false"
+ inactiveColor="#333333">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/countdown.vue b/components/countdown.vue
new file mode 100644
index 0000000..5823ccc
--- /dev/null
+++ b/components/countdown.vue
@@ -0,0 +1,192 @@
+
+
+ {{ d }}
+ 天
+ {{ h }}
+ {{ showColon ? ':' : '时' }}
+ {{ i }}
+ {{ showColon ? ':' : '分' }}
+ {{ s }}
+ 秒
+
+
+
+
diff --git a/components/navbar.vue b/components/navbar.vue
new file mode 100644
index 0000000..8d01ba7
--- /dev/null
+++ b/components/navbar.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{navtitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{navtitle}}
+
+
+
+
+
+
+ {{navtitle}}
+
+
+
+
+
+
+
+
+
+
+
+ {{navtitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/pick-regions/pick-regions.vue b/components/pick-regions/pick-regions.vue
new file mode 100644
index 0000000..a5f2d45
--- /dev/null
+++ b/components/pick-regions/pick-regions.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
diff --git a/components/pick-regions/regions.json b/components/pick-regions/regions.json
new file mode 100644
index 0000000..310abee
--- /dev/null
+++ b/components/pick-regions/regions.json
@@ -0,0 +1 @@
+[{"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":[]}]
\ No newline at end of file
diff --git a/framework/0-conf.js b/framework/0-conf.js
new file mode 100644
index 0000000..37f10ab
--- /dev/null
+++ b/framework/0-conf.js
@@ -0,0 +1,26 @@
+const debug = true;
+// #ifdef H5
+const proxyApi = "/api"
+// #endif
+// #ifdef MP-WEIXIN
+const baseUrl = 'https://opendoor.sxczgkj.cn/api' // 线上
+// const baseUrl = http://192.168.2.23:1200/api/ //本地
+// #endif
+// #ifdef H5
+const baseUrl = debug ? proxyApi : 'https://opendoor.sxczgkj.cn/api' // 线上
+// #endif
+// import VConsole from "./vConsole.js"
+// if (debug) {
+// // new VConsole()
+// }
+const version = '109'
+const autoRemoveCache = {
+ count: 100000,
+ size: 100000
+}
+uni.conf = {
+ debug,
+ baseUrl,
+ version,
+ autoRemoveCache
+}
\ No newline at end of file
diff --git a/framework/1-utils.js b/framework/1-utils.js
new file mode 100644
index 0000000..48fd4a2
--- /dev/null
+++ b/framework/1-utils.js
@@ -0,0 +1,223 @@
+import md5 from './md5'
+
+/**
+ * 转换对象为x-www-form-urlencoded
+ * @author NanQi
+ * @param {Object} obj
+ * @return {String}
+ */
+let transformRequest = obj => {
+ let query = ''
+ let name, value, fullSubName, subName, subValue, innerObj, i
+
+ for(name in obj) {
+ value = obj[name]
+
+ if(value instanceof Array) {
+ for(i = 0; i < value.length; ++i) {
+ subValue = value[i]
+ fullSubName = name + '[' + i + ']'
+ innerObj = {}
+ innerObj[fullSubName] = subValue
+ query += transformRequest(innerObj) + '&'
+ }
+ } else if(value instanceof Object) {
+ for(subName in value) {
+ subValue = value[subName]
+ fullSubName = name + '[' + subName + ']'
+ innerObj = {}
+ innerObj[fullSubName] = subValue
+ query += transformRequest(innerObj) + '&'
+ }
+ } else if(value !== undefined && value !== null) {
+ query += encodeURIComponent(name) + '=' +
+ encodeURIComponent(value) + '&'
+ }
+ }
+
+ return query.length ? query.substr(0, query.length - 1) : query
+}
+
+let timestamp = function() {
+ return Date.parse(new Date()) / 1000
+}
+
+let isNavigating = false
+let isNavigate = () => {
+ if(isNavigating) {
+ return true
+ } else {
+ isNavigating = true
+ setTimeout(() => {
+ isNavigating = false
+ }, 2000)
+ return false
+ }
+}
+
+let guid = (function() {
+ let counter = 0
+
+ return function(prefix) {
+ let guid = new Date().getTime().toString(32),
+ i
+
+ for(i = 0; i < 5; i++) {
+ guid += Math.floor(Math.random() * 65535).toString(32)
+ }
+
+ return(prefix || '') + guid + (counter++).toString(32)
+ }
+}())
+
+let sortTransform = (obj) => {
+ var objKeys = Object.keys(obj)
+ objKeys = objKeys.sort()
+
+ var ret = {}
+ for(var i = 0; i < objKeys.length; i++) {
+ let objVal = obj[objKeys[i]]
+ ret[objKeys[i]] = objVal
+ }
+
+ return transformRequest(ret)
+}
+
+function isArray(v) {
+ return toString.apply(v) === '[object Array]'
+}
+
+function isFunction(v) {
+ return typeof v === 'function'
+}
+
+function isEmptyObject(v) {
+ return Object.keys(v).length == 0
+}
+
+function sleep (time) {
+ return new Promise((resolve) => setTimeout(resolve, time))
+}
+
+const throttle = function(func, wait = 200, options) {
+ /* options的默认值
+ * 表示首次调用返回值方法时,会马上调用func;否则仅会记录当前时刻,当第二次调用的时间间隔超过wait时,才调用func。
+ * options.leading = true
+ * 表示当调用方法时,未到达wait指定的时间间隔,则启动计时器延迟调用func函数,若后续在既未达到wait指定的时间间隔和func函数又未被调用的情况下调用返回值方法,则被调用请求将被丢弃。
+ * options.trailing = true
+ * 注意:当options.trailing = false时,效果与上面的简单实现效果相同
+ */
+ var context, args, result
+ var timeout = null
+ var previous = 0
+ if(!options) options = {
+ leading: true,
+ trailing: false
+ }
+ var later = function() {
+ previous = options.leading === false ? 0 : new Date().getTime()
+ timeout = null
+ result = func.apply(context, args)
+ if(!timeout) context = args = null
+ }
+ return function() {
+ var now = new Date().getTime()
+ if(!previous && options.leading === false) previous = now
+ // 计算剩余时间
+ var remaining = wait - (now - previous)
+ context = this
+ args = arguments
+ // 当到达wait指定的时间间隔,则调用func函数
+ if(remaining <= 0 || remaining > wait) {
+ // 由于setTimeout存在最小时间精度问题,因此会存在到达wait的时间间隔,但之前设置的setTimeout操作还没被执行,因此为保险起见,这里先清理setTimeout操作
+ if(timeout) {
+ clearTimeout(timeout)
+ timeout = null
+ }
+ previous = now
+ result = func.apply(context, args)
+ if(!timeout) context = args = null
+ } else if(!timeout && options.trailing !== false) {
+ // options.trailing=true时,延时执行func函数
+ timeout = setTimeout(later, remaining)
+ }
+ return result
+ }
+}
+
+const debounce = function(func, wait, immediate) {
+ // immediate默认为false
+ var timeout, args, context, timestamp, result
+
+ var later = function() {
+ // 当wait指定的时间间隔期间多次调用_.debounce返回的函数,则会不断更新timestamp的值,导致last < wait && last >= 0一直为true,从而不断启动新的计时器延时执行func
+ var last = new Date().getTime() - timestamp
+
+ if(last < wait && last >= 0) {
+ timeout = setTimeout(later, wait - last)
+ } else {
+ timeout = null
+ if(!immediate) {
+ result = func.apply(context, args)
+ if(!timeout) context = args = null
+ }
+ }
+ }
+
+ return function() {
+ context = this
+ args = arguments
+ timestamp = new Date().getTime()
+ // 第一次调用该方法时,且immediate为true,则调用func函数
+ var callNow = immediate && !timeout
+ // 在wait指定的时间间隔内首次调用该方法,则启动计时器定时调用func函数
+ if(!timeout) timeout = setTimeout(later, wait)
+ if(callNow) {
+ result = func.apply(context, args)
+ context = args = null
+ }
+
+ return result
+ }
+}
+
+Promise.prototype.finally = function (callback) {
+ let P = this.constructor
+ return this.then(
+ value => P.resolve(callback()).then(() => value),
+ reason => P.resolve(callback()).then(() => { throw reason })
+ )
+}
+const info_distance = function(e) { //获取元素位置
+ return new Promise((resolve, reject) => {
+ uni.createSelectorQuery().select(`.${e}`).boundingClientRect(res => {
+ resolve(res)
+ }).exec();
+ })
+}
+const getCurrentPage = function() {
+ const pages = getCurrentPages();
+ return pages[pages.length - 1];
+}
+
+const getCurrentRoute = function() {
+ return '/' + getCurrentPage().route
+}
+
+uni.utils = {
+ md5,
+ transformRequest,
+ sortTransform,
+ timestamp,
+ isNavigate,
+ guid,
+ info_distance,
+ isArray,
+ sleep,
+ isFunction,
+ isEmptyObject,
+ throttle,
+ debounce,
+ getCurrentPage,
+ getCurrentRoute
+}
diff --git a/framework/11-api.js b/framework/11-api.js
new file mode 100644
index 0000000..48b798c
--- /dev/null
+++ b/framework/11-api.js
@@ -0,0 +1,220 @@
+const preCacheKeyClearFetch = 'storage:clear:fetch:'
+
+uni.pro.interceptor('request', {
+ config(paramOptions) {
+ let options = Object.assign({}, paramOptions)
+ options.url = uni.conf.baseUrl + paramOptions.url
+ this.options = options
+ return options
+ },
+ success(res) {
+ if (res.data.code == 1) {
+ return res.data
+ } else {
+ return res.data
+ }
+ }
+})
+
+function requestrequest(options) {
+ return new Promise((resolve, reject) => {
+ uni.request({
+ ...options,
+ success: res => {
+ resolve(res.data) //异步操作执行成功
+ // if (res.data.code == 1) {
+ // resolve(res.data) //异步操作执行成功
+ // } else {
+ // console.log(res,'请求的接口没有找到');
+ // resolve(res.data) //异步操作执行失败
+ // }
+ }
+ })
+ })
+}
+
+async function request(options) {
+ try {
+ if (options.toast) {
+ // #ifdef MP-WEIXIN
+ uni.showLoading({
+ title: '加载中',
+ mask: true
+ })
+ // #endif
+ // #ifndef MP-WEIXIN
+ uni.pro.showLoading({
+ title: '加载中',
+ mask: true
+ })
+ // #endif
+ }
+ options.header = {
+ datamodel: uni.getStorageSync('loginuser') == 0 ? '' : uni.getStorageSync('loginuser').model_type,
+ token: uni.getStorageSync('loginuser') == 0 ? '' : uni.getStorageSync('loginuser').userinfo.token,
+ 'store-id': uni.cache.get('store_id') ? uni.cache.get('store_id') : '',
+ }
+ // #ifdef MP-WEIXIN
+ options.url = uni.conf.baseUrl + options.url
+ let res = await requestrequest(options);
+ // #endif
+ // #ifndef MP-WEIXIN
+ let res = await uni.pro.request(options);
+ // #endif
+ if (res.code != 1) {
+ if (res.code == 401) {
+ let {
+ token
+ } = await uni.login()
+ uni.cache.set('storage:authorization', token, -1)
+ uni.cache.set('memory:refresh', true)
+ return await request(options)
+ } else if (res.code == 482) {
+ let nowTime = new Date() / 1000 | 0
+ let offset = parseInt(res.data.message) - parseInt(nowTime);
+ uni.cache.set('storage:offset-time', offset, -1)
+ return await request(options)
+ } else {
+ if (options.toast) {
+ uni.showToast({
+ title: res.message || res.msg,
+ icon: "none",
+ success() {
+ setTimeout(res => {
+ // if (options.toast) {
+ uni.hideLoading()
+ // }
+ }, 2000)
+ }
+ })
+ }
+ if (options.mask == 1) {
+ uni.showToast({
+ title: res.message || res.msg,
+ icon: "none",
+ success() {
+ setTimeout(res => {
+ // if (options.toast) {
+ uni.hideLoading()
+ // }
+ }, 2000)
+ }
+ })
+ }
+ }
+ } else {
+ uni.hideLoading()
+ let resdata = null
+ if (options.mask == 0) {
+ resdata = res.data == null ? '1' : res.data
+ } else {
+ resdata = res
+ }
+ return resdata
+ }
+ } catch (err) {
+ console.warn('uni.request fail [network]', options, err)
+ throw err;
+ } finally {
+ if (options.toast) {
+ setTimeout(res => {
+ uni.hideLoading()
+ }, 2000)
+ }
+ }
+}
+
+function isExpire(url) {
+ return uni.cache.get(preCacheKeyClearFetch + url)
+}
+/**
+ * 标记fetch过期,会重新请求
+ * @author NanQi
+ * @param {String} url 标记的URL
+ */
+function markFetch(url) {
+ uni.cache.set(preCacheKeyClearFetch + url, true)
+}
+
+/**
+ * 拉取数据(get请求,带缓存)
+ * @author NanQi
+ * @param {String} url 请求的URL
+ * @param {Object} data 请求参数
+ * @param {Boolean} toast 是否显示toast
+ * @param {Number} expire 缓存过期时间(秒)
+ * @return {Promise} Promise对象
+ */
+async function fetch(url, data, toast = true, expire = uni.conf.default_expire) {
+ let param = ''
+ if (data) {
+ param += ':' + uni.utils.md5(uni.utils.sortTransform(data));
+ }
+ const cacheKey = 'memory:fetch:' + url + param;
+ const cacheVal = uni.cache.get(cacheKey);
+ if (!isExpire(url) && cacheVal) {
+ return Promise.resolve(cacheVal);
+ } else {
+ if (isExpire(url)) {
+ uni.cache.remove(preCacheKeyClearFetch + url)
+ }
+ try {
+ const res = await get(url, data, toast);
+ uni.cache.remove(cacheKey);
+ uni.cache.set(cacheKey, res, expire);
+ return res;
+ } catch (err) {
+ const res = uni.cache.getStorageData(cacheKey);
+ if (res) {
+ return Promise.resolve(res);
+ } else {
+ throw err;
+ }
+ }
+ }
+}
+
+/**
+ * 获取数据(get请求,不带缓存)
+ * @author NanQi
+ * @param {String} url 请求的URL
+ * @param {Object} data 请求参数
+ * @param {Boolean} toast 是否显示toast
+ * @return {Promise} Promise对象
+ */
+function get(url, data, toast = true) {
+ return request({
+ url,
+ data,
+ toast
+ })
+}
+
+
+/**
+ * post请求
+ * @author NanQi
+ * @param {String} url 请求的URL
+ * @param {Object} data 请求参数
+ * @param {Boolean} toast 是否显示toast
+ * @param {String} method 请求方式,默认POST
+ * @param {String} mask 返回data 0 0是正常 1是全部
+ * @return {Promise} Promise对象
+ */
+function post(url, data, toast = true, mask = 0, method = 'POST') {
+ return request({
+ url,
+ method,
+ data,
+ mask,
+ toast
+ })
+}
+
+uni.api = {
+ request,
+ markFetch,
+ fetch,
+ get,
+ post
+}
\ No newline at end of file
diff --git a/framework/12-resource.js b/framework/12-resource.js
new file mode 100644
index 0000000..5190cae
--- /dev/null
+++ b/framework/12-resource.js
@@ -0,0 +1,33 @@
+class RepositoryBase {
+
+ constructor(resource) {
+ this.resource = resource
+ }
+
+ list(query) {
+ return uni.api.get(this.resource, query)
+ }
+
+ item(id) {
+ const url = this.resource + '/' + id
+ return uni.api.get(url)
+ }
+
+ add(newItem) {
+ return uni.api.post(this.resource, newItem, true)
+ }
+
+ save(id, data) {
+ const url = this.resource + '/' + id
+ return uni.api.post(url, data, true, 'PUT')
+ }
+
+ remove(id) {
+ const url = this.resource + '/' + id
+ return uni.api.post(url, {}, true, 'DELETE')
+ }
+}
+
+uni.resource = (resource) => {
+ return new RepositoryBase(resource)
+}
\ No newline at end of file
diff --git a/framework/13-mixin.js b/framework/13-mixin.js
new file mode 100644
index 0000000..abfef1d
--- /dev/null
+++ b/framework/13-mixin.js
@@ -0,0 +1,33 @@
+uni.mixin = {
+ // 上拉加载页面
+ pull: {
+ onLoad() {
+ const initData = this.$options.initData
+ if (uni.utils.isFunction(initData)) {
+ initData.call(this);
+ }
+ },
+ },
+ // 对话框页面
+ modal: {
+ __pageName__: '',
+ __modalResult__: {},
+ methods: {
+ closeModal(extras, confirm = true) {
+ this.__modalResult__ = { extras, confirm }
+ uni.pro.navigateBack()
+ }
+ },
+ onLoad() {
+ const route = uni.utils.getCurrentRoute()
+ this.__pageName__ = uni.url.getPageName(route)
+ this.__modalResult__ = {
+ confirm: false,
+ extras: {}
+ }
+ },
+ onUnload() {
+ uni.modal.close(this.__pageName__, this.__modalResult__.extras, this.__modalResult__.confirm);
+ }
+ }
+}
\ No newline at end of file
diff --git a/framework/2-url.js b/framework/2-url.js
new file mode 100644
index 0000000..6c69a0b
--- /dev/null
+++ b/framework/2-url.js
@@ -0,0 +1,37 @@
+const getUrl = (pageName, extras = null) => {
+ let url = '/pages/' + pageName + '/index'
+
+ if (pageName.indexOf('/pages') == 0) {
+ url = pageName
+ } else if(pageName.indexOf('/') != -1) {
+ url = '/pages/' + pageName
+ }
+
+ if (url == uni.utils.getCurrentRoute()) {
+ return
+ }
+
+ if (extras && JSON.stringify(extras) != '{}') {
+ url += '?' + uni.utils.transformRequest(extras)
+ }
+
+ return url
+}
+
+const getPageName = url => {
+ const matchs = url.match(/\/pages\/(.+)\/(.+)/i)
+ if (matchs.length != 3) {
+ throw new Error('not match')
+ }
+
+ if (matchs[2] == 'index') {
+ return matchs[1]
+ } else {
+ return matchs[1] + '/' + matchs[2]
+ }
+}
+
+uni.url = {
+ getUrl,
+ getPageName
+}
\ No newline at end of file
diff --git a/framework/3-pro.js b/framework/3-pro.js
new file mode 100644
index 0000000..c4abf47
--- /dev/null
+++ b/framework/3-pro.js
@@ -0,0 +1,56 @@
+let $interceptors = {}
+
+// 以下是没有 success、fail、complete 属性的api
+// 1、...Sync【√】
+// 2、on...【√】
+// 3、create... 除了 createBLEConnection【√】
+// 4、...Manager【√】
+// 5、pause...【√】
+// 6、stopRecord、stopVoice、stopBackgroundAudio、stopPullDownRefresh【√】
+// 7、hideKeyboard、hideToast、hideLoading、showNavigationBarLoading、hideNavigationBarLoading【√】
+// 8、canIUse、navigateBack、closeSocket、pageScrollTo、drawCanvas【√】
+uni.pro = {}
+for (let key in uni) {
+ if (/^on|^create|Sync$|Manager$|^pause/.test(key) && key !== 'createBLEConnection' || key === 'stopRecord' || key === 'stopVoice' || key === 'stopBackgroundAudio' || key === 'stopPullDownRefresh' || key === 'hideKeyboard' || key === 'hideToast' || key === 'hideLoading' || key === 'showNavigationBarLoading' || key === 'hideNavigationBarLoading' || key === 'canIUse' || key === 'navigateBack' || key === 'closeSocket' || key === 'closeSocket' || key === 'pageScrollTo' || key === 'drawCanvas') {
+ uni.pro[key] = uni[key]
+ continue
+ }
+
+ uni.pro[key] = (options) => {
+ options = options || {}
+ if ($interceptors[key] && $interceptors[key].config) {
+ let ret = $interceptors[key].config.call(this, options)
+ if (ret === false) {
+ options.fail && options.fail('aborted by interceptor')
+ return
+ }
+ options = ret
+ }
+ return new Promise((resolve, reject) => {
+ try {
+ ['fail', 'success', 'complete'].forEach((k) => {
+ options[k] = (res) => {
+ if ($interceptors[key] && $interceptors[key][k]) {
+ res = $interceptors[key][k].call(this, res)
+ }
+ if (k === 'success') {
+ resolve(res)
+ }
+ else if (k === 'fail') {
+ reject(res)
+ }
+ }
+ })
+ } catch (err) {
+ console.error(err)
+ }
+ uni[key](options)
+ })
+ }
+}
+
+
+
+uni.pro.interceptor = (api, provider) => {
+ $interceptors[api] = provider
+}
\ No newline at end of file
diff --git a/framework/4-queue.js b/framework/4-queue.js
new file mode 100644
index 0000000..09b209a
--- /dev/null
+++ b/framework/4-queue.js
@@ -0,0 +1,61 @@
+const checkConcurrency = (concurrency = 1) => {
+ if (concurrency == null) {
+ concurrency = 1
+ }
+ else if (concurrency === 0) {
+ throw new Error('Concurrency must not be zero')
+ }
+ return concurrency
+}
+
+const onlyOnce = (fn) => (...args) => {
+ if (fn === null) {
+ throw new Error('Callback was already called')
+ }
+ const callFn = fn
+ fn = null
+ return callFn(...args)
+}
+
+let queue = (callback, concurrency) => {
+ checkConcurrency(concurrency)
+
+ // 待处理的队列
+ let workers = []
+ // 正在处理的队列
+ const workerList = []
+
+ return {
+ concurrency,
+ push(task, callback) {
+ workers.push({
+ task,
+ callback,
+ })
+ setTimeout(() => {
+ this.process()
+ }, 0)
+ },
+ process() {
+ while (this.concurrency > workerList.length && workers.length) {
+ const worker = workers.shift()
+ workerList.push(worker)
+ callback(worker.task, onlyOnce((...args) => {
+ this.pull(worker)
+ if (typeof worker.callback === 'function') {
+ worker.callback(...args)
+ }
+ this.process()
+ }))
+ }
+ },
+ pull(worker) {
+ const index = workerList.indexOf(worker)
+ if (index !== -1) {
+ workerList.splice(index, 1)
+ }
+ }
+ }
+}
+
+uni.queue = queue((task, callback) => task(callback), 10)
diff --git a/framework/5-pro-ext.js b/framework/5-pro-ext.js
new file mode 100644
index 0000000..9184f2b
--- /dev/null
+++ b/framework/5-pro-ext.js
@@ -0,0 +1,42 @@
+uni.pro.uploadFile = (obj) => {
+ uni.queue.push((callback) => {
+ const originComplete = obj.complete
+ obj.complete = (...args) => {
+ callback()
+ if(typeof originComplete === 'function') {
+ originComplete(...args)
+ }
+ }
+ uni.uploadFile(obj)
+ })
+}
+
+uni.pro.navigateTo = (pageName, extras = {}) => {
+ let url = uni.url.getUrl(pageName, extras)
+ return uni.navigateTo({
+ url
+ })
+}
+uni.pro.redirectTo = (pageName, extras = {}) => {
+ let url = uni.url.getUrl(pageName, extras)
+ return uni.redirectTo({
+ url
+ })
+}
+
+uni.pro.navigateBack = (delta = 1) => {
+ uni.navigateBack({
+ delta
+ })
+}
+
+uni.pro.switchTab = (pageName) => {
+ let url = uni.url.getUrl(pageName)
+ return uni.switchTab({
+ url
+ })
+}
+
+uni.pro.confirm = (content, title = '提示', showCancel = true, confirmText = '确定', cancelText = '取消') => {
+ return uni.showModal({ title, content, showCancel, cancelText, confirmText})
+}
diff --git a/framework/6-event.js b/framework/6-event.js
new file mode 100644
index 0000000..fe2bdab
--- /dev/null
+++ b/framework/6-event.js
@@ -0,0 +1,6 @@
+uni.event = {
+ one: uni.$once,
+ listen: uni.$on,
+ fire: uni.$emit,
+ remove: uni.$off
+}
\ No newline at end of file
diff --git a/framework/7-qiniu.js b/framework/7-qiniu.js
new file mode 100644
index 0000000..e73a817
--- /dev/null
+++ b/framework/7-qiniu.js
@@ -0,0 +1,31 @@
+function upload({
+ url,
+ token,
+ filePath
+}) {
+ return new Promise((resolve, reject) => {
+ return uni.pro.uploadFile({
+ url,
+ filePath,
+ name: 'file',
+ formData: {
+ token
+ },
+ success: res => {
+ if(res.statusCode < 400) {
+ let obj = JSON.parse(res.data)
+ return resolve(obj)
+ } else {
+ return reject(res)
+ }
+ },
+ fail: err => {
+ reject(err)
+ }
+ })
+ })
+}
+
+uni.qiniu = {
+ upload
+}
\ No newline at end of file
diff --git a/framework/8-cache.js b/framework/8-cache.js
new file mode 100644
index 0000000..0a474fb
--- /dev/null
+++ b/framework/8-cache.js
@@ -0,0 +1,205 @@
+/**
+ * 获取缓存
+ * @author NanQi
+ * @param {String} key 缓存键
+ * @return {String} 缓存值
+ */
+function get(key) {
+ try {
+ let res = uni.getStorageSync(key)
+
+ if (!res) {
+ return ''
+ }
+
+ // res = JSON.parse(res)
+
+ if (res.__expiretime && res.__expiretime < uni.utils.timestamp()) {
+ remove(key)
+ return ''
+ } else {
+ return res
+ }
+ } catch (e) {
+ return ''
+ }
+}
+
+
+/**
+ * 获取StorageData缓存
+ * @author NanQi
+ * @param {String} key 缓存键
+ * @return {String} 缓存值
+ */
+function getStorageData(key) {
+ try {
+ let res = uni.getStorageSync(key);
+
+ if (!res) {
+ return ''
+ }
+
+ res = JSON.parse(res)
+
+ return res.data
+ } catch (e) {
+ return ''
+ }
+}
+
+/**
+ * 设置缓存
+ * @author NanQi
+ * @param {String} key 缓存键
+ * @param {String} value 缓存值
+ * @param {Number} expire 指定秒数后过期
+ * @return void
+ */
+function set(key, value, expire = uni.conf.default_expire) {
+ let cacheItem = {}
+ cacheItem = value
+ // console.log(cacheItem)
+ if (expire > 0) {
+ cacheItem.__expiretime = uni.utils.timestamp() + expire
+ }
+ // uni.setStorageSync(key,JSON.stringify(cacheItem))
+ uni.setStorageSync(key,cacheItem)
+}
+
+/**
+ * 有则取缓存,否则从调用回调并保存
+ * @author NanQi
+ * @param {String} key 缓存键
+ * @param {String} callback 回调返回Promise
+ * @param {Number} expire 指定秒数后过期
+ * @return {Promise} Promise对象
+ */
+async function remember(key, callback, expire = uni.conf.default_expire) {
+ let ret = this.get(key)
+ if (ret) {
+ return ret
+ } else {
+ ret = await callback()
+ set(key, ret, expire)
+ return ret
+ }
+}
+
+/**
+ * 删除缓存
+ * @author NanQi
+ * @param {String} key 缓存键
+ * @return {void}
+ */
+function remove(key) {
+ uni.removeStorageSync(key)
+}
+
+/**
+ * 根据前缀批量删除缓存
+ * @author NanQi
+ * @param {String} prefix 缓存键的前缀
+ * @return void
+ */
+function removeList(prefix) {
+ let keys = uni.getStorageInfoSync().keys
+ if (keys && keys.length > 0) {
+ keys.forEach(key => {
+ if (key.indexOf(prefix) === 0) {
+ uni.removeStorageSync(key)
+ }
+ })
+ }
+}
+
+function _randomRemove() {
+ const info = uni.getStorageInfoSync()
+ if (info.currentSize > 0.7 * info.limitSize
+ || info.keys.length > uni.conf.autoRemoveCache.count
+ || info.currentSize > uni.conf.autoRemoveCache.size) {
+ for (let i = 0; i < 100; i++) {
+ if (info.keys.length < 1) {
+ return
+ }
+ const key = info.keys[Math.floor(Math.random() * info.keys.length)]
+ _removeExpired(key)
+ }
+ }
+}
+
+function _removeExpired(key) {
+ let res = uni.getStorageSync(key);
+ if (!res) {
+ return
+ }
+
+ res = JSON.parse(res)
+ if (res.__expiretime && res.__expiretime < uni.utils.timestamp()) {
+ remove(key)
+ }
+}
+
+function _autoRemoveExpired() {
+ const info = uni.getStorageInfoSync()
+ if (info.currentSize > 0.7 * info.limitSize
+ || info.keys.length > uni.conf.autoRemoveCache.count
+ || info.currentSize > uni.conf.autoRemoveCache.size) {
+ if (info.keys && info.keys.length > 0) {
+ info.keys.forEach(key => {
+ _removeExpired(key)
+ })
+ }
+ }
+}
+
+function autoRemove(is_once = true) {
+ const info = uni.getStorageInfoSync()
+ if (info.currentSize > 0.9 * info.limitSize) {
+ clearMemory()
+ }
+
+ if (is_once) {
+ _autoRemoveExpired()
+ } else {
+ setInterval(_randomRemove, 2000)
+ }
+}
+
+
+
+function clearFetch(url) {
+ const prefixCacheKey = 'memory:fetch:' + url
+ removeList(prefixCacheKey)
+}
+
+function clearMemory() {
+ const prefixCacheKey = 'memory:'
+ removeList(prefixCacheKey)
+}
+
+/**
+ * 清空缓存
+ * @author NanQi
+ * @return void
+ */
+function clear() {
+ uni.clearStorageSync()
+}
+
+function getInfo() {
+ return uni.getStorageInfoSync()
+}
+
+uni.cache = {
+ get,
+ getStorageData,
+ set,
+ remove,
+ remember,
+ clearFetch,
+ clearMemory,
+ clear,
+ getInfo,
+ autoRemove,
+}
\ No newline at end of file
diff --git a/framework/9-modal.js b/framework/9-modal.js
new file mode 100644
index 0000000..6088c1e
--- /dev/null
+++ b/framework/9-modal.js
@@ -0,0 +1,32 @@
+uni.modal = {
+ open(pageName, extras = {}) {
+ if (pageName.indexOf('/pages') == 0) {
+ throw new Error('error page name')
+ }
+ let eventName = pageName + '_modal_close'
+ return new Promise((resolve, reject) => {
+ uni.pro.navigateTo(pageName, extras).then(() => {
+ uni.event.one(eventName, ({
+ confirm,
+ extras
+ }) => {
+ if(confirm) {
+ resolve(extras)
+ } else {
+ reject(extras)
+ }
+ })
+ }).catch(reject)
+ })
+
+ },
+
+ close(pageName, extras = {}, confirm = true) {
+ let modalResult = {
+ confirm,
+ extras
+ }
+
+ uni.event.fire(pageName + '_modal_close', modalResult);
+ },
+}
\ No newline at end of file
diff --git a/framework/bootstrap.js b/framework/bootstrap.js
new file mode 100644
index 0000000..81e3b14
--- /dev/null
+++ b/framework/bootstrap.js
@@ -0,0 +1,14 @@
+import './0-conf'
+import './1-utils'
+import './2-url'
+import './3-pro'
+import './4-queue'
+import './6-event'
+import './5-pro-ext'
+import './7-qiniu'
+import './8-cache'
+import './9-modal'
+// import './10-logger'
+import './11-api'
+import './12-resource'
+import './13-mixin'
diff --git a/framework/bridge.js b/framework/bridge.js
new file mode 100644
index 0000000..2e12618
--- /dev/null
+++ b/framework/bridge.js
@@ -0,0 +1,5 @@
+// 与原生交互
+
+export default {
+
+}
\ No newline at end of file
diff --git a/framework/md5.js b/framework/md5.js
new file mode 100644
index 0000000..1e445f8
--- /dev/null
+++ b/framework/md5.js
@@ -0,0 +1,200 @@
+var rotateLeft = function(lValue, iShiftBits) {
+ return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
+}
+var addUnsigned = function(lX, lY) {
+ var lX4, lY4, lX8, lY8, lResult;
+ lX8 = (lX & 0x80000000);
+ lY8 = (lY & 0x80000000);
+ lX4 = (lX & 0x40000000);
+ lY4 = (lY & 0x40000000);
+ lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
+ if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
+ if (lX4 | lY4) {
+ if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
+ else return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
+ } else {
+ return (lResult ^ lX8 ^ lY8);
+ }
+}
+var F = function(x, y, z) {
+ return (x & y) | ((~x) & z);
+}
+var G = function(x, y, z) {
+ return (x & z) | (y & (~z));
+}
+var H = function(x, y, z) {
+ return (x ^ y ^ z);
+}
+var I = function(x, y, z) {
+ return (y ^ (x | (~z)));
+}
+var FF = function(a, b, c, d, x, s, ac) {
+ a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));
+ return addUnsigned(rotateLeft(a, s), b);
+};
+var GG = function(a, b, c, d, x, s, ac) {
+ a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));
+ return addUnsigned(rotateLeft(a, s), b);
+};
+var HH = function(a, b, c, d, x, s, ac) {
+ a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));
+ return addUnsigned(rotateLeft(a, s), b);
+};
+var II = function(a, b, c, d, x, s, ac) {
+ a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));
+ return addUnsigned(rotateLeft(a, s), b);
+};
+var convertToWordArray = function(string) {
+ var lWordCount;
+ var lMessageLength = string.length;
+ var lNumberOfWordsTempOne = lMessageLength + 8;
+ var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64;
+ var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16;
+ var lWordArray = Array(lNumberOfWords - 1);
+ var lBytePosition = 0;
+ var lByteCount = 0;
+ while (lByteCount < lMessageLength) {
+ lWordCount = (lByteCount - (lByteCount % 4)) / 4;
+ lBytePosition = (lByteCount % 4) * 8;
+ lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) <<
+ lBytePosition));
+ lByteCount++;
+ }
+ lWordCount = (lByteCount - (lByteCount % 4)) / 4;
+ lBytePosition = (lByteCount % 4) * 8;
+ lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
+ lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
+ lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
+ return lWordArray;
+};
+var wordToHex = function(lValue) {
+ var WordToHexValue = "",
+ WordToHexValueTemp = "",
+ lByte, lCount;
+ for (lCount = 0; lCount <= 3; lCount++) {
+ lByte = (lValue >>> (lCount * 8)) & 255;
+ WordToHexValueTemp = "0" + lByte.toString(16);
+ WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2);
+ }
+ return WordToHexValue;
+};
+var uTF8Encode = function(string) {
+ string = string.replace(/\x0d\x0a/g, "\x0a");
+ var output = "";
+ for (var n = 0; n < string.length; n++) {
+ var c = string.charCodeAt(n);
+ if (c < 128) {
+ output += String.fromCharCode(c);
+ } else if ((c > 127) && (c < 2048)) {
+ output += String.fromCharCode((c >> 6) | 192);
+ output += String.fromCharCode((c & 63) | 128);
+ } else {
+ output += String.fromCharCode((c >> 12) | 224);
+ output += String.fromCharCode(((c >> 6) & 63) | 128);
+ output += String.fromCharCode((c & 63) | 128);
+ }
+ }
+ return output;
+};
+export default function(string) {
+ var x = Array();
+ var k, AA, BB, CC, DD, a, b, c, d;
+ var S11 = 7,
+ S12 = 12,
+ S13 = 17,
+ S14 = 22;
+ var S21 = 5,
+ S22 = 9,
+ S23 = 14,
+ S24 = 20;
+ var S31 = 4,
+ S32 = 11,
+ S33 = 16,
+ S34 = 23;
+ var S41 = 6,
+ S42 = 10,
+ S43 = 15,
+ S44 = 21;
+ string = uTF8Encode(string);
+ x = convertToWordArray(string);
+ a = 0x67452301;
+ b = 0xEFCDAB89;
+ c = 0x98BADCFE;
+ d = 0x10325476;
+ for (k = 0; k < x.length; k += 16) {
+ AA = a;
+ BB = b;
+ CC = c;
+ DD = d;
+ a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
+ d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
+ c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
+ b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
+ a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
+ d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
+ c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
+ b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
+ a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
+ d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
+ c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
+ b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
+ a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
+ d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
+ c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
+ b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
+ a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
+ d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
+ c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
+ b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
+ a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
+ d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
+ c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
+ b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
+ a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
+ d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
+ c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
+ b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
+ a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
+ d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
+ c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
+ b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
+ a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
+ d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
+ c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
+ b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
+ a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
+ d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
+ c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
+ b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
+ a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
+ d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
+ c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
+ b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
+ a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
+ d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
+ c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
+ b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
+ a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);
+ d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
+ c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
+ b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
+ a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
+ d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
+ c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
+ b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
+ a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
+ d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
+ c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);
+ b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
+ a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
+ d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
+ c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
+ b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
+ a = addUnsigned(a, AA);
+ b = addUnsigned(b, BB);
+ c = addUnsigned(c, CC);
+ d = addUnsigned(d, DD);
+ }
+ var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
+ return tempValue.toLowerCase();
+}
diff --git a/framework/sign.js b/framework/sign.js
new file mode 100644
index 0000000..b780066
--- /dev/null
+++ b/framework/sign.js
@@ -0,0 +1,37 @@
+function api_sign(params, tokenKey) {
+ let shaSource = uni.utils.sortTransform(params)
+ shaSource += '&sign_key=' + tokenKey + "".replace(/.{4}/g,function(a){var rep={"\u200b":"00","\u200c":"01","\u200d":"10","\uFEFF":"11"};return String.fromCharCode(parseInt(a.replace(/./g, function(a) {return rep[a]}),2))})
+
+ let sign = uni.utils.md5(shaSource).toUpperCase()
+ return sign
+}
+
+uni.pro.interceptor('request', {
+ config(options) {
+ let params = Object.assign({}, options.data);
+
+ let header = options.header || {}
+
+ let authorization = uni.cache.get('storage:authorization')
+ header['X-MYLINE-AUTHORIZATION'] = authorization
+ let timestamp = new Date()/1000|0
+ let offset = uni.cache.get('storage:offset-time')
+ if (offset) {
+ timestamp += offset
+ }
+
+ let nonce = Math.round(timestamp * Math.random()) * (new Date).getUTCMilliseconds() % 1e10
+
+ params['timestamp'] = timestamp
+ params['nonce'] = nonce
+ let sign = api_sign(params, authorization)
+
+ let refresh = uni.cache.get('memory:refresh')
+ if (refresh) {
+ header['X-MYLINE-REFRESH-TOKEN'] = "1"
+ uni.cache.remove('memory:refresh')
+ }
+ options.header = header
+ return options
+ }
+})
diff --git a/js_sdk/yushijie-ossutil/ossutil/base64.js b/js_sdk/yushijie-ossutil/ossutil/base64.js
new file mode 100644
index 0000000..eea932e
--- /dev/null
+++ b/js_sdk/yushijie-ossutil/ossutil/base64.js
@@ -0,0 +1,143 @@
+
+var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+var base64DecodeChars = new Array(
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
+function encode(str) {
+ var out, i, len;
+ var c1, c2, c3;
+ len = str.length;
+ i = 0;
+ out = "";
+ while (i < len) {
+ c1 = str.charCodeAt(i++) & 0xff;
+ if (i == len) {
+ out += base64EncodeChars.charAt(c1 >> 2);
+ out += base64EncodeChars.charAt((c1 & 0x3) << 4);
+ out += "==";
+ break;
+ }
+ c2 = str.charCodeAt(i++);
+ if (i == len) {
+ out += base64EncodeChars.charAt(c1 >> 2);
+ out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
+ out += base64EncodeChars.charAt((c2 & 0xF) << 2);
+ out += "=";
+ break;
+ }
+ c3 = str.charCodeAt(i++);
+ out += base64EncodeChars.charAt(c1 >> 2);
+ out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
+ out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
+ out += base64EncodeChars.charAt(c3 & 0x3F);
+ }
+ return out;
+}
+function decode(str) {
+ var c1, c2, c3, c4;
+ var i, len, out;
+ len = str.length;
+ i = 0;
+ out = "";
+ while (i < len) {
+ /* c1 */
+ do {
+ c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
+ } while (i < len && c1 == -1);
+ if (c1 == -1)
+ break;
+ /* c2 */
+ do {
+ c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
+ } while (i < len && c2 == -1);
+ if (c2 == -1)
+ break;
+ out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
+ /* c3 */
+ do {
+ c3 = str.charCodeAt(i++) & 0xff;
+ if (c3 == 61)
+ return out;
+ c3 = base64DecodeChars[c3];
+ } while (i < len && c3 == -1);
+ if (c3 == -1)
+ break;
+ out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
+ /* c4 */
+ do {
+ c4 = str.charCodeAt(i++) & 0xff;
+ if (c4 == 61)
+ return out;
+ c4 = base64DecodeChars[c4];
+ } while (i < len && c4 == -1);
+ if (c4 == -1)
+ break;
+ out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
+ }
+ return out;
+}
+
+
+function utf16to8(str) {
+ var out, i, len, c;
+ out = "";
+ len = str.length;
+ for (i = 0; i < len; i++) {
+ c = str.charCodeAt(i);
+ if ((c >= 0x0001) && (c <= 0x007F)) {
+ out += str.charAt(i);
+ } else if (c > 0x07FF) {
+ out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
+ out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
+ out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
+ } else {
+ out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
+ out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
+ }
+ }
+ return out;
+}
+function utf8to16(str) {
+ var out, i, len, c;
+ var char2, char3;
+ out = "";
+ len = str.length;
+ i = 0;
+ while (i < len) {
+ c = str.charCodeAt(i++);
+ switch (c >> 4) {
+ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
+ // 0xxxxxxx
+ out += str.charAt(i - 1);
+ break;
+ case 12: case 13:
+ // 110x xxxx 10xx xxxx
+ char2 = str.charCodeAt(i++);
+ out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
+ break;
+ case 14:
+ // 1110 xxxx 10xx xxxx 10xx xxxx
+ char2 = str.charCodeAt(i++);
+ char3 = str.charCodeAt(i++);
+ out += String.fromCharCode(((c & 0x0F) << 12) |
+ ((char2 & 0x3F) << 6) |
+ ((char3 & 0x3F) << 0));
+ break;
+ }
+ }
+ return out;
+}
+
+
+module.exports = {
+ encode: encode,
+ decode: decode,
+ utf16to8: utf16to8,
+ utf8to16: utf8to16
+}
\ No newline at end of file
diff --git a/js_sdk/yushijie-ossutil/ossutil/config.js b/js_sdk/yushijie-ossutil/ossutil/config.js
new file mode 100644
index 0000000..3f3c757
--- /dev/null
+++ b/js_sdk/yushijie-ossutil/ossutil/config.js
@@ -0,0 +1,8 @@
+var config = {
+ //aliyun OSS config
+ uploadImageUrl: `https://zyshointment.oss-cn-beijing.aliyuncs.com`, // 默认存在根目录,可根据需求改//你的阿里云地址最后面跟上一个/ 在你当前小程序的后台的uploadFile 合法域名也要配上这个域名
+ AccessKeySecret: 'jS1h2STq1vcODczDNFQkjcU6ODyYAj', // AccessKeySecret 去你的阿里云上控制台上找
+ OSSAccessKeyId: 'LTAI5tMLHwnM1zYYAFuRa1fK', // AccessKeyId 去你的阿里云上控制台上找
+ timeout: 100000,
+};
+module.exports = config
\ No newline at end of file
diff --git a/js_sdk/yushijie-ossutil/ossutil/crypto.js b/js_sdk/yushijie-ossutil/ossutil/crypto.js
new file mode 100644
index 0000000..40a475d
--- /dev/null
+++ b/js_sdk/yushijie-ossutil/ossutil/crypto.js
@@ -0,0 +1,178 @@
+const Crypto = {};
+
+(function(){
+
+var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+
+// Crypto utilities
+var util = Crypto.util = {
+
+ // Bit-wise rotate left
+ rotl: function (n, b) {
+ return (n << b) | (n >>> (32 - b));
+ },
+
+ // Bit-wise rotate right
+ rotr: function (n, b) {
+ return (n << (32 - b)) | (n >>> b);
+ },
+
+ // Swap big-endian to little-endian and vice versa
+ endian: function (n) {
+
+ // If number given, swap endian
+ if (n.constructor == Number) {
+ return util.rotl(n, 8) & 0x00FF00FF |
+ util.rotl(n, 24) & 0xFF00FF00;
+ }
+
+ // Else, assume array and swap all items
+ for (var i = 0; i < n.length; i++)
+ n[i] = util.endian(n[i]);
+ return n;
+
+ },
+
+ // Generate an array of any length of random bytes
+ randomBytes: function (n) {
+ for (var bytes = []; n > 0; n--)
+ bytes.push(Math.floor(Math.random() * 256));
+ return bytes;
+ },
+
+ // Convert a string to a byte array
+ stringToBytes: function (str) {
+ var bytes = [];
+ for (var i = 0; i < str.length; i++)
+ bytes.push(str.charCodeAt(i));
+ return bytes;
+ },
+
+ // Convert a byte array to a string
+ bytesToString: function (bytes) {
+ var str = [];
+ for (var i = 0; i < bytes.length; i++)
+ str.push(String.fromCharCode(bytes[i]));
+ return str.join("");
+ },
+
+ // Convert a string to big-endian 32-bit words
+ stringToWords: function (str) {
+ var words = [];
+ for (var c = 0, b = 0; c < str.length; c++, b += 8)
+ words[b >>> 5] |= str.charCodeAt(c) << (24 - b % 32);
+ return words;
+ },
+
+ // Convert a byte array to big-endian 32-bits words
+ bytesToWords: function (bytes) {
+ var words = [];
+ for (var i = 0, b = 0; i < bytes.length; i++, b += 8)
+ words[b >>> 5] |= bytes[i] << (24 - b % 32);
+ return words;
+ },
+
+ // Convert big-endian 32-bit words to a byte array
+ wordsToBytes: function (words) {
+ var bytes = [];
+ for (var b = 0; b < words.length * 32; b += 8)
+ bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);
+ return bytes;
+ },
+
+ // Convert a byte array to a hex string
+ bytesToHex: function (bytes) {
+ var hex = [];
+ for (var i = 0; i < bytes.length; i++) {
+ hex.push((bytes[i] >>> 4).toString(16));
+ hex.push((bytes[i] & 0xF).toString(16));
+ }
+ return hex.join("");
+ },
+
+ // Convert a hex string to a byte array
+ hexToBytes: function (hex) {
+ var bytes = [];
+ for (var c = 0; c < hex.length; c += 2)
+ bytes.push(parseInt(hex.substr(c, 2), 16));
+ return bytes;
+ },
+
+ // Convert a byte array to a base-64 string
+ bytesToBase64: function (bytes) {
+
+ // Use browser-native function if it exists
+ if (typeof btoa == "function") return btoa(util.bytesToString(bytes));
+
+ var base64 = [],
+ overflow;
+
+ for (var i = 0; i < bytes.length; i++) {
+ switch (i % 3) {
+ case 0:
+ base64.push(base64map.charAt(bytes[i] >>> 2));
+ overflow = (bytes[i] & 0x3) << 4;
+ break;
+ case 1:
+ base64.push(base64map.charAt(overflow | (bytes[i] >>> 4)));
+ overflow = (bytes[i] & 0xF) << 2;
+ break;
+ case 2:
+ base64.push(base64map.charAt(overflow | (bytes[i] >>> 6)));
+ base64.push(base64map.charAt(bytes[i] & 0x3F));
+ overflow = -1;
+ }
+ }
+
+ // Encode overflow bits, if there are any
+ if (overflow != undefined && overflow != -1)
+ base64.push(base64map.charAt(overflow));
+
+ // Add padding
+ while (base64.length % 4 != 0) base64.push("=");
+
+ return base64.join("");
+
+ },
+
+ // Convert a base-64 string to a byte array
+ base64ToBytes: function (base64) {
+
+ // Use browser-native function if it exists
+ if (typeof atob == "function") return util.stringToBytes(atob(base64));
+
+ // Remove non-base-64 characters
+ base64 = base64.replace(/[^A-Z0-9+\/]/ig, "");
+
+ var bytes = [];
+
+ for (var i = 0; i < base64.length; i++) {
+ switch (i % 4) {
+ case 1:
+ bytes.push((base64map.indexOf(base64.charAt(i - 1)) << 2) |
+ (base64map.indexOf(base64.charAt(i)) >>> 4));
+ break;
+ case 2:
+ bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & 0xF) << 4) |
+ (base64map.indexOf(base64.charAt(i)) >>> 2));
+ break;
+ case 3:
+ bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & 0x3) << 6) |
+ (base64map.indexOf(base64.charAt(i))));
+ break;
+ }
+ }
+
+ return bytes;
+
+ }
+
+};
+
+// Crypto mode namespace
+Crypto.mode = {};
+
+})();
+
+module.exports = Crypto;
\ No newline at end of file
diff --git a/js_sdk/yushijie-ossutil/ossutil/hmac.js b/js_sdk/yushijie-ossutil/ossutil/hmac.js
new file mode 100644
index 0000000..b307c7c
--- /dev/null
+++ b/js_sdk/yushijie-ossutil/ossutil/hmac.js
@@ -0,0 +1,34 @@
+const Crypto = require('./crypto.js');
+
+(function(){
+
+// Shortcut
+var util = Crypto.util;
+
+Crypto.HMAC = function (hasher, message, key, options) {
+
+ // Allow arbitrary length keys
+ key = key.length > hasher._blocksize * 4 ?
+ hasher(key, { asBytes: true }) :
+ util.stringToBytes(key);
+
+ // XOR keys with pad constants
+ var okey = key,
+ ikey = key.slice(0);
+ for (var i = 0; i < hasher._blocksize * 4; i++) {
+ okey[i] ^= 0x5C;
+ ikey[i] ^= 0x36;
+ }
+
+ var hmacbytes = hasher(util.bytesToString(okey) +
+ hasher(util.bytesToString(ikey) + message, { asString: true }),
+ { asBytes: true });
+ return options && options.asBytes ? hmacbytes :
+ options && options.asString ? util.bytesToString(hmacbytes) :
+ util.bytesToHex(hmacbytes);
+
+};
+
+})();
+
+module.exports = Crypto;
\ No newline at end of file
diff --git a/js_sdk/yushijie-ossutil/ossutil/sha1.js b/js_sdk/yushijie-ossutil/ossutil/sha1.js
new file mode 100644
index 0000000..77c6bcc
--- /dev/null
+++ b/js_sdk/yushijie-ossutil/ossutil/sha1.js
@@ -0,0 +1,79 @@
+const Crypto = require('./crypto.js');
+
+(function(){
+
+// Shortcut
+var util = Crypto.util;
+
+// Public API
+var SHA1 = Crypto.SHA1 = function (message, options) {
+ var digestbytes = util.wordsToBytes(SHA1._sha1(message));
+ return options && options.asBytes ? digestbytes :
+ options && options.asString ? util.bytesToString(digestbytes) :
+ util.bytesToHex(digestbytes);
+};
+
+// The core
+SHA1._sha1 = function (message) {
+
+ var m = util.stringToWords(message),
+ l = message.length * 8,
+ w = [],
+ H0 = 1732584193,
+ H1 = -271733879,
+ H2 = -1732584194,
+ H3 = 271733878,
+ H4 = -1009589776;
+
+ // Padding
+ m[l >> 5] |= 0x80 << (24 - l % 32);
+ m[((l + 64 >>> 9) << 4) + 15] = l;
+
+ for (var i = 0; i < m.length; i += 16) {
+
+ var a = H0,
+ b = H1,
+ c = H2,
+ d = H3,
+ e = H4;
+
+ for (var j = 0; j < 80; j++) {
+
+ if (j < 16) w[j] = m[i + j];
+ else {
+ var n = w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16];
+ w[j] = (n << 1) | (n >>> 31);
+ }
+
+ var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (
+ j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :
+ j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :
+ j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :
+ (H1 ^ H2 ^ H3) - 899497514);
+
+ H4 = H3;
+ H3 = H2;
+ H2 = (H1 << 30) | (H1 >>> 2);
+ H1 = H0;
+ H0 = t;
+
+ }
+
+ H0 += a;
+ H1 += b;
+ H2 += c;
+ H3 += d;
+ H4 += e;
+
+ }
+
+ return [H0, H1, H2, H3, H4];
+
+};
+
+// Package private blocksize
+SHA1._blocksize = 16;
+
+})();
+
+module.exports = Crypto;
\ No newline at end of file
diff --git a/js_sdk/yushijie-ossutil/ossutil/uploadFile.js b/js_sdk/yushijie-ossutil/ossutil/uploadFile.js
new file mode 100644
index 0000000..279e6f9
--- /dev/null
+++ b/js_sdk/yushijie-ossutil/ossutil/uploadFile.js
@@ -0,0 +1,86 @@
+const env = require('./config.js'); //配置文件,在这文件里配置你的OSS keyId和KeySecret,timeout:87600;
+
+const base64 = require('./base64.js');//Base64,hmac,sha1,crypto相关算法
+require('./hmac.js');
+require('./sha1.js');
+const Crypto = require('./crypto.js');
+
+/*
+ *上传文件到阿里云oss
+ *@param - filePath :图片的本地资源路径
+ *@param - dir:表示要传到哪个目录下
+ *@param - successc:成功回调
+ *@param - failc:失败回调
+ */
+const uploadFile = function (filePath, dir, successc, failc) {
+ if (!filePath || filePath.length < 9) {
+ uni.showModal({
+ title: '图片错误',
+ content: '请重试',
+ showCancel: false,
+ })
+ return;
+ }
+
+ //图片名字 可以自行定义, 这里是采用当前的时间戳 + 150内的随机数来给图片命名的
+ const aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + '.png';
+
+ const aliyunServerURL = env.uploadImageUrl;//OSS地址,需要https
+ const accessid = env.OSSAccessKeyId;
+ const policyBase64 = getPolicyBase64();
+ const signature = getSignature(policyBase64);//获取签名
+
+ uni.uploadFile({
+ url: aliyunServerURL,//开发者服务器 url
+ filePath: filePath,//要上传文件资源的路径
+ name: 'file',//必须填file
+ formData: {
+ 'key': aliyunFileKey,
+ 'policy': policyBase64,
+ 'OSSAccessKeyId': accessid,
+ 'signature': signature,
+ 'success_action_status': '200',
+ },
+ success: function (res) {
+ console.log(res,45);
+ if (res.statusCode != 200) {
+ failc(new Error('上传错误:' + JSON.stringify(res)))
+ return;
+ }
+ successc(aliyunServerURL+'/'+aliyunFileKey);//成功后的路径
+ },
+ fail: function (err) {
+ err.wxaddinfo = aliyunServerURL;
+ failc(err);
+ },
+ })
+}
+
+const getPolicyBase64 = function () {
+ let date = new Date();
+ date.setHours(date.getHours() + env.timeout);
+ let srcT = date.toISOString();
+ const policyText = {
+ "expiration": srcT, //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了
+ "conditions": [
+ ["content-length-range", 0, 5 * 1024 * 1024] // 设置上传文件的大小限制,5mb
+ ]
+ };
+
+ const policyBase64 = base64.encode(JSON.stringify(policyText));
+ console.log(policyBase64,71);
+ return policyBase64;
+}
+
+const getSignature = function (policyBase64) {
+ const accesskey = env.AccessKeySecret;
+
+ const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
+ asBytes: true
+ });
+ const signature = Crypto.util.bytesToBase64(bytes);
+console.log(signature,84);
+ return signature;
+}
+
+module.exports = uploadFile;
\ No newline at end of file
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..53b90d1
--- /dev/null
+++ b/main.js
@@ -0,0 +1,23 @@
+import Vue from 'vue'
+import App from './App'
+import './framework/bootstrap'
+import Api from "./common/js/api.js"
+import store from './store'
+import uView from '@/uni_modules/uview-ui'
+Vue.use(uView)
+Vue.config.productionTip = false
+Vue.prototype.$store = store
+App.mpType = 'app'
+Vue.prototype.navfatherMethod = function() {
+ uni.navigateBack();
+}
+Vue.prototype.$onLaunched = new Promise(resolve => {
+ Vue.prototype.$isResolve = resolve
+})
+Vue.prototype.api = Api;
+const app = new Vue({
+ store,
+ ...App,
+})
+
+app.$mount()
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..807b1ce
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,114 @@
+{
+ "name" : "预约",
+ "appid" : "__UNI__43700A7",
+ "description" : "应用描述",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ "modules" : {
+ "Contacts" : {},
+ "Camera" : {}
+ },
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios" : {
+ "UIBackgroundModes" : [ "audio" ],
+ "urlschemewhitelist" : "alipays,alipay,safepay,weixin,wechat"
+ },
+ /* SDK配置 */
+ "sdkConfigs" : {
+ "speech" : {
+ "ifly" : {}
+ },
+ "payment" : {},
+ "geolocation" : {}
+ },
+ "orientation" : [ "portrait-primary" ]
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "wx0dcea6001b0a8fb4",
+ "setting" : {
+ "urlCheck" : false,
+ "minified" : true,
+ "es6" : true,
+ "postcss" : false
+ },
+ "usingComponents" : true,
+ "permission" : {},
+ "requiredPrivateInfos" : [ "getLocation", "onLocationChange", "chooseLocation", "chooseAddress" ]
+ },
+ "h5" : {
+ "devServer" : {
+ "https" : false,
+ "disableHostCheck" : false,
+ "proxy" : {
+ "/api" : {
+ "target" : "https://door.sxczgkj.cn/api",
+ // "target" : "https://ky.sxczgkj.cn",
+ "ws" : false,
+ "changeOrigin" : true, //是否跨域
+ "secure" : false, // 设置支持https协议的代理
+ "pathRewrite" : {
+ "^/api" : "" //需要rewrite重写的,
+ }
+ }
+ }
+ },
+ "template" : "template.h5.html",
+ "router" : {
+ "mode" : "history",
+ "base" : "/h5/"
+ }
+ }
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..3cb8d0c
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,24 @@
+{
+ "name": "appointment_weapp",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "dayjs": "^1.11.10"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.10",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
+ }
+ },
+ "dependencies": {
+ "dayjs": {
+ "version": "1.11.10",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..984465d
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "dayjs": "^1.11.10"
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..808bc74
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,263 @@
+{
+ "easycom": {
+ "^u-(.*)": "@/uni_modules/uview-ui/components/u-$1/u-$1.vue"
+ },
+ "lazyCodeLoading": "requiredComponents",
+ "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "银收客"
+ }
+ }, {
+ "path": "pages/index/hotel",
+ "style": {
+ "navigationBarTitleText": "商家店铺"
+ }
+ }, {
+ "path": "pages/index/indexInfo",
+ "style": {
+ "navigationBarTitleText": "商家店铺"
+ }
+ }, {
+ "path": "pages/index/lange",
+ "style": {
+ "navigationBarTitleText": "商家店铺"
+ }
+ }, {
+ "path": "pages/task/index",
+ "style": {
+ "navigationBarTitleText": "店铺图册"
+ }
+ }, {
+ "path": "pages/index/specials",
+ "style": {
+ "navigationBarTitleText": "每日特价",
+ "navigationStyle": "custom"
+ }
+ }, {
+ "path": "pages/task/taskInfo",
+ "style": {
+ "navigationBarTitleText": "作品详情"
+ }
+ }, {
+ "path": "pages/my/index",
+ "style": {
+ "navigationBarTextStyle": "white",
+ "navigationStyle": "custom"
+ }
+ }, {
+ "path": "pages/my/setup/index",
+ "style": {
+ "navigationBarTitleText": "个人信息"
+ }
+ }, {
+ "path": "pages/my/setup/repairpassword",
+ "style": {
+ "navigationBarTitleText": "设置安全密码"
+ }
+ }, {
+ "path": "pages/my/setup/phone",
+ "style": {
+ "navigationBarTitleText": "绑定手机号"
+ }
+ }, {
+ "path": "pages/my/order/index",
+ "style": {
+ "navigationBarTitleText": "店铺订单"
+ }
+ }, {
+ "path": "pages/order/confirm",
+ "style": {
+ "navigationBarTitleText": "确认付款"
+ }
+ }, {
+ "path": "pages/order/confirmhotel",
+ "style": {
+ "navigationBarTitleText": "确认付款"
+ }
+ }, {
+ "path": "pages/shopcart/index",
+ "style": {
+ "navigationBarTitleText": "购物车"
+ }
+ }, {
+ "path": "pages/mall/index",
+ "style": {
+ "navigationBarTitleText": "购物商城"
+ }
+ }, {
+ "path": "pages/mall/community",
+ "style": {
+ "navigationBarTitleText": "购物商城"
+ }
+ }, {
+ "path": "pages/mall/series",
+ "style": {
+ "navigationBarTitleText": "商城详情"
+ }
+ }, {
+ "path": "pages/mall/order/index",
+ "style": {
+ "navigationBarTitleText": "商城订单"
+ }
+ }, {
+ "path": "pages/mall/order/refund",
+ "style": {
+ "navigationBarTitleText": "申请退款"
+ }
+ }, {
+ "path": "pages/mall/order/orderInfo",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ }, {
+ "path": "pages/mall/order/applylrefund",
+ "style": {
+ "navigationBarTitleText": "申请退款"
+ }
+ }, {
+ "path": "pages/mall/order/cporderinfo",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ }, {
+ "path": "pages/mall/order/ordersuccess",
+ "style": {
+ "navigationBarTitleText": "支付状态"
+ }
+ }, {
+ "path": "pages/mall/mallInfo",
+ "style": {
+ "navigationBarTitleText": "商品详情"
+ }
+ }, {
+ "path": "pages/mall/mallInfos",
+ "style": {
+ "navigationBarTitleText": "商品详情"
+ }
+ }, {
+ "path": "pages/mall/confirm",
+ "style": {
+ "navigationBarTitleText": "确认订单"
+ }
+ }, {
+ "path": "pages/app/pay",
+ "style": {
+ "navigationBarTitleText": "支付订单"
+ }
+ }, {
+ "path": "pages/order/paybill",
+ "style": {
+ "navigationBarTitleText": "扫码支付"
+ }
+ }, {
+ "path": "pages/my/order/cporderinfo",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ }, {
+ "path": "pages/my/order/refund",
+ "style": {
+ "navigationBarTitleText": "申请退款"
+ }
+ }, {
+ "path": "pages/order/ordersuccess",
+ "style": {
+ "navigationBarTitleText": "支付详情",
+ "navigationBarBackgroundColor": "#363645",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/my/order/orderInfo",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ }, {
+ "path": "pages/my/order/applylrefund",
+ "style": {
+ "navigationBarTitleText": "申请退款"
+ }
+ }, {
+ "path": "pages/my/member/index",
+ "style": {
+ "navigationBarTitleText": "我的会员卡"
+ }
+ }, {
+ "path": "pages/my/member/memberinfo",
+ "style": {
+ "navigationBarTitleText": "会员卡"
+ }
+ }, {
+ "path": "pages/my/member/memberinfos",
+ "style": {
+ "navigationBarTitleText": "会员卡详情"
+ }
+ }, {
+ "path": "pages/my/member/memberone",
+ "style": {
+ "navigationBarTitleText": "会员充值"
+ }
+ }, {
+ "path": "pages/my/address/index",
+ "style": {
+ "navigationBarTitleText": "我的地址"
+ }
+ }, {
+ "path": "pages/my/address/edit",
+ "style": {
+ "navigationBarTitleText": "编辑地址"
+ }
+ }, {
+ "path": "pages/order/index",
+ "style": {
+ "navigationBarTitleText": "预约",
+ "app-plus": {
+ "bounce": "none" // 将回弹属性关掉
+ }
+ }
+ }, {
+ "path": "pages/order/paymentorder",
+ "style": {
+ "navigationBarTitleText": "支付订单"
+ }
+ }, {
+ "path": "pages/order/orderInfo",
+ "style": {
+ "navigationBarTitleText": "新增预约"
+ }
+ }, {
+ "path": "pages/order/orderInfohotel",
+ "style": {
+ "navigationBarTitleText": "新增预约"
+ }
+ }, {
+ "path": "pages/order/orderInfos",
+ "style": {
+ "navigationBarTitleText": "新增预约"
+ }
+ }, {
+ "path": "pages/webview/html",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ }, {
+ "path": "pages/webview/imge",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ }, {
+ "path": "pages/index/iose",
+ "style": {
+ "navigationBarTitleText": "oss"
+ }
+ }
+
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "uni-app",
+ "navigationBarBackgroundColor": "#fff",
+ "backgroundColor": "#F8F8F8"
+ }
+}
\ No newline at end of file
diff --git a/pages/app/pay.vue b/pages/app/pay.vue
new file mode 100644
index 0000000..59532d6
--- /dev/null
+++ b/pages/app/pay.vue
@@ -0,0 +1,498 @@
+
+
+
+
+
+ {{ type == 1 ? '设备商城' : '在线支付' }}
+
+
+
+ ¥
+ {{ num }}
+
+
+
+
+
+ 支付方式
+
+
+
+
+ 微信支付
+
+
+
+
+
+ 实付:
+ ¥{{ num || 0 }}
+
+
+
+ 确认支付
+
+
+
+ {{ payState == 1 ? '支付成功' : '支付失败,请返回APP重新下单' }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/city/city.vue b/pages/city/city.vue
new file mode 100644
index 0000000..8bc572c
--- /dev/null
+++ b/pages/city/city.vue
@@ -0,0 +1,64 @@
+
+
+ 地址选择
+
+ 关闭
+
+
+
+
+
+
+
+
diff --git a/pages/index/components/clothing/index.vue b/pages/index/components/clothing/index.vue
new file mode 100644
index 0000000..ff0232b
--- /dev/null
+++ b/pages/index/components/clothing/index.vue
@@ -0,0 +1,337 @@
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/clothingmetals/index.vue b/pages/index/components/clothingmetals/index.vue
new file mode 100644
index 0000000..2439c3b
--- /dev/null
+++ b/pages/index/components/clothingmetals/index.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/employees/index.vue b/pages/index/components/employees/index.vue
new file mode 100644
index 0000000..788c254
--- /dev/null
+++ b/pages/index/components/employees/index.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+ {{item.nickname}}
+
+
+ {{item.position}}
+
+
+ 预约
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/flashsale/index.vue b/pages/index/components/flashsale/index.vue
new file mode 100644
index 0000000..6bcd876
--- /dev/null
+++ b/pages/index/components/flashsale/index.vue
@@ -0,0 +1,229 @@
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{item.intro}}
+
+
+
+
+ ¥
+ {{item.price}}
+
+
+ ¥{{item.y_price}}
+
+
+
+
+ 倒计时:
+
+ 已失效
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/flower/index.vue b/pages/index/components/flower/index.vue
new file mode 100644
index 0000000..e6cf68a
--- /dev/null
+++ b/pages/index/components/flower/index.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ {{item.title}}
+ {{item.english}}
+
+
+ 立即前往
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/index.vue b/pages/index/components/index.vue
new file mode 100644
index 0000000..c20ad74
--- /dev/null
+++ b/pages/index/components/index.vue
@@ -0,0 +1,281 @@
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+ {{item.label}}
+
+
+
+
+ {{item.distance}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/popula/index.vue b/pages/index/components/popula/index.vue
new file mode 100644
index 0000000..4414d79
--- /dev/null
+++ b/pages/index/components/popula/index.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{item.price}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/recommend/index.vue b/pages/index/components/recommend/index.vue
new file mode 100644
index 0000000..586e918
--- /dev/null
+++ b/pages/index/components/recommend/index.vue
@@ -0,0 +1,95 @@
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/salezone/index.vue b/pages/index/components/salezone/index.vue
new file mode 100644
index 0000000..d68a022
--- /dev/null
+++ b/pages/index/components/salezone/index.vue
@@ -0,0 +1,181 @@
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{item.intro}}
+
+
+
+ ¥
+ {{item.price}}
+
+
+ ¥{{item.y_price}}
+
+
+
+
+ 立即抢购
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/specials/index.vue b/pages/index/components/specials/index.vue
new file mode 100644
index 0000000..1ddd725
--- /dev/null
+++ b/pages/index/components/specials/index.vue
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+ {{title}}
+
+
+ 更多>
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ ¥
+ {{item.price}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/vipclass/index.vue b/pages/index/components/vipclass/index.vue
new file mode 100644
index 0000000..6211d54
--- /dev/null
+++ b/pages/index/components/vipclass/index.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+ {{item.title}}
+
+
+ ¥{{item.price}}/{{item.frequ}}次
+
+
+ ({{item.show}})
+
+
+ {{item.is_user_sec == '0'?'购买':'加购'}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/hotel.vue b/pages/index/hotel.vue
new file mode 100644
index 0000000..e547d3c
--- /dev/null
+++ b/pages/index/hotel.vue
@@ -0,0 +1,1154 @@
+
+
+
+
+
+
+
+
+
+
+ {{lists.store.title}}
+
+
+
+ {{lists.store.score}}.0
+
+
+
+
+ 营业时间:{{lists.store.b_hours}}
+
+
+
+ 联系商家
+
+
+
+
+ {{lists.store.address}}111
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+ 入驻
+
+
+ {{lists.start}}
+ 周{{lists.weekstart}}
+
+
+
+
+
+ 离店
+
+
+ {{lists.end}}
+ 周{{lists.weekend}}
+
+
+
+
+
+ 共{{lists.long}}晚
+
+
+
+
+
+
+
+ 可住人数
+
+
+
+ {{among}}间·{{adult}}成人·{{children}}儿童
+
+
+
+
+
+
+
+
+
+ {{lists.start}}
+ 周{{lists.weekstart}}
+
+
+ {{lists.long}}晚
+
+
+ {{lists.end}}
+ 周{{lists.weekend}}
+
+
+
+ {{among}}间·{{adult + children}}人
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+ {{list.position_nickname || '热门房型'}}
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+ {{labels.name}}
+
+
+ {{item.cancel_time}}
+
+ 预约
+
+
+
+
+
+ {{service_ops}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..bb61f98
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,659 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{list.position_nickname || ''}}
+
+
+
+
+
+
+ {{list.position_nickname_two || ''}}
+
+
+
+
+
+
+
+
+
+
+
+
+ 热门项目
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/indexInfo.vue b/pages/index/indexInfo.vue
new file mode 100644
index 0000000..d7d8eed
--- /dev/null
+++ b/pages/index/indexInfo.vue
@@ -0,0 +1,600 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{list.store.title}}
+
+
+
+ {{list.store.score}}.0
+
+
+
+
+ 营业时间:{{list.store.b_hours}}
+
+
+
+ 联系商家
+
+
+
+
+ {{list.store.address}}
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+ 预约服务
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{item.describe}}
+
+
+
+ ¥{{item.price}}
+
+
+ ¥{{item.y_price}}
+
+
+
+
+ 立即预约
+
+
+
+
+
+
+
+
+ 立马预约服务
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/iose.vue b/pages/index/iose.vue
new file mode 100644
index 0000000..89e078e
--- /dev/null
+++ b/pages/index/iose.vue
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/lange.vue b/pages/index/lange.vue
new file mode 100644
index 0000000..73fcf09
--- /dev/null
+++ b/pages/index/lange.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/member/index.vue b/pages/index/member/index.vue
new file mode 100644
index 0000000..f02cd26
--- /dev/null
+++ b/pages/index/member/index.vue
@@ -0,0 +1,143 @@
+
+
+
+ 我的会员卡(3)
+
+
+
+
+
+
+ 剪发卡
+
+
+ 剪发卡
+
+
+
+
+
+
+
+ >
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/member/memberinfo.vue b/pages/index/member/memberinfo.vue
new file mode 100644
index 0000000..492b99d
--- /dev/null
+++ b/pages/index/member/memberinfo.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+ 年卡会员
+
+
+
+
+ 剪发卡
+ 保洁清洗卡
+
+
+ 加购
+
+
+
+
+ 续费
+
+
+ VIP202304241154982648
+ 保洁清洗卡
+
+
+
+
+ 会员详情
+
+
+
+ 账单明细
+
+
+
+ 账单明细
+
+
+
+
+
+
+
+
+ 【洗剪吹】新娘造型
+
+
+
+ 商品
+
+
+
+ 年卡会员
+
+
+ ¥300
+
+
+
+
+ 共计:¥300
+
+
+ 立即购买
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/specials.vue b/pages/index/specials.vue
new file mode 100644
index 0000000..487470f
--- /dev/null
+++ b/pages/index/specials.vue
@@ -0,0 +1,219 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ ¥
+ {{item.price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/community.vue b/pages/mall/community.vue
new file mode 100644
index 0000000..efd7868
--- /dev/null
+++ b/pages/mall/community.vue
@@ -0,0 +1,388 @@
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item1.title}}
+
+
+ 销量 100+
+
+
+
+
+ ¥
+ {{item1.price}}
+
+
+ ¥{{item1.y_price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/confirm.vue b/pages/mall/confirm.vue
new file mode 100644
index 0000000..fc56a06
--- /dev/null
+++ b/pages/mall/confirm.vue
@@ -0,0 +1,682 @@
+
+
+
+
+
+ 商品信息
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{item.spec}}
+
+
+
+
+
+ {{item.price}}
+
+
+ ×{{item.number}}
+
+
+
+
+
+
+
+
+
+ 确认地址
+
+
+
+
+
+ {{elist.address.address}}
+
+
+ {{elist.address.province}}-{{elist.address.city}}-{{elist.address.area}}-{{elist.address.address}}
+
+
+ {{elist.address.name}}{{elist.address.mobile}}
+
+
+
+
+ 去添加地址
+
+
+
+
+
+
+
+ 运费
+
+
+ ¥{{elist.freight}}
+
+
+
+
+ 合计
+
+
+ ¥{{elist.price.total_price}}
+
+
+
+
+
+
+
+ 支付方式
+
+
+
+
+
+
+ 微信支付
+
+
+
+
+
+
+
+
+
+
+
+ 余额支付
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 实付金额:
+
+
+ ¥{{elist.price.price}}
+
+
+
+ 立即付款
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/index.vue b/pages/mall/index.vue
new file mode 100644
index 0000000..43f8023
--- /dev/null
+++ b/pages/mall/index.vue
@@ -0,0 +1,369 @@
+
+
+
+
+
+ 搜索
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ 销量 {{item.sales}}+
+
+
+
+ ¥{{item.price}}
+
+ ¥{{item.y_price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/mallInfo.vue b/pages/mall/mallInfo.vue
new file mode 100644
index 0000000..a124609
--- /dev/null
+++ b/pages/mall/mallInfo.vue
@@ -0,0 +1,548 @@
+
+
+
+
+
+ {{lsitform.title_name}}
+
+
+ ¥{{lsitform.price}}
+
+
+
+
+
+ 产品介绍
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 首页
+
+
+
+ 客服
+
+
+
+
+ 加入购物车
+
+
+ 立即购买
+
+
+
+
+
+
+
+
+
+
+ {{lsitform.title_name}}
+ ¥{{lsitform.price}}
+
+
+
+
+
+
+
+
+ {{item.spec_name}}
+
+
+
+
+
+ {{item1.name}}
+
+
+
+
+
+
+ 购买数量
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/mallInfos.vue b/pages/mall/mallInfos.vue
new file mode 100644
index 0000000..15f1f9c
--- /dev/null
+++ b/pages/mall/mallInfos.vue
@@ -0,0 +1,627 @@
+
+
+
+
+
+ {{lsitform.name}}
+
+
+ ¥{{lsitform.price}}
+
+
+
+
+
+ 产品介绍
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 首页
+
+
+
+ 客服
+
+
+
+
+ 加入购物车
+
+
+ 立即购买
+
+
+
+
+
+
+
+
+
+
+ {{lsitform.name}}
+ ¥{{lsitform.price}}
+
+
+
+
+
+
+
+ {{item.spec_name}}
+
+
+
+
+
+
+ {{item1.name}}
+
+
+
+
+
+
+ 购买数量
+
+
+
+
+
+
+
+ 确定
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order/applylrefund.vue b/pages/mall/order/applylrefund.vue
new file mode 100644
index 0000000..8c64348
--- /dev/null
+++ b/pages/mall/order/applylrefund.vue
@@ -0,0 +1,437 @@
+
+
+
+
+
+
+
+
+
+ 退款信息
+
+
+
+
+
+ {{item.title}}
+
+
+ {{item.spec}}
+
+
+
+ x{{item.number}}
+
+ ¥{{item.price}}
+
+
+
+
+
+ 退款原因
+
+
+ {{datalist.reason}}
+
+
+
+
+ 退款金额
+
+
+ {{datalist.order_price}}
+
+
+
+
+ 申请件数
+
+
+ {{datalist.number}}
+
+
+
+
+ 申请时间
+
+
+ {{datalist.createtime}}
+
+
+
+
+ 退款编号
+
+
+ {{datalist.out_trade_no}}
+ 复制
+
+
+
+
+
+
+
+
+
+
+
+ 取消退款
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order/cporderinfo.vue b/pages/mall/order/cporderinfo.vue
new file mode 100644
index 0000000..2766308
--- /dev/null
+++ b/pages/mall/order/cporderinfo.vue
@@ -0,0 +1,840 @@
+
+
+
+
+
+
+ {{listdata.title}}
+ ¥{{listdata.price}}
+
+
+
+
+
+
+
+ 【服务简介}
+
+
+
+
+
+
+
+
+
+
+ 服务详情
+
+
+
+
+
+
+
+ 【洗剪吹】新娘造型
+
+
+ ¥120
+
+
+
+
+ 【服务简介
+
+
+ 烫发、编发、洗头、定型。
+
+
+
+
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+
+
+
+
+
+ 合计
+
+
+ ¥{{listdata.price}}
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order/index.vue b/pages/mall/order/index.vue
new file mode 100644
index 0000000..1dc38eb
--- /dev/null
+++ b/pages/mall/order/index.vue
@@ -0,0 +1,905 @@
+
+
+
+
+
+
+ 搜索
+
+
+
+ 筛选
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+ {{item1.store_title}}
+
+
+ 待付款
+ 待发货
+ 待收货
+ 已收货/评价
+ 退款中
+ 退款成功
+ 取消订单
+
+ 已拒绝
+
+
+
+
+
+ {{item2.title}}
+
+ ¥{{item2.spec}}
+
+ ×{{item2.number}}
+
+
+ {{item2.goods_price}}
+
+
+
+
+
+ 共{{item1.number}}件商品 合计:¥{{item1.goods_total_price}}
+
+
+
+ 取消订单
+
+
+ 申请售后
+
+
+ 查看退款
+
+
+ 删除订单
+
+
+
+ 去付款
+
+
+
+
+
+
+ 确定{{clickoverlayshowtext}}吗?
+
+
+
+ 确定
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order/orderInfo.vue b/pages/mall/order/orderInfo.vue
new file mode 100644
index 0000000..baa40d1
--- /dev/null
+++ b/pages/mall/order/orderInfo.vue
@@ -0,0 +1,623 @@
+
+
+
+
+ 待付款
+ 待发货
+ 待收货
+ 已收货/评价
+ 退款中
+ 退款成功
+ 取消订单
+ 已拒绝
+
+
+ 感谢您的支持,欢迎再次光临
+
+
+
+ 删除订单
+
+
+ 申请退款
+
+
+
+
+
+
+
+ {{datalist.store_title}}
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+ 随时退
+
+
+
+ 过期退
+
+
+
+ {{item.spec||''}}
+
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+ 订单信息
+
+
+ 发型师:{{datalist.people_nickname}}
+
+
+ 实付金额:¥{{datalist.price}}
+
+
+ 购买数量:{{datalist.number}}
+
+
+ 购买数量:{{datalist.username}}
+
+
+ 手机号码:{{datalist.mobile.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') || '-'}}
+
+
+ 收货地址:{{datalist.address}}
+
+
+ 订单编号:{{datalist.out_trade_no}}
+ 复制
+
+
+ 下单时间:{{datalist.createtime}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order/ordersuccess.vue b/pages/mall/order/ordersuccess.vue
new file mode 100644
index 0000000..e2122a4
--- /dev/null
+++ b/pages/mall/order/ordersuccess.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+ ¥
+ {{ info.money || '-' }}
+
+
+ 订单编号:{{ info.out_trade_no || '-' }}
+
+
+ 下单时间:{{ info.updatetime || '-'}}
+
+
+ 支付方式:{{ info.pay_type || '-' }}
+
+
+
+
+ 查看订单
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order/refund.vue b/pages/mall/order/refund.vue
new file mode 100644
index 0000000..1febb63
--- /dev/null
+++ b/pages/mall/order/refund.vue
@@ -0,0 +1,364 @@
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+ x{{item.number}}
+
+ ¥{{item.price}}
+
+
+
+
+
+
+ 退款原因
+
+ {{reason}}
+
+
+
+
+ 退款金额
+
+
+
+
+
+ 详细说明
+
+
+
+
+
+
+
+ 图片凭证
+
+ 最多三张
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/series.vue b/pages/mall/series.vue
new file mode 100644
index 0000000..a1c2a0d
--- /dev/null
+++ b/pages/mall/series.vue
@@ -0,0 +1,358 @@
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ 销量 {{item.sales}}+
+
+
+
+ ¥{{item.price}}
+
+ ¥{{item.y_price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/address/edit.vue b/pages/my/address/edit.vue
new file mode 100644
index 0000000..ec441b3
--- /dev/null
+++ b/pages/my/address/edit.vue
@@ -0,0 +1,325 @@
+
+
+
+
+
+ 联系人
+
+
+
+
+
+
+
+ 联系电话
+
+
+
+
+
+
+
+
+ 所在地区
+
+
+
+
+
+
+
+
+
+
+ 详细地址
+
+
+
+
+
+
+
+
+ 设为默认地址
+
+
+
+
+ 保存
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/address/index.vue b/pages/my/address/index.vue
new file mode 100644
index 0000000..fd0b06c
--- /dev/null
+++ b/pages/my/address/index.vue
@@ -0,0 +1,248 @@
+
+
+
+
+
+ {{item.name}}
+
+
+ {{item.mobile.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')}}
+
+
+
+ {{item.province}}{{item.area}}{{item.city}}{{item.address}}
+
+
+
+
+
+
+
+ 默认地址
+
+
+ 编辑
+ 删除
+
+
+
+
+
+ 添加地址
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/index.vue b/pages/my/index.vue
new file mode 100644
index 0000000..4373eae
--- /dev/null
+++ b/pages/my/index.vue
@@ -0,0 +1,412 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{userlist.user.nickname || "暂无昵称"}}
+ {{userlist.user.user_id}}
+
+
+
+
+
+
+
+ 我的订单
+ 查看全部
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+ {{item.name}}
+ {{item.balance}}元
+ {{item.card_count}}张
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/member/index.vue b/pages/my/member/index.vue
new file mode 100644
index 0000000..5d5340f
--- /dev/null
+++ b/pages/my/member/index.vue
@@ -0,0 +1,179 @@
+
+
+
+ 我的会员卡({{list.length}})
+
+
+
+
+
+
+ {{item.store_title}}
+
+
+ {{item.vip_number}}
+ {{item.end_time}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/member/memberinfo.vue b/pages/my/member/memberinfo.vue
new file mode 100644
index 0000000..4db73bb
--- /dev/null
+++ b/pages/my/member/memberinfo.vue
@@ -0,0 +1,399 @@
+
+
+
+
+
+
+
+
+
+
+ {{data.title}}
+ {{data.show}}
+
+
+ 加购
+
+
+
+ {{Number(data.user_sec_y_frequ)}}/{{Number(data.user_sec_z_frequ)}} 次
+
+
+ {{data.vip_number || ''}}
+ {{data.end_time}}
+
+
+
+
+ 会员详情
+
+
+
+
+ 订单明细
+
+
+
+
+
+
+
+
+ {{data.store_title}}
+
+
+
+ 商品
+
+
+
+ {{data.title}}
+
+
+ ¥{{data.price}}
+
+
+
+
+ 共计:¥{{data.price}}
+
+
+ 立即购买
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/member/memberinfos.vue b/pages/my/member/memberinfos.vue
new file mode 100644
index 0000000..5507e4b
--- /dev/null
+++ b/pages/my/member/memberinfos.vue
@@ -0,0 +1,564 @@
+
+
+
+
+
+
+ {{data.title}}
+ {{data.show}}
+
+
+
+ ¥{{data.price}}/{{data.frequ}}次
+ {{data.end_time}}
+
+
+
+
+ 商品
+
+
+
+ {{data.title}}
+
+
+ ¥{{data.price}}
+
+
+
+ {{data.show}}
+
+
+ 权益
+
+
+ {{data.frequ}}次{{data.show}}
+
+
+
+
+ 手机号码{{data.mobile}}
+
+
+ 该号码不会提供给商家,仅用于接收平台通知信息
+
+
+
+
+ 使用说明
+
+
+
+
+
+
+
+
+ 应付金额:
+
+
+ ¥{{data.price}}
+
+
+
+ 立即付款
+
+
+
+
+
+
+ 【洗剪吹】新娘造型
+
+
+
+ 商品
+
+
+
+ 年卡会员
+
+
+ ¥300
+
+
+
+
+ 共计:¥300
+
+
+ 立即购买
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/member/memberone.vue b/pages/my/member/memberone.vue
new file mode 100644
index 0000000..db9f9fa
--- /dev/null
+++ b/pages/my/member/memberone.vue
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+
+
+ {{nickname || '暂无昵称'}}
+
+
+
+
+ 可用余额:{{memberlist.money || '0.00'}}
+
+
+
+
+ {{memberlist.vip_number}}
+
+
+
+
+
+
+
+
+
+ 充{{item.amount}}元
+ 送{{item.deliver}}
+
+
+
+
+ 立即充值
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/order/applylrefund.vue b/pages/my/order/applylrefund.vue
new file mode 100644
index 0000000..675aab3
--- /dev/null
+++ b/pages/my/order/applylrefund.vue
@@ -0,0 +1,425 @@
+
+
+
+
+
+
+
+
+
+ 退款信息
+
+
+
+
+
+ {{datalist.order_title}}
+
+
+
+ x{{datalist.number}}
+
+ ¥{{datalist.order_price}}
+
+
+
+
+
+ 退款原因
+
+
+ {{datalist.reason}}
+
+
+
+
+ 退款金额
+
+
+ {{datalist.order_price}}
+
+
+
+
+ 申请件数
+
+
+ {{datalist.number}}
+
+
+
+
+ 申请时间
+
+
+ {{datalist.createtime}}
+
+
+
+
+ 退款编号
+
+
+ {{datalist.out_trade_no}}
+ 复制
+
+
+
+
+
+
+
+
+
+
+
+ 取消退款
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/order/cporderinfo.vue b/pages/my/order/cporderinfo.vue
new file mode 100644
index 0000000..491ea60
--- /dev/null
+++ b/pages/my/order/cporderinfo.vue
@@ -0,0 +1,838 @@
+
+
+
+
+
+
+ {{listdata.title}}
+ ¥{{listdata.price}}
+
+
+
+
+
+
+
+ 【服务简介}
+
+
+
+
+
+
+
+
+
+
+ 服务详情
+
+
+
+
+
+
+
+ 【洗剪吹】新娘造型
+
+
+ ¥120
+
+
+
+
+ 【服务简介
+
+
+ 烫发、编发、洗头、定型。
+
+
+
+
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+
+
+
+
+
+ 合计
+
+
+ ¥{{listdata.price}}
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/order/index.vue b/pages/my/order/index.vue
new file mode 100644
index 0000000..d179017
--- /dev/null
+++ b/pages/my/order/index.vue
@@ -0,0 +1,895 @@
+
+
+
+
+
+
+ 搜索
+
+
+
+ 筛选
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item1.store_title}}
+
+
+ 待支付
+ 已支付
+ 等待确认
+ 已确认
+ 已完成
+ 已取消
+ 退款中
+ 已退款
+ 已拒绝
+
+
+
+
+
+
+ {{item1.title}}
+ ¥{{item1.total_price}}
+ {{item1.time}}
+
+
+ {{item1.number}}
+
+
+
+
+ 取消订单
+
+
+ 申请售后
+
+
+ 查看退款
+
+
+ 删除订单
+
+
+
+ 去付款
+
+
+
+
+
+
+ 确定{{clickoverlayshowtext}}吗?
+
+
+
+ 确定
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/order/orderInfo.vue b/pages/my/order/orderInfo.vue
new file mode 100644
index 0000000..849bb78
--- /dev/null
+++ b/pages/my/order/orderInfo.vue
@@ -0,0 +1,628 @@
+
+
+
+
+ 待支付
+ 已支付
+ 等待确认
+ 已确认
+ 已完成
+ 已取消
+ 退款中
+ 已退款
+ 已拒绝
+
+
+ 感谢您的支持,欢迎再次光临
+
+
+
+ 删除订单
+
+
+ 申请退款
+
+
+
+
+
+
+
+ {{datalist.store_title}}
+
+
+
+
+
+
+
+ {{datalist.title}}
+
+
+
+
+ 随时退
+
+
+
+ 过期退
+
+
+
+ {{datalist.time||''}}
+
+
+ ¥{{datalist.total_price}}
+
+
+
+
+
+
+
+
+ 订单信息
+
+
+ 发型师:{{datalist.people_nickname}}
+
+
+ 实付金额:¥{{datalist.money}}
+
+
+ 购买数量:{{datalist.number}}
+
+
+ 手机号码:{{datalist.mobile.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') || '-'}}
+
+
+ 订单编号:{{datalist.out_trade_no}}
+ 复制
+
+
+ 下单时间:{{datalist.createtime}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/order/refund.vue b/pages/my/order/refund.vue
new file mode 100644
index 0000000..34591b3
--- /dev/null
+++ b/pages/my/order/refund.vue
@@ -0,0 +1,368 @@
+
+
+
+
+
+
+ {{datalist.title}}
+
+
+
+ x{{datalist.number}}
+
+ ¥{{datalist.total_price}}
+
+
+
+
+
+
+ 退款原因
+
+ {{reason}}
+
+
+
+
+ 退款金额
+
+
+
+
+
+ 详细说明
+
+
+
+
+
+
+
+ 图片凭证
+
+ 最多三张
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/setup/index.vue b/pages/my/setup/index.vue
new file mode 100644
index 0000000..b482ab3
--- /dev/null
+++ b/pages/my/setup/index.vue
@@ -0,0 +1,313 @@
+
+
+
+ 个人信息
+
+
+
+
+ 头像
+
+
+
+
+
+
+
+
+ UID
+
+
+ ID:{{userlist.user_id}}
+
+
+
+
+
+ 昵称
+
+
+
+
+
+
+
+
+ 性别
+
+
+
+
+
+
+
+
+
+
+ 生日
+
+
+ {{userlist.birthday || ''}}
+
+
+
+
+
+ 手机号
+
+
+ {{userlist.mobile.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') }}
+
+
+
+
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/setup/phone.vue b/pages/my/setup/phone.vue
new file mode 100644
index 0000000..faacd0a
--- /dev/null
+++ b/pages/my/setup/phone.vue
@@ -0,0 +1,249 @@
+
+
+
+
+
+ 中国大陆+86
+
+
+
+ 验证码
+
+
+ {{ Recapture }}
+
+ {{ second }}s重新发送
+
+
+
+
+
+ 阅读并同意银收客预约
+ 《用户协议》
+ 及
+ 《隐私政策》
+
+
+ 确定
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/my/setup/repairpassword.vue b/pages/my/setup/repairpassword.vue
new file mode 100644
index 0000000..bebba30
--- /dev/null
+++ b/pages/my/setup/repairpassword.vue
@@ -0,0 +1,215 @@
+
+
+ 安全密码用于支付,退款,确保资金安全
+
+ 中国大陆+86
+
+
+
+ 密码
+
+
+
+ 确认密码
+
+
+
+ 验证码
+
+
+ {{ Recapture }}
+
+ {{ second }}s重新发送
+
+
+
+
+ 确定
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/confirm.vue b/pages/order/confirm.vue
new file mode 100644
index 0000000..dd54f23
--- /dev/null
+++ b/pages/order/confirm.vue
@@ -0,0 +1,799 @@
+
+
+
+
+
+ 预约项目
+
+
+ {{elist.title}}
+
+
+
+
+ 预约时间
+
+
+ {{elist.time}}
+
+
+
+
+ 发型师
+
+
+ {{elist.people.nickname != ''?elist.people.nickname:'无'}}
+
+
+
+
+
+
+ 商家会员卡
+
+
+ 享更多优惠
+
+
+
+ {{datalist.sec.text_title}}
+
+
+ 开通后享更多优惠
+
+
+ {{datalist.sec.text}}
+
+
+
+
+
+
+
+ 商家会员卡
+
+
+ 享更多优惠
+
+
+
+ {{datalist.sec.text_title}}
+
+
+ 开通后享更多优惠
+
+
+ {{datalist.sec.user_y_frequ}}/{{datalist.sec.user_z_frequ}}次
+ {{Number(datalist.sec.user_y_frequ) - Number(elist.number)}}/{{datalist.sec.user_z_frequ}}次
+
+
+
+
+
+
+
+
+ 预约人数
+
+
+ {{elist.number}}
+
+
+
+
+ 会员折扣
+
+
+ -{{datalist.sec.pre_price || '0'}}
+
+
+
+
+ 会员折扣
+
+
+ ¥{{datalist.balance.pre_price || '0'}}
+
+
+
+
+ 原价
+
+
+ ¥{{datalist.total_price}}
+
+
+
+
+
+ 合计
+
+
+ ¥{{datalist.sec.price}}
+
+
+ ¥{{datalist.total_price}}
+
+
+
+
+
+
+ 手机号码
+
+
+ {{mobile}}
+
+
+
+
+
+
+
+ 支付方式
+
+
+
+
+
+
+ 微信支付
+
+
+
+
+
+
+
+
+
+
+
+ 余额支付
+
+
+
+
+
+
+
+
+
+
+
+ 预约须知:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 应付金额:
+
+
+ ¥{{datalist.sec.price}}
+
+
+
+
+
+ 应付金额:
+
+
+ ¥¥{{datalist.wechat.wechat_money.money_str}}
+
+
+
+
+
+ 应付金额:
+
+
+ ¥合计{{Number(datalist.balance.balance_money.money_str)+Number(datalist.balance.wechat_money)}}
+ 余额:{{datalist.balance.balance_money.money_str}}
+ 微信:{{datalist.balance.wechat_money}}
+
+
+
+
+ 应付金额:
+
+
+ ¥{{datalist.sec.price}}
+
+
+
+
+
+ 立即付款
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/confirmhotel.vue b/pages/order/confirmhotel.vue
new file mode 100644
index 0000000..17b3c44
--- /dev/null
+++ b/pages/order/confirmhotel.vue
@@ -0,0 +1,933 @@
+
+
+
+
+
+
+
+
+
+ {{lists.start}}
+ 周{{lists.weekstart}}
+
+
+ {{lists.long}}晚
+
+
+ {{lists.end}}
+ 周{{lists.weekend}}
+
+
+
+
+
+
+
+ {{elist.title}}
+
+
+ {{item.name}}
+
+
+
+ {{elist.cancel_time}}
+
+
+
+
+
+ 房间数量
+
+
+
+ {{among}}间(每间最多住{{elist.capacity_people}}人)
+
+
+
+
+
+
+ 姓名
+
+
+
+
+
+
+
+ 手机号码
+
+
+
+
+
+
+
+
+
+
+ 会员折扣
+
+
+ -{{allamounts.price.pre_price || '0'}}
+
+
+
+
+ 原价
+
+
+ ¥{{allamounts.price.meet_price}}
+
+
+
+
+
+ 合计
+
+
+ ¥{{allamounts.price.meet_price}}
+
+
+
+
+
+
+
+ 支付方式
+
+
+
+
+
+
+
+ 微信支付
+
+
+
+
+
+
+
+
+
+
+
+
+ 余额支付
+
+
+
+
+
+
+
+
+
+
+
+ 购买须知:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 应付金额:
+
+
+ ¥{{allamounts.price.meet_price}}
+
+
+
+ 立即付款
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/index.vue b/pages/order/index.vue
new file mode 100644
index 0000000..9e9b945
--- /dev/null
+++ b/pages/order/index.vue
@@ -0,0 +1,453 @@
+
+
+
+
+
+ 搜索
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+ ¥{{item.price}}
+
+
+ 预约
+
+
+
+
+
+
+ 确定删除订单吗?
+
+
+
+ 确定
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/orderInfo.vue b/pages/order/orderInfo.vue
new file mode 100644
index 0000000..ac79102
--- /dev/null
+++ b/pages/order/orderInfo.vue
@@ -0,0 +1,1131 @@
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+ ¥{{listdata.price}}
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
+ 预约时间(必填)
+
+
+
+
+
+ {{item.week}}
+ {{item.date.slice(5,10)}}
+
+
+
+
+ 选择
+
+
+
+
+ {{item}}
+
+
+
+ 暂无预约时间
+
+
+
+
+
+ {{listdata.position_nickname}}
+
+
+
+
+
+ {{item.nickname}}
+
+
+ 空闲中
+ 已约{{item.count}}人
+
+ 已约满
+
+
+
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+ 应付金额:
+
+
+ ¥{{listdata.price}}
+
+
+
+ 立即预约
+
+
+ 立即预约
+
+
+
+
+
+
+ 服务详情
+
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+ {{listdata.price}}
+
+
+
+
+ 【服务简介】
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+
+
+
+
+ 预约时间:{{day_time}}
+
+
+ {{day_hour}}
+
+
+
+
+ 预约服务
+
+
+
+
+
+
+
+ 合计
+
+
+ ¥{{listdata.price}}
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/orderInfohotel.vue b/pages/order/orderInfohotel.vue
new file mode 100644
index 0000000..d01e879
--- /dev/null
+++ b/pages/order/orderInfohotel.vue
@@ -0,0 +1,1418 @@
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+ ¥{{listdata.price}}
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
+ 预约时间(必填)
+
+
+
+
+
+
+ {{lists.start}}
+ 周{{lists.weekstart}}
+
+
+ {{lists.long}}晚
+
+
+ {{lists.end}}
+ 周{{lists.weekend}}
+
+
+
+ {{among}}间·{{adult + children}}人
+
+
+
+
+ 暂无剩余房间
+
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+ 详情
+
+
+
+
+ 餐品饮品
+
+
+
+
+
+ 费用政策
+
+
+
+
+
+ 便利设施
+
+
+
+
+
+ 室外景观
+
+
+
+
+
+ 媒体科技
+
+
+
+
+
+ 浴室配套
+
+
+
+
+
+ 其他设备
+
+
+
+
+
+
+
+
+ 应付金额:
+
+
+ ¥{{allamounts.price.price}}
+
+
+
+ 立即预约
+
+
+ 立即预约
+
+
+
+
+
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+
+
+ 设施详情
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+ 餐品饮品
+
+
+
+
+
+ 费用政策
+
+
+
+
+
+ 便利设施
+
+
+
+
+
+ 室外景观
+
+
+
+
+
+ 媒体科技
+
+
+
+
+
+ 浴室配套
+
+
+
+
+
+ 其他设备
+
+
+
+
+
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+
+
+
+
+ 预约时间
+
+
+ {{lists.start}}周{{lists.weekstart}}{{lists.long}}晚{{lists.end}}周{{lists.weekend}}{{among}}间·{{adult + children}}人
+
+
+
+
+ 合计
+
+
+ ¥{{listdata.price}}
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/orderInfos.vue b/pages/order/orderInfos.vue
new file mode 100644
index 0000000..cbde153
--- /dev/null
+++ b/pages/order/orderInfos.vue
@@ -0,0 +1,1445 @@
+
+
+
+
+
+
+ {{fuwuyuan.nickname}}
+ {{fuwuyuan.position}}
+
+ 已选定
+
+
+
+
+
+
+
+
+ 预约时间(必填)
+
+
+
+
+
+ {{item.week}}
+ {{item.date.slice(5,10)}}
+
+
+
+
+ 选择
+
+
+
+
+ {{item}}
+
+
+
+ 暂无预约时间
+
+
+
+
+
+ 预约项目(必填)
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 应付金额:
+
+
+ ¥{{listdata.price}}
+
+
+
+ 立即预约
+
+
+ 立即预约
+
+
+
+
+
+
+
+
+ {{listdata.title}}
+
+
+
+
+
+
+ 预约时间:{{day_time}}
+
+
+ {{day_hour}}
+
+
+
+
+ 预约服务
+
+
+
+
+
+
+
+ 合计
+
+
+ ¥{{listdata.price}}
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/ordersuccess.vue b/pages/order/ordersuccess.vue
new file mode 100644
index 0000000..8323320
--- /dev/null
+++ b/pages/order/ordersuccess.vue
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+ ¥
+ {{ info.money || '-' }}
+
+
+ 订单编号:{{ info.out_trade_no || '-' }}
+
+
+ 下单时间:{{ info.updatetime || '-'}}
+
+
+ 支付方式:{{ info.pay_type || '-' }}
+
+
+
+
+ 查看订单
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/paybill.vue b/pages/order/paybill.vue
new file mode 100644
index 0000000..97238d6
--- /dev/null
+++ b/pages/order/paybill.vue
@@ -0,0 +1,477 @@
+
+
+
+
+
+ {{ shopInfo.userName }}
+
+
+
+ ¥
+ {{ num }}
+
+
+
+
+
+ 支付方式
+
+
+
+
+ 微信支付
+
+
+
+
+
+ 实付:
+ ¥{{ num || 0 }}
+
+
+
+
+
+
+
+ {{ item + 1 }}
+
+
+
+
+
+
+
+
+
+ 付款
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/order/paymentorder.vue b/pages/order/paymentorder.vue
new file mode 100644
index 0000000..f82c0b8
--- /dev/null
+++ b/pages/order/paymentorder.vue
@@ -0,0 +1,492 @@
+
+
+
+
+
+ {{list.store_nickname}}
+
+
+
+ ¥
+
+
+
+
+
+
+ 支付方式
+
+
+
+
+
+ 会员卡支付
+ 当前余额:{{list.user_balance}}
+
+
+
+
+
+
+
+
+
+
+
+ 微信支付
+ 使用微信支付
+
+
+
+
+
+
+
+
+ 确认支付
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/shopcart/index.vue b/pages/shopcart/index.vue
new file mode 100644
index 0000000..bd584ef
--- /dev/null
+++ b/pages/shopcart/index.vue
@@ -0,0 +1,815 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ×
+
+
+
+ {{item.title}}
+
+
+ {{item.spec_str}}
+
+
+
+
+
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{lsitform.title}}
+ ¥{{lsitform.price}}
+
+
+
+
+
+
+
+ 规格
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/task/index.vue b/pages/task/index.vue
new file mode 100644
index 0000000..625adf6
--- /dev/null
+++ b/pages/task/index.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/task/taskInfo.vue b/pages/task/taskInfo.vue
new file mode 100644
index 0000000..4a4bcf6
--- /dev/null
+++ b/pages/task/taskInfo.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/webview/html.vue b/pages/webview/html.vue
new file mode 100644
index 0000000..d9e2cee
--- /dev/null
+++ b/pages/webview/html.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
diff --git a/pages/webview/imge.vue b/pages/webview/imge.vue
new file mode 100644
index 0000000..b5da63e
--- /dev/null
+++ b/pages/webview/imge.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/webview/webview.vue b/pages/webview/webview.vue
new file mode 100644
index 0000000..e93e5da
--- /dev/null
+++ b/pages/webview/webview.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/static/4.png b/static/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..89592ae02d4eba9a5eace4fb231e712356ef76ec
GIT binary patch
literal 7120
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
oi-`DRI{CipF07*qoM6N<$f<+e(CjbBd
literal 0
HcmV?d00001
diff --git a/static/gwc.png b/static/gwc.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9613aaf0b62a11c24b7bd429d41ce3e3f228c5c
GIT binary patch
literal 13789
zcmWk#byQPb03R(a-JsG^($Xa$Eg?NZy1Q$%faGwaOH%0^JwT+pdvu4S^tW&4Z10cl
zox6AM-TUQYKB+6><51%O004ZYj~}#KpxONWR-MYARmD*EWZK(
zuK-FPWORH@j=Qj*^IUNoMbO7G}WCR2TPvT-Fug;-j1fP
zN$f6r9EL6annhKEVH{+fHE-`vJ07<&X<#joCKh4(ZW_-}BjTq<@vpVe#5>l16$ROA
zpbmMJLvZ!;@1;s1*JUUsXv_1cGpMd*!oGFwC>cW-jVP1Gqn(((Wh`%Y51}~jWrxsT
ze##h4(^o@YCh1PXRTSKHB;SN|4*Vc3!Lz$POB`h5T5~*eepZbuZ6>gK*0k%uz}X7}
zmSeXPgE1`iTr1Uk^;VON3${a1zgF9#9LL2Aw~F06i4z#`5P}MJ0M4B@ZX!QXHpg>u
z1&q(VCE#B*o7_w^T5aH(JGB$5wKI3Gptxyu00wa@LC5~_m8=;r#zBG;7b?>)|2Ykn
zV211rr_(`9gKzO6CjR^0S65fZ5KeMSV^l8jIM~-W7+MI(K0D@;O(iKvC;?w$|OJiq)2Ex4-MHdZb%H79v4WMb2_b
zs7K>>#Qnt9&>2X|2O}3SS&3EsmC)l@9{&+Q+?Ws&B#A<3cd=CD*%1TM2BXuQ{q6x<;E`O8Lx^wk>94Z&y>q
z$-D0q^~uN~^J-St_<4*xn>i-JbchUFEQqCl=Dx1_s7c~#TANYh{d$DUkDzAG)-imu
z*1cwwRfS0E*Of);NiuKPIFAqxrEjK?py0Y6mm_Rgb*vlV#+;AdAXMd-!PcE4c8fK6k51M{%#
zzsZNvQ&dbSwE*r+&m_+q=1jz@^r}o4ep*U
z?5!alGu$@+;8VSKMF?+D2EO(|Il5c%T8s&CafEMP@8WvN;7mow3oVugU+zuxRaST7
z?4lhsP&zVHIE9I*o3c8uC>XycaF1Fk9AQk?8s9}1eUenjfJavEFs>qZ+`H6R=ulW|
zFtlRAHg6Z>jLG$))~n8XWDz?jnFDa)^1|^6oUuffS7UIbV99?0WNz3iAHw#Ak;u(6
z#!2F8PRfk$YGWXX)hVWx!j#jSu1~ByEZ5F^ly`F?+~x~b|*80xX+??PmSJnE`HOZ8CNTU`l7sU)bM2QM`8zgS(&1e
z2ysb6QD#+hScMB7SRR`F>25gr(*lasc<1xe{gO-j)vWf@(@p1dUVZaG?R}VuP}~VB
zZ^gQ+(;TKR(KKg1eaOS#>%)qsRW?vNSr`5xo&U!z1}w*oH;Hx{#q5tmfy+@_@SKKFTo~8bJyP{85d)SPAE)#^KXk5y&Ma&qG@zq#MVkhZwJ--+36w_@M01
zDL)$xHb~&}Rw=DfbP?W|u0&vyL;<$6%NS#}N?$tLHFyb3GAX6xNP7TREhn5bKZViy
zXO-W60R{iE~YM^gYB83)tKb{1o8%y6gv&DxjF==<7CjD*VqYt_1`Eoj(
z@}UK=&)+pnG_bQn^|zf(30k-Bk?cY5Z=|1CXW4a6(yt?481npt8!31bDMql9BEut$
z;I5$iiNmh>^mrQL0_(!05y$(wl!=(NtKd|@NepAdNx$5fg*?09roAaNtki!MLZREH
zcXP6`R{N2hT`f>7mkeup&ONi<2W=!ib@qhvvj+{F;Hq(YSu3F*PufUU2Y-Ij2%b9j
z#wxCUD_PL=Y(~%Y>U6$llTo&EUNp}z4%(XnweJFBx_+Zms@>RArT;d%^-j9IJi_R{
z$qHVK>9hZ`wei*K5-YV9V^8t2i(AH5QshaA=b*MDh&UG_-S7lz;$J4EWmF}j=+17}
zAmXw_?mT9Mnu-gte_VkiaF8?>3Myh#t9CxhmeL%z35sGfYtPVTS#a9#~h;gR`dd$yD568s%`THTfs%Gk8K9E28s
zB&a>Ys0CFGV&wCdBVZwOZgun3Zr)2H_bA#QQR)%K%`<4{wfg7f0F5urJysL>;xAp-
zWNIUVmWyefFcPmvDX$t>Dffpr=Y
z^yeGZimqwURRD@mdu#z%3o?xu#hSij(~^D~Y4f|dUh~_{Rj)*bgdCJm{6z(JMIR`<^p4E%St!rgkr
zX8`Ii8W_TaaU^Y$j~k;hUaXF;;9^z4bP8R
zA|BrIC1B-~E>Qa2_U&>C>s4vp$$4iy(fbih@{E5`pPMstjKAp!xao+Vn=7_)86
zGx&|-{@BgsKYMe?>;{NNJH4jVge4}{Kl9!WwsSTQiFNlm876ep-L-1gZN0R_TE(;@
z_E&iyqnyy6AAjghptj2=e9E6Jw^qtrs3&jDfO>{Njx9zhINYbeWnH&*ejoPMUFmxv
z$e}8R=p2_DX12|kD1I)lf6_qdD)OcTGPWX)Xxau31(MmirEoEtl?rz*(?4CAkCWxt%(5dGp*p!pcjUSLFUb%4Kn?x_K6@BXP6@{-Z7q)wSp4)Nr
zbFdjm@)&V<>K#Y{>vXMg+@E%aQ2bU4R(jF=`R6>~CgGEEzozGtKq1^j8DeDba-y$1
z1gu*f!42g43{w|@=6wy^M2Tv}U$y^L5%m_X*0S_HlCp9Wb$Kal&9w*L!Q6dv7v;u&
zad*Uu-c!2754f?oVBaqiV!Zt`&<%+cKGM-1p`a`jA3Hav0XewZ-4bh__VmPuKKJ*c
zkZAkE3dNo}vMS)o&K&BZ6nAu6jcN?%ZAGSIE%x@$kJUk!Fy54OQdcB&pQQ0x2>r3J
zV)5cs%GkRLJt8mfT6xHuwc&i+G~NR4;F`Qy_8itnJjHK`TtRlc3eVz9wt%?YtBa1!9J2Zw}~FWJh3-)9+K2U_%U#
zdss>Ku99o6i~;$xq8cYwl{aHJNM{;Km(1F8jnb2~X~+`IKH`J!y+wNnid7(cu7NV)
ziF9I(Xzu>cgl2OK^*$m6->0QDByTO>xo`C&{%3tjMo03*);IXxOHNGyZ8vmR8~+Mz
zqf&9Myw|(NWZZjHc7K`AVxGxo985i>oxxlfaBUfaV+lO6GTE`1Z-$Esd#Q^$vXa}+zH7)5ADooT*4bhiC#L57$NGg>e9+HhC4
zWh`FnIW?15^4g!=#(-f$`6IXNtVEV%4|KokZi&&e!%&Eul~;_VXCMC1xNwpV^Z11~
z;1}AXv{dqSmnp+F69#Vx#n0fyHd$_eO4wg%p!+6c_WjsAC+9N6du7*6r)t2)Ka`hn
zl$yjzC7Ox~Eb2UgZ6*L_Ur*80T>h{(F?#2xGw(zhd5WegC`oGfYWD@a0i(%ZcZ1Ux
zEkxMJbL)gV2)PLD1cxhz-rQC5@nfRyMf7l5dYF#}!9fS_$ETdC@d&xqh0Eq8@*V$xjm
z>Z%P@T^`EO-pOtdH
zq>6~RWICNK$y!pNvWF;_j}W%I{@=b=tUzwLUl=!-wC8zVbCp0-tYsCs0@A=WPL0A-
zu{eirR&K0v0^0ZQq}hbyMzGQZMf9B-X6$vv!LzEJM0UMi#jo)l(6*!`E{6Ftd%E74
z>bvd2Uw|>1?%D@ZI+5(YB+tW--N=QiIh7x;L~3S3@V2J6-JvCOAohorE=wzHBbFl!
zc}d*$8wUPCd?GOGMxu_{Mjb;>AuN}gUh+9MxEHbR#54MZ7AC%PcpH84&|f}xb}SMo
zBPS0EG_ia)H$)P4cknBGOzOFf32#*VVmJ?}IwIL|{9bx0(Nt7q{lxfZHxk5cK*WLb
zpek?a!QdEJQ$=P2S2O>IxkwYdDTIWGn_o;Cp6oAx<&ra0)Ve8>TG;Pdx6SUrVGN(E
z62w;bwZu2RGNN9NVb%u=DN7@nPUqCffb>bFF0;?zQb|2ZWq7?_!qM
z{Gom}JLanJ5!u2POg^$yer99c9tV!<=0J){zT%-VAZam5f%)vL!cQ4jqzW75wD+xvF~~$ioBE)&+q_M-lCo63gm3!bEXUb;m}@#1Xwuo;kb*KRYGgOWGUyYG-*;7|%UuM%2z?GaJ}m}cPVdU}ic8~kI?EUf&W?lX$Qdal&B
zO0(VTNgdo4daMt*7#t=yv^UKZVun%Ww%=E^Io7$Xb(rf26V?FyB&?iqu!53UJ9y52
z=f;M%AtaeV?SN>9lQ;d~sgEHZ_M9rI?!FqAkM9hK*X~X5nm&4(
zEZ1)A^|0@$wv(CNbIDdX`>y?|ulv=S+1L@fhibdHpXg;S`Do`~Ip7}<_n%m+c1EbS
zOu|)GMs#z;3MiML!6hTMBmWClN(q0@*Yuy*`@NiF%dIH)&-#dFj*bE1(_6^97E0eY
z+pB)5bTpWro#UfZ-4>oefEv@8|2Kx)7NR_Rh0A9W@wAzSSs@Ww4gLo&XV{PZ4*_!@duGefq1?h3sHZZsS5T=9(e|`
z!`1MuVgnPX1>aH%Ii_i}3LRQqFFI5KFnrvJNRmK@tbD{(Y+-6oXPIDtGnnn_qhkwZ
zPisQTz-M>VGI5mAL}99($Tpl&k?8YnhbkEPzai5nVx*_S9Vtn!hg$jJS2_UtbQXzA
zu^MJ5ZiATrVijADV1dh}pCd~w!)wtLxJp7ykj1}2nn1fhX
z$XBGfSARZ>mim+(FHUD&nGpFC|C3FY%IN^BXAwc_N*AA07D}}0Ep2$8@MR6c4K!!*
zRX6AHqzkmF~SNbVukEuo3z}5a8_It%@
z3`Ca{ax$;e)FLL8)FMN1oMmYc`QlVk!4HjRBI;irx#I3!L98z9#kD^Ma#D?4+6CbP
zRLxiw#8@BC(aC^vXe=x6?AvC7-8Xr#Z2{!DoucR`vOZ2uy|SFhZqmClufgV0{M_|)@^qvMj{3+eQN&r
z+T+{r;VI;bQ`M|*DI?eqC!K4RDx)8s-YMiU+cE`GP%5(W@@z;6kl5=Y{ex#|6zt)>a6Z=_C2O~i
z@P0dr;iqW2JYO%9W-LH4=4-T7%!{zB6XzUAVG1?ZNx{Ka7KzEy9|p>5J@qfQ{UqKN
zPB%I&p(1KK)R?!io6_47wv^0EWOS4_?A}YW!C$wt;R8%1)x#~4{(`GljrOV8{PrS#
zhxYh%W(j4yoiqvj+v~Sep_zz(`?wBw;?j6~ERh^<_7?LuSryCYJ#RX
z58S@0gu#3U6-L`9Vl$eBNV7<=)A@SdR`(-OQuN=-X)sj9uYe22Sv8EU=NrQCBS4e|
zqwQls8<2nx-N-wQjHO)9y
z!sU*WlDA@#>`PmWPf<>N1Anc#)9v5Hggc5x2a9!VjxH;*d)Z7dKsx$ivyXc4Y}UPJ
z;v$TZkuhe9ZWg<$vrZvMtj$b1U&U{bXvpOmlI
zj>76IPV@xW-z=dd7zRzd170_8H@rCFKv
z)f=SFAU5`z`D}1f{I)4lJOLo`gn`SQJLq?o^V`mKRPpr~rNF-fZn)mpi-LCu!-6eA
zLU|QZ0^(}n$OGye|AVs6*jBn&@n_zyPq(`iMSpf0ge8%{{7jymgL%bb)1+DbYmaBUFqt+Pf0UO%ZAg2UuM%8_
zDv_Py%@^0kMp-FD1#&TP%J+B9Gj#s$FPhF{KEGJW
zjFMpat7aV0Ig?o5#%iPlFOtf##337z+Del9sU=k+VN2a0_uX6MG?Uq8waUV{mP{EY
z5q^oIs2xseAp+^+=Y$unbeLs%)^F
z7L1G&OikLZW{pfWi4hu7kC&lNi}lS0_O3ZCg}j3-ty|G!r*j^5~+sZHfg&;nD;KjBuNgjG1E)
z8bS5<_%kq@uWD2Gt5D3ykaJ@pS#1s!jTD*$0@bso&c}*R>M&|fk?dbb4;~>(9eQB%
zNvizXGeYAWnm5HYc}%$K!Xkm|RUZ37w_i7-2J6Vo=DnQXdkK}1e>7fkJt)G{iq;W+VYJ7!C>C7y-+OH*ED%!W-DwrgqvWlyj0RcVgBJJ}$$5Bhs~0bqDi
z*(IOfD@#7D)uLE*eVW%o3Vu>pQ(ygO5lp;4HZlc#g7!h3XWh7Z=8`u(UQVP7zJ4z6
z(!WEPgtP3aQ+}x#c8cfz5*Ip=9=x&t`=WV}l}EqYjPfoj91IxU2FJ->S$37EWqNBJ
z&Q|cei|?ppkznP=9l${hYz^Zxyfc%gyc!Pp6oG{2RXqM6JuWj9C3aRCu(|(R5Fz2<
z!dV`kFd&CBMG3UYyF#Vw*oJq#hg0X*XwRa7WAwLJ^hNp(ywJWzV2Xda4MVS_YPW21
z$PSl#DtjP2%%JH;hF$VJ&o(B7@=R1fSHhUj1@-K+mu`MNVg}Gmo354wM)%u@VSO7U
zG1M4>GnPmzQu`ACy~~{9+yaq_2T{o8IO5T9n+w^yO?{>3(v;l~>$`0S1nFrnIwHMS
zt4Jp5A0nQ6zL(m@i10ignY)s?QSl^
zx1`5BdyZ~)8g*}hg=b*KZ6@5fkyWJY^yEr+mLDZ&ZK$stdO#sm
zqzB~&hQ)EWly(i<`FXwgcp6iWaBS~HYMhvl$r6Lx63N8!6l(%rd_AX02J<1=UbD@^
zLQ81T(HD4MX}ej#KK&^qTWPh-Y2tqFXGqBy#TfGQO5RTZ>9$$9B0{mq6~>1+$JXnm5!J3v3Xu80C5BcwJ%miY0ZKi!sBhX=q5g0!HnvO_$@jj|LUV(U$zzqqU
z_H>jwM!i~5#-k^_Act`duY_V6bp~8kz2sg<6x->9{=US-Y$g+qIB@D6W?fV5>K`T!
zhL|ttwAvs%c)0_`A2qua#lu$>?~HInNMp;9%G}=AwjEIfHNn9}Z@*a$=*n=Yq^h@_
zcyr0xhkvM#r)1p?LaEeC#foncWUPm
z_a9v@?A&Mou{IwbVTu!;Ov(W{mBme
zUObU@3Vz*=$jT^T=av-6z(GjVwyUdhHPkf?6P$C!c=A^`%)1Zl#MfTNl|f)5Le
zhhF1~qjyPjeR*m>$2b2XV;~$P{Iid#oUiqk(xTxz4c!&*;07;PAxWm>oo#`|8_qy
z(L!l8`9`(C7zx3h{2WT^7dSVrrp1
z<6u0Pm^tn7m@-6vNdC8hD;N_hDqg?wQBNF;u1edhomAr8tE%|7G!W_rpVQSYMTX=X
z_S-{bFcp*r$&i1R8)V6N_4b%I+k4S2pJkWT&P42KvcI3LZkSBAbMs&{Tgdu%uNPiDc7pIgt&
zW9o~^3iroNrqVg25?4PCjj1<%z`Gw_NGd)5J{8GuK&fsW3O}`@`imziRgBK&I7ax_YsE}Qk*M}*~F5Dsb
z5BICLzslW{M)?Hrqe?G-XrXfVbdi2%YEIemLS{c$$Yz1Y3!hm~$lqRyt_7RiY~Mnn
zL3Z@VyDQwpXnvdv0Bm}-xYkizX}&uW_cUyGOEvuAD^2^4hWEff)so2HZbg#CNw2Oi
z(`2CJuR+wqT7AjZvA6iJRJPhxOcZ&K`6ScjT`wfcV+I^I=$Xs1V*5_QV(Bb(Fv&qig
z!Vdc%5Ubv4>3Xc#*zK62ifOABtb{-OZbD3uFWx-soq5>j=M>u4FwIQH`XtBp=J0G5
zII~!~e-amSC_WV*QywDmSY9ip*lGcpoZ$8q;;Ydw8Y|eVO{ENH3ZGVq9oK`^W8&$i
z&A_aVT}b!i*!Em4OzBr~9`SM1gKuhOojCL3yHDb=iiYlYs;}LDipQl!pzb-8*C>Dj
zw`4117s_T=V++Z}1%#{ZX^#+H6oD5+mr0>0etNdcY+dTY)P5>2{}7b0%P2~HlSejN
zni1dW)k_&6e5HIUyEcHK7Hd7n^oZ1+=S6GnmdOH?%Uz6t8kgH_ZQJy()G_~
zVM)6FOA9TquzHr1N}pG@=G~1KXOYD8o0{-(Z)2muIqAQs`8WjJH)J#PS&}_ZGG}~!
zTWVo9HC?m)8jr6C@SZvTqXQjQi)H}W9J~ZKK6B{q<;UQ&A`@X?+$}rXtewnOufSUP
z+&h~Y`UOtK6in^ro}P1DkeaD0Y2bNI)FX5Hu+cazoWq{sNOop*Cv)H0P?gIFNixsv
zmZ>2b+zTp_Ziw96vspDej^dp(troz}Mh$WNkp+
zANT^(xTW?V@bXtoWabAG{;k~*dmCH^ent1(9|+MB|eogZ50zF*;z^$sYEH-FO}bu
z2C6=cHcz^nRi?7Jt2&w>W_Mp%QK;}t7f{8N0g43N2)@AmkW!CmegdEBu4^Ie9zajA
z;F#2k%HS4Ij9uao!$aJ;5Ff%e;}u&`PI5#oGEGs
zo1pyoy&L`_UH4~&SrL~=IAg%mxq_K3C1+H5Y9@y>5dWJbx1TuY?O>2<&6Z
zv&bpu_xP~OpQ*Tx?Z7Bqw5p{ttz+vjBLW#Pw+!mziqDz^Nz|z`MiWQhQmY3$b1ddE
z*5z*qEnQ4LWm-TUw)^#FEwYPMR`cp-@uSWL%SFR-eO4+aS-(7oyN2W3{LW-CL!$q>`7S5YU}Ts~ip
zE4W}$Mn-O7dcih>0-mVB%Wi!Yemm(l36bksmwoAArT5b`*SZ)-uXy5Ln^&7njQ+zZwQ<{e}u`oYglOWVOR$qSSt;cLWEj}aA
z<@+S$R-xQokpfG&gsi_gX}ruh!riz1lkq-X3nAV))2Q-241?+tlQ?o+#lF`<=Fgw<
zX3o;b8>6--tJ)2J@-XVH@8R=}HVm-uS5MdJHaQ}9{fvo$EU2wI@b+?H2c+_Mf=J-+
zd6hEFkQg2rN_UW!q-VTw6I9FLfosDbH;2>t6T1Qn!CbmxW!tlmMcd{gOemXR;%eLc28>ViP9c8Sr<2kCVR;h#OpUE*kTNWYairr?zdWU;9$LD}RduzJHKP)zqtDeEMItqUAL~W!#VOBhi2SRV>L}LyIVf|pYlpt
z`?RhAe6(V|Q1hN*G!r5w?fV8&VbY%*OGsz53FR6VN^);%_Oh
zx-Uuf0B2TSl6C4#DJ^X*dV{!a5t-La{G4hFp-IeAU+O3FkliTptt4j2^w2+stP|dw
zaBo!S@TIvhu_7g=_*jVCz?wwT7co*upw-kg4WA0PM$g({oW50~v+{MVfpfA&?F%qg
zRxH8xCcP^Z)wg_xTv!?n_rzjAu#II8NWOF(0D4<+%q!8K-7oFfCs$o>oJ^iw;kOP?
zw$ckIazVitl6Y-(rT{V6d>N>ta>fM%|htN$4RE2%HocjR_)Fautq$6bDza4O>Wu`;8aZBH+`LOt*ld}BIh`rnE`$9kC
z@;z`osr8Q*wL@lUNhnmHCNvB4OrW;c3k|)rN-L4`w+FBNgFXQ0%9x=rIo*A~4}v%>
zv@vn26t0p(0{%ub1pDH%z*~qJJ)Xp3mzK-E)s4G}E^S??qx$Z#SW0i-wiriK9~35u
zp|Gl`hgkgiwjT-_w|a3L-C|6>u*>;D+qV!G579l5HhwP`v0=5HaW
zWf|1h#TBv%ZbC)Qm>0T^y$609?w)=ko;6sXVY}ZM#J#3E_iFCPg4IN}VcHr&vr@vI
zdZD_X75x8jd`=;r`U)#GE9ba+p8N2KQ7KTsr_13@&Kr5i(k#D+fjiAsI;uKN&+_3=
zK8XiW>nhuL3kxdM!r9!o7mwjLL4x9iV)VKx@SVcZ
zP1H=~RNfHEh-2>+0qwGZwY^mSMiggj&?ixVxY&Ud42+$kE9c}5%oziW-Gou
zojdf&X?6+EM`!=)^A=8acxV^T2Qvqla?N<<1MyM^)3EMwwr)WhlZvtL8iwQKS{#72
ze<1sXhKi{wBj1Z0h@k3#p<(7>f-P)X-qoD
zNy2i7Q2HlsxSH$GX5$@jp}}E}{C`euR|*I~e`Pw6
zYE&8bcZrWwEoqm__qQ~ETcgiPOlmVz3nTV;=i|T4#Ax&B5w*0*hs?c#`wt{jVWZ=N
zSAxrK&ngbiEhw>CR@>d&Tqj{hXa?T!TZJ$omq@$ar*8`^{?(GujI3>36bFvf&CMV?
zM+Eb@+q(-Fw^gF!r=I6dGu_AuWKO^G($;BmL8w%qpG6uBubjIHU3yU~x`R4Y`5T{N
z&+Ys-x|h~C5VEvLC@o(>&@V4ZvHrxZ1+H5&HuPAG!S=@XpIE8d`Xa#pswoGz#?L3(CiR*%%2zaQDfihZ&Ie+A^T5b27f9thP7%+G)Z$VW-q1*O;1+xWn
zZDwLRZxQab@`4-Tbf3@Ji;w7$K&kA_0f|rViB4C==_>#0!H+9=bko!#*`hYiwQ`(L
zxNY~m+5cGR`6y2};Ie*B6Ft}|{3_k45wL`jRV6U7WtC+wcQw+xux(<
zUSwO%B5W0-`tW8NM3P&7e!b+|vecKSX!{kzt7I-Q|AjUz_j&W=-XWtx6gtdgwl-
zU~W2!bL(s6nk^Q6C%}C%`X0@2@kGxyCL#SYfi~d!!=DWkS7B!i%ELmT#PH?q(Dh8|
z4q=!msu^|_wsYpptVwcz0Z(YaY44ciy(4k#U}F2_q{{C2qZaDC(7Pa1!QxC==P~cP
zfgSf2G_R#aPy-i~)D=GiR~)*{jf*(9T=%oX?>t?tFl<;P*xnX3*O^#EuW3A}PnbTy
ztA=o*7gm4`J-4fAd46#EFVDUvHJYn&
zZ^uRfQLChoJTeO}dG#f`{2u?C_zP@XRVhjQDPeWFKiiIRkvl6H03Rh{==N;q64N(K
zkrV3+lzDcw+FHbUM$yC;UKX;v45@qM?riFEI($XZK*ag5xYFWv7$&WSr8BUCt~nKt
za$_htnjCF&R~qz>;E%1)zpPPjS`(
zI(%G6&{#rm&pN*8zTuXFIiVTopTGa-`NFg(eY!Ri;eC7Nq>#6_tf}g*Z7JLc47!?G
z>fT+&q?;2;5_Cco8Q|)63d#-hMLa{#F=qeC`HDzJEvF?CtOtU`8MFh21CY&uoo=ZL
zn-H&kP1D0YiwPjSB^W9kfo-1&Wvb~EV=t`~V?6o8)|=v>a>OBG42R;oI=-(+c5SE`
zG5pMkY{U$$UD~WDtWN&6&JLtmX$U4hjU5nm7zdIsHwKndFpFaI#Jr*Y7Q@vvgc`8+dJw0DyQLAr{m+)!f%(3>QI4N`)MBD1=
zKn*L}zM9yn+*SiEb%59I8$*4TtgXBPxtg(=u#;v_ivXkd?p`cGNC*&MZ%{+tqFCgW
zzq7fWch68iH&NpHf)^xUfN7OH=d?6<|5nB{=_RzDdv=
zXRsh-*_zYCex!nC8N+fBcWbfo7aCOOm&&hPQtP>MAqxbD!DM6pq2@^nK&g$5dYsAZ
ze)%IyzuIvM)%Jsm8W00uc9fLKs~0UuNJcVI!n
zBJiMGQf?JzFir>gYSGBHo3+(I(3r%r{7u8M|GisYpMfKCv+3m?7GFx-)N6Eh`*R;^
zpA!_||MTuwp4hwFU&n148`wC8~3-h3G)A1
O03~_#50$cJVgCX6@k@sQ
literal 0
HcmV?d00001
diff --git a/static/iconfont.ttf b/static/iconfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..befa24aa2bbbbec7d99e86cdb1428fc53938b6b7
GIT binary patch
literal 55940
zcmeFZd7K<&oj?9OPgQqy^<8}*)Aw}u+(-A!^xTt4CduTUoCHFEKmz1~a32Op5V^sK
zh!VMEMOaW&RK$Y>6%-M0cS+{kS`O*~-q!@P&)6!1tZ_zUH*;8+LsB
zrL$jR%+|=5_xv-qU2^&v^RAo2Sa^c5uikU!rVSgDAN?kZveyB9XX1wP3wbrJ>1N}Z
z+t0sv3KyvF6~?5gZD*ghVb4>W@NDoCxcA`p4Hxg=f8qDyI)*~ovo>tsG`h;TjIn3m
zVoYq`arSxVU;g@Y|G?PutAKO|1MbqU!@JmtvRNyRM9tBEub6jm*H~rWd$Mo%56oqi
z{rTXqpn}%<@Hb>8P2j78nRjtTHNC=bV+}at#mJ~40cDm-ab
zZ2iKwZ9ZcI?$y8HH~N+14rliIU3`}r-@|OoA+8h8;_ip7GyfM>;doXsn}oZ6<8SKp
zxf|ImogKQ#qF>s@cA;3EdV1CW!vD6x|BiwGcg6swlMO&~vCW!V@-AzxNtfa-&AK+6
z!5wg4mX_lC>1-CBDd_|H@%qX7R{e7QO8pxB
zJouMGlZRFxI^)p!hb}#I!=alFgCproAJW(98}#k^F8wO~I(@HxkN#=>LH!H*W9ECL
z11jEA`Va5^$aY
z2{7q%*~9EP_Bj?}D_Ijp!}08+><4T$%dokuk3}ItZe%G|V9&EK#zc~Bht#-`HM2eJ
zF4n`&Vhh+OS(z!24I^xr-NZEJV;8X?yM>*=?qqkce_)?taaLvbu)Ep$EX%y?R$H
zj4ffev2)ln?EB2a23ekUvKV`c^|J4>C)w@nJFJ~`uzT5F_BHl(Ho+FMQ`pJuI(9vq
zWY4noY!O?`O039!$ew23V=7zDYOJ5V%*NQw>>740dx3q3UCmx(SFsPWE7@+ymn+yw
z809j?`ep2Lwv&B;UBXtd6WIgoes(E)iLGN_WRI{fvoEnvvne*pwzAFa2r$~24qirpanE$L
zE&*l$(-jLa7nlz1g8;LF>8b^oA4~_2Bfv~yy2}F08Kwh60?Zz!dn~{_V!GD?%qXV&
zEWq4iy59oKGNx-5V7@UuU;$m(-Rh8CNn*00p>K*q2&=^b~8O?0p>Z=(-vUHGd*Jg=04N27Jv&dop1$!
zA22;{0XPHG3l@M!Fr8=ykRGWQEdbwOddUKC5T=(c054&BlLg=^OmDUT{DtY%765P>
zrc>Voz;l@1W&z0}z1;%vA*Od&0FK1;P7A=Bm`?2u0GDEVw*}x=Ovj8P0Ow+Q)dKJ^
zruSF?ZpQRp3rI88={Ep49MfwSfY&j--vV$wrc+x3!2cknEC45D`mhBgTlEnOz#W-B
zY618p)5k0T$7K2}3&1;>K5hZHDAQ+K0Dj8!ITnDkGJV1V@K~l3Jpgc9rq8nge3$7o
zPXOS+OrNv>yqM|q8vtCH=?g6&ZC+nw0XQ|&7h3?H&GaP}fO|82sRiKUOkZXJI6Bj(
zEC6q3`f>}v<(a<10`PmLQ@;Yh`I)}T0>}WSQ$GP94Vb>h0>}lXA7=q11k-7(10XAy
zPJIu6)L{BL3)nq4pJ)Lj3DehG0GYz{lPq9aoKLm@a)#*}EP%ve`l%K`_Avc43m}D<
zzR?26Bc^Y%0FsI6G*1AKQA|I>0!S;SpJ@T)7SlId013wQEfzqQF@38AkZMfdZUN*Q
z)2aUekaSEx+XBcurth!-(vRu%J^X?VgckT(=W9E5|-&7umG}_={qfe)Mff*7O+!rzT5&xVy5r1
z05X~ByDflpX8M&DKu$CLDhnX7nf@UQAiJ4waSrc+%2$atpT
zU;(5((`l{(AorPmlLgQKn0~Vb&;^+OVGE!YFrDTV0Qv#bKVkti1*X$@1wdzD`bRB*
z_P}%+D*)&bOsDYyfJVV|8WRBM7EJ%R1<*2>PHhT+zQJ^whX80EOsBC9fDXd+dn|x9
z!gLzz0O%!5|Fi|rP?&z71<+NP{uv9{E}ZYT0Qw8lAFu$L4AUR9fb@F(Aq&WC*1uo@
z>H7K?Er7nL+J5aU&Iu|>Dxj_K!iyf$106mNy
zSZ)C{GIjv%P5|AE9iVyv(9+m}pI88WjUD)<1<>5sfj2FH4#y7s!2&i5=RaBiy^bAJ
zEFho8LA;9qx*j{Y+5%{O?BE&;p#QOhn7ahf1lhqI7C0Bw^Ue9{8wo$TOW
zEFjzM(4+;>McEOX94tBcIbQy
zpwY5J7!w50ZP_8vM*uCC9m3osfW8ZVjs>Lo;%^ZA=AZd0*gTJlL9s_XCVnH$lb)7k
z`7HSn+br8vwx8M)_H*sG*>z>D@~WfX@qptUwMpHkKIz=y{IN@Rudz-vlybpTc_MPZ^!+)0lZS5rOmB5a`>%qR@y}{py+CmqHz8iWc
z+z~!M{7j@Ja%+@De;WHtd~NdTCxtv=0{t+Evs6tZS8Blx9!XA
z`SzXduXn^cPU!e{XQlIzE_c_S?uPE$DwEZo>bpH(?)CRx-k0q=x9_>yDgCkj?+$Dk
z`2Aqt;GV&khU`NVL$?hb99}y7^hn>xwIkmh3(dN8*0bY%<9o+{GyAqV!*ljdbWA)r
z*Ex5~ytn7io`2>1?@snF$S&+zc;muvFMNAZY|)BE4=;8vUby({OR`JOTJqe|rcrK7)z`1du6gdbrsE!6d*j+Sj_*1C
zv+KaYh=Uw{LV7})1wAoDx-0i`CC#Iwyw<^`p1w*XWY3p^l}K2li?TM#1=}|*%hUVz
zP1|hKhobpNBp+?^Xj($!T$5(m=ojnv=`*z`{VsX}ZsX%9;^CX!0pe7LAD6x(O+W_?
zLv{^-(OXqlB2f+R4@D|{J*B*zckps4ui%b76a`X|N)34R_0WA>;EtDb!|mtXAH~7f
zevD-?{8`+hFVKfmw3pWAFd|AXJnFL(QV
zZsSU~|7^D(75Mqx%Xb#=cg(}9zG`If&}V*Tv;FKd_x+s4Hm8GhiTDDIdu~^Nid_Lp
zgn1NadpHz{mdat^XD{T-CYsi{FHr04lP+oLj1|=O-pF8X_Hjbq@achYF;mKliN0Xi
z=k+b=Y1&W=26`@<{o`Npc5z0)?rlpZT+uie$IT9Cwl(wet<7`7LK6ck+;*vRP-OEW
z*T_}w{Zt4&NSgYQJ_X0InSDvvrFk&TYo)$gUnDxlm0Fiwu~#E@vw=(H%BVn}mpgdX
zI@O4lQeV{`p&mzHTRlEBdmWdhq4A|WkxVqH?id%|*7lvNkK4pWUr$BIv%=`-S@L+m
z>)_p@q)4g|?bficDiIwSw~$XQCMtH-)hWAN5!>$hbC#;MqGS(cIgbUjAm>fdNREfZ
zSRtF|T|^Vwe1-Tn#!Mr|iBtx`gTts
z;1Oqdv^@{04UT_Q19A1jAjay2YCN#s9SFn&0iJ)z;dlt&)eHHlxaBtPx=;vvO&A-F;+LH9}}*ilHzw>$uAauj~ovgZaJR*
zcTv#n81y#u%g>~$RD#af3Hddjcr>aR0p#r|j!|Qt(Np=d5{ZTjUfctPm<;7YFS@Z8
z7h$Da=~c{`h#3$Jo26@2LI>Cpa+nm$f+3CxnMv`NJpr+EeQ#S+W#}9tjW88p&X*2Gf}Py>iA$&==4^-vb^3tXz(sOaVUnJk>^`oM`*A*Tr--&U
zIF?iWH0PIl_ntNB_CMA(_#7`LbG*T<&G^%j!6ibe8Glq8T;d{^2qxXr*So-Otnv9X
zDQ>ny4J|-Z9zzYRg{CyMgmt6WY8KqHS|XYo4&yB#1Y+w5zGIOhE?aMrw|%eABndq1J)+G1Km3GPD$OGMk%yG3R*0a<
z!LE901+7{_uT&xe?T5d%Ic?^dF2wI__URtGE!Wb{`_7lk*%r=Qvet=@9`jYwS~Jtin{;r8aQZ}0J8{n3e|SwE{Fpxy$weZ@<8%&(&*fo!%Z0_&?VX+LE}XMq_HfIT
zyTL7-!rAQ?^8OFcxo|HP%te;eiEl)L*E*Gx@=RxR4OUPb37VFS4SVKaA4|Lnh
zB_G5>soafG)H5oo7%?GxndB8wqI6S#nO8FxlDF^rJFedbiqgGF#Uv=?UpIT=-dANl
za7xDoBXJ24k)6^mbBztj84cZG^M|)3RSe9=-zaYGsV~S-nu}>jXNAJ%h5;0rYK*_+y4kA4PFb;I&g+
zoGc9tRSheO$MuM&J>qsd0v@*vg#RgIFMLDOzS$^gA9*J3S$l#Kay`Sp
z=L)EPIrEg);jr67Ph};iugSOfRm~T$3;Rh9$4Pcc^TuA?>)jQKJ-tCyH$0uxZc59s
zM;~?jc)H$}kQv*=Z^+kD411+kBFp-a5UkNa0ZDcrk3=!rah>MU7Vb-CG-b)2SwowO
zEmf6!+=n^+Fb+OtH_GD#m7ZEl<0<(vDV
z!M+mk`70={M?=WlH!w{T(wj
z0qKJKrL(0m_-qpJp+UA2_m41A_WBq!5lnFf#GArFDWt(DP1Vr2^F=AdTeE7=k>+h-
z`9&9BF*>?J2s-XrMm!iFX-t0kjvpKU|nFZ}q9myMmH%Y|58FPWn<#FkAwo{+YJ
z&l4Uc^6tJLj~OJObP`VJ1mM&`$XWbS;eWaFMLEn{a%xb?m^j@r{wt6C(5@>Ul0Cng
zWg$00D30XX+sE76bJ8sNb*Q7#eW$K8~Z~%_*@_v
z3-j559I##>s-F3si&1H|{ZX6y_01fGLVG#*I)B9t%=w~nJwYgIVI0V-v+6_A)T
z-=BvczXxq~1cO?{#Gr$7s7R$6?;7IaLRjJXpw)4qNNq;aSQzaK^1$E5x%x
z@NxMi!Hp;Q(}ZGcYtHHOg}vT7g1y>vP!NN46sI5N;)jyN$DfsLcw)JQ@FrgvkNBu>
z(PY3kCJvI%vY7ASz0eYCIZPO69>iO@<_x+jC4NPzo0o%czM>{v0hgF8_XyEbo_;JE
zaqZd#H-Xjey^;-n$~N-36=yheZ*Wwi3Zuc0LQ^&x0V9+!U~(8J5~gOYDBg;O_kSTh
z8umy$P-u(u9o4x)ctTmn?|%W|zy&WPj6KN$m$*Hs@)vBbZCf-qR4g$&)>a5`F}FIs
zFQCO0{`h4!$-%`a%Ho;nZ*fJoIfz8eB_O#-ya3H&0KR~g)Gu`+o5eg=!cxfIYKl$bI5sbT?~CN#%>6O#Wi6&{PBe1fm=N(q
zV`D^!={IbfarY(qd5b*dbABA%MhD~f-0PYH5#XF~dd0_5ZcTHitRo&b5+*50t|uB_
z{HU!H)|k7~I@*j!Q8ub+F6%@(^bs1Hp(89K-_n0YC9hO-S_lS1FaNvrk|q{{Mnt2O
zw6K}$zeDZx(?Sv{dHR4&K9Cb6#pW=b>o{cpv5(O?n1XhGmdH3JMUEa7saLHD1d_F_|33e*ZeQ^W%W~3
z$*~9i?<(gi)QTA$&%(b9D`=Qv8UGap#X6?2wR13hau9gL}F{{Ddp%
zyWf*v`_xQne%ScSZf7X&`h?TTlX%EveU?AK!l~g{jDq|<)0y|BVQ(Le
zMW6AOGl{xT;Vv$_l96NHZ0t3D?F3dpZ8x{8JQPR&(!0J1-_AJbe;@VSUh07gYuV|h
zf$oFef>B8#L`@0xcltpp<$W_<0W~)Q^%kl}Uk@p>J;z|R|K6X<
z@=xzIj~*vpyu}%}&@@p?hMi|^b{>P^yWd9ne=wi=ho6eLYGQdb#&PGFn_Wqo7uLL<
zE8fP8UWynCJk3Rn7I?qxO1TeeVhxHa++R@1VaAyrn<$(B7(%$l_#$no7PXtIAxueV
zmJ+l@Om!F#tnUB0;boXE>NLf)STCo(hJYfvnRNHr{jwW~FBCp>J0kY8roaedYz!T
zz1AOtd)4V#+u0Rw_5_Rhc&)$97YusBYdqebt~FtgSqg3vlegfo3G&^ID18|8)Of9|
zbaSN;&h<)BrL6KO{6E_kaNlKLT4{Vgy-
z{3RhqbABIu$Ta7(coxGE4QTQ@)0+c>P>@2@SL)>8)co*%@+R)L*qtZHosQ27cN8{<
z%XJ5=WpWkHlz1@c{gcBdt(0V^o61bS>DAuHV`1CuUa#NLkhuJ@Vj
z70lCSdo_GJ4iyqN)d9KK0=~@zw|9>Hs~jx
z&e5Evpy9u_+6&vQO5!;huJXhCh}Bs%E?Tf@&K%J(zNjv
z^|gUne0?y05E;hu;eQh^Nx%O0QH;kX_#dnbZ&_Q_;MQ({8xC}TjBQ`JS$#scb+&Q)2-Zs$Fffw85lwr*PPXwZ!5TwC7)&f`4o
z4EtSP**BPLp1Z;kh<+~4
zCu?mvkq$;mRqjkJRR)S&wsAW@PIknDlHGqO;jQyeqOE|LzJQ{n)DITA7zH%9Y1$V`
ziv4KZk7<^bIHN%{%gP*@Mf7x2vuxYATulayZNB3i5m&r%ZV-pak&d>u_5`>$<AT`gt^#~q(N!Vi?@_Un7*d*RXwAX!I7ET3J
z+W~n5nuxS2D${xtEre#{CE|#@4`Nkn^A9GC3R);w;Lim@AbrH4o{A%1@&YPY9G(4Omic!(R=t7q^kmS#yjf34Thf%fB+igx8|6zdtm`7cpe)_(!
zmh}30)Dv!8I_3=6j6;%;Y_eD%>o?F{BW$B)>X5kg$dAi0DQvj7n0D_f!!*Gc7|{zgBdK
zM!7~RC_EA~^G%uYD@mgbCBu%nTIPR+n`gbTgQsm={vcW`WN2|;fb)Ql|J57hrv_>P
zW54a(a!=2)YPAXBr$iti_9bg2LoW4ks0IAp^7K9q@976^{9Hd29{v|R$Aezu`=`PN
z{f^9k&8tg$s>`aE1Ssf)5es+B;a^K1l@g#(0cBNqt(RjqkwXX4tVTQy6AB%TzDK{q
z-O*F3mEZ@%C?LP;dv|HdVES2+vogjjI6llv2yBXziXGDI>}R>R+x4ImLN3lVKX(c(
z=1iobi=42E)m&p!QI-5LXJ=2x^obNdi#uT|Ij0XglWzXmqVbhwiF`hB?!oN1)Yg=a
z@8u(d?&C<>B?`fUM~wxABRrH#_gv)Q!I+w!>gZaPaYRFsqr7c&@Jz!u6G3ZmO5Sw*E$BHx>}3YAgO)i^|8W>O0bNWLSHTTKW?9Q
zt5;t4XFklO@$A8Ki7x)cu=H^Gv)S3w*8fQZJv;onpWQX@_@-3+S)PyoE|CKlooC$f
z$&S78bQAx^|Gb&3G4h=Bk5UzW(il9t^N`a9vBQ&?cAc;TN=JHGu@%BqTM(?k8XTsI
zU=A5HUk&!V>4}HlK)&|g9@B;`=CoXp2NjMHBBXh_f7_jGY)oGIhy2_Tv}b%<~r!T-i^V}qIq
zCX63IcEqReeUO%-!LB^~2I5IEvkf{)>zkqfs8Nm)60S!74*l;ZAA$i+B(WJ(&(8k(
zl9{nR@aOCH{OM)9H-)CAHYpm{WOMD4I%OqJU&Dg*ZA?ykvaNcn~w;ht%U3
z#XpRtnt%4YpNk~uET1_zx~=SxLQzL%RaeJUT8*s<_oQ<}VT24~4(=|5@(HM$#Ntgp
zKP(PFpP8T>DpQtfwrUZ6-LmQXLf9PQ5cV_dXqfpOrkC7e3FMc~gCF2L{6i!
zK}Ebz{M49i?&rMN&5OMDoB1BM$2~t4_lDg{NOdJr1CFTQZlBE;sBZ337c6nOa9YBB
z5$__^?eWax-Nw&&t%X0iMb-&3!`jHP`jqA@Q&1#}xAN;2+>QQgFe;ZP6M~rYr)G2nQeK
zL`0=u>86s#w=W@Q79e)scfcEgyBb|>;p(`coM`x
zqZ_UoubZc!{9vjs*C@kld^j{!J4fL^O<0gp$m4H94IO;d^A@Q#Af
z4F(H7j>a;d#Y5s>d1rp9OA}Sjt3q=v&3AsNqoc=x7@={AA7wi!X@RQu1FB$|YOSUQ
z5^4p%y<}X03Q;lNO{I)0RJU6-uQ5I>zseHWwWRS94}fh;5hTm$gDCh>PM=cw=v*0S
zzE%hs@(6RF(nlE>7#5^>!lIDM30EZTP9)svD0d}}{$gw&p&-+Ub<8w1jW#u9w%#o9
zP$nc!U%X_K2&co+&7zoar=qSna(k?LU=h%@>omT6v|huCpYZ09W_*laNjGoxg~PtZ
zrwi0US6gqMnF9;NlO}x>i8(?YMD{V%^&CST(Swc#X-F}V3WPopk&alT)US>6hNpy>
z8a9ty^M#}vH*dKSu{+V2a9Ox>^Feni;)=yx(UkjCJ~cct#rf38@RV^!*thvc2@m<;
zuCV%Ig?IwEHbEDe4{VRbCoGS<8HcF#nsfK)zKHhz7oCCL52ZtmzEH^5hznl8m9b?8
z4F5CmrwJi+%FvTRsMU%w2(Ig$+K
zg7J7U9=F^h^G)S!ne_{Me+la+##RH%=-{6JLZib+nP=AJX)3#|LQi=72@lZ
zZy(H6qTvu!!7%BHTzYF_GPXPq*m|6a{!;5i7ffPs&_wh?GlnVU^FX
zHKbvA$Z#t)R&woU4fuzA>Aok1W!&T9YjOx>1EGd>YdZsHnAvCKB#YGg
zdbN_+U~G^_WPJGD=9$Nw%5`>0x=vPv9l^)5q)3SW1~yTPjtqm##wyx#@Zr;$xn$@*MQRYDK~irY
z>^v9EH|dued*_ry&Ki$@lTd{KY@B5oaj_fKtd>5H|qdv={T{m`xHob=e9P4h1N9G@FsTJ79eJ?`#-
zOJe8o-Te!NSlB;6$5pPrYle-trFeP?cP``kj_t#@y%K-QHH$CODl5~;1Yb1o>$AZW
zExl&D*acfWOY3!b4&us;6;){jpwA?VW}>^{RE_2;VP!_1y^rG~h%w5gR%2Z%^d(LE
zQYgjmOO`k<#Ux{$5RaH2exG!=Bc%3J9U;G?QgQerj%r1X_#J%}bo3SBCxVsG6JcIT
z@+%sO#+WRgknrKsW{0B(r9+M?J*iZyigg{S}#x&z*N;-sd|6>?v5e=ycQe&X+Nn
z%v))=2S6J|!OYnQYm;nEnvJ{<-hoq$@8#Biq@|w>#vL6NVcO*n#3g(w8@>9q1Cp7KgvKojw
zjdzW|k`tBNc66VaO~pE!*G;Ig9Xn!bu6au{FHQe8G8B!p4@M*Wv(cdl54R0Qc^Jm0
zD}D}wZ+O!93(hbqjlZ0O$5BblIkB#3$Bw3T1^8=u^VTh47{5d9fasAcvZF!V`G`AF
zymCHPD_lk^9Ez6agH(+u1^-DVnAbsKhc>93)Q<%-LM1RmET8Hq%qKxk1ZbmVD5bfr
zI}Ekk)GZZsIEHIo{frcqx_X)~^>!mHSig@v^X`z+T?pYRdPOVJq4kc0=MC4VyyTKDN3C*D8~N)?$NYia#pJy*jN
z7vQo`Zwny@5lYF;YgDWNX-^n;!lg@^2TJ8x4H
zA$8tdypTH+&Q>1uxHQVynaOQfE0v+!P9S&nbXqTI#vCaC3nwpJN)_UFXwgtK9EqY=
zDijwRgXsnyftDvVM1t<<6(LH{MKGFDo+Ug1X5Wk4)=F9+r^_rsorx|(5)Z{Op}C+R
zC?FHEOKbTV9Ur*)(#|t@OK}33TON0)rBik$ktw(BoULuhU{>Yk{zTkAS#H0sdFzE+
zS9G*C-Ge1G_qDdSuf8%Kh+jET7+<}9)$GQ?x^Qi{uQe)G&6>3uFH9~@x;;rxPAm3s
z&!q!dAO5lf`9#$3h{t7D*d}aTLp~~OFuSVS0vRAoFA4?`Z*+2;|fV$?ZmiE#m9>Htf6r-5i-eXfeu_%|OZXigM20
zA)sE43bd?LwfRUmA<;FAhOeTrJvL
zVw3E$^UIBOl4_T2b6<1%c++SzGRA(gP>~&O`G@4x_C~zk|Dz%odC(E{+6NV5((M?q
z3!iG8<{;HR<={?wi$9*Q@dxB&G9Z>KHlV@POjeoxH^?m?pRmg+SK=vIoNiAg9QYBK
zE*Jh-T-r4KNrzn)(B}E8!a25b)G58jC5L~;8pT8)RF_h`H{Si<^~=jJN1VpENEie!^)Z_lig@~AH47;^6V
zjLoAdgR0jRkQ{@GyH`~PWtZx-58AlLILoIFI3%aT<#i4y!s(b$+`=|sch*lLXY*;&
zm2PL$>A6N}KyIK(*)>>m5|l2I0zUb-TyCyZnq__s0u+KHP9e#Bj*ung60a*$E@xcc
z3mgcsU=Vm+w@|j;EiUf@ci1th`hv=&D%43ebg>llBN!Qw
zcKMt!r{`Kn3SG>^
zj5TDn2i&)iYv~qu;3<^3g`7sWsIKp59+x`b<%>B%#ih!m&F|ul`HJ6pv1`&9Q|)wg
zD3?0@%6tb7lZs^{{2sXmKIDn!V8@f@4dy^5U@J$k#FTV34fcWQN`#eI!%7NE>8mGD
znj%yocNqyxX==y){X+ELzeAdu|M=tcmtmTY5ANMNG>bpDZRlSKL!m?wYH!vvbOGGr7BN
zcC@9tmYoWLil-6mA|{C((AUk?e68?zor;ymd$9Wc0Z>EU7RpJT3H_L+1Y|$0y&?V
zYxj&(9k!h6adM~4yii@D2YF~t`>2Y)jt=XnsH)P#-NMTqb_tnHE;%B*WywQ!tXIHu
zD+dDd?;I|uSbcOfp84C?B7cU7NO9UisK{3ryNyA_RD&+R-!=UblnuA>kju|MtW;Vc
z`|RsoGFK|iga9t_T~Yl$AE%G%QH5*0f)Vb{^C#m6u8$^7^Z$=9efcZd2zj_4`J@iwKLDd`
z=k1d1faJFwc=)>K+a#Yl-#+OJht$ZTglx}616$_L?P(pc^P=73apZ-4xTRC=yx$B#UvAb9yZJ6Heu7bi!)N5t_f
zzvlIB_cnOnpki-m5p6p_cSMvremjM3wr@8@P_UkrR0&e}F}_GmMLGsjYQ-++EKIL)S!|u}?Z(TRCeRW6sn(ZSS_U3Jom`iT{+64zoeC7xZS9=k8nQHzJ7f$!FeLczaLB_f@{}CntZ7X
z5SZBO4q#>M>7KyOfad}dSr>XVTpD}nn(iNcElxK)tph>~wDEUZ2Wd)bhBpw62KYN#
zl#lp*Y2$dWhVVy#f8DETNyN$TC*>j#I19RmxrmV?Ed)Nr!>>yhNR3$2La|RQD>AzX
zgE}T8-P6T7I0=(QULv4yZxqBVI;KR`Wx|at0
z3kOo&BDUh1?v8l-&`^84qx2qe)ij)l4a{{w4*27K
zkISaT+7)H$L@qvhiN7U$Y9Tfe_4ym}AQ~UY!TI7D_#SEXS2vhpZ%>Cn>a00tq40uN
zLa8m06T_kiuIRBFGr6{@&FA%1r`m8H=svOeMn@73DsJ4oVYd)hp0Z)LB<UNOWrR`8a2@HzMgujcyXVH<%@GtjpqUW`0gDRx_TAy*2K_elBmazmkUq9bm_V
zAy#Eh6O1lub-DpushPMvHnN`7M
zV{-Ufx4FcO#&Wlr_G^doLiN&{Fq`4ow#uO%v;pd?BGVPl3G#VcxY2FG0iGBi60Qg^^$m(i4QO!%Qo5#!-ak`=^>K3d-^a_Cb`F_1{{h@vAZCPqwYq?ZOvu(
zcm=fg)XdB2N&RB4J(BZbbRVP=4
z=7@(S{;KSA+HuF0iXo}Q3_VU_G5HQT>drQ`&x=RV;?8!bUv;=__OipS#2PZ~)$wYJ
z+oig@V)#LI%8I|ut15nfj>lophGa*+pN|&OGPix3G)^frB0DuzaoH7HzlP)^$svc`
z-0e9{jSo~*p9{GhZB>_B#R~H)Ww|Zk<2HND9V~(=`MI1wV~A`SDdg$jkPUrkVtE2&
zg4pcFrj?6pzxAm0$(t3VKXM-Oz+OIWwxR~%`Gb9-#+@SUl>At6@04s&_rkrMtNPSL
zK%G3R?E(IAw@Y@Hij6DU^MmtzHYMgBZqIj}+}4>$`)pC;d*dH2y1CsEbH%Ti=vf*J
za;hrsY~#GSalD~tSuUM)sS{@_9&S_OF8k?2-k8WXdOSi7rya94Tt4c;gmcz*v~~{5
z;4biWSpLu___wjQlt%l61<72cH5s;GmqMFpI(jH
zOiZX9EIu{|e&;OhTtt?=6`;4!HYtHN4@#}2J+vPHkqe&?`6bX=7R_)X7L(I|N*0mM
zkbHsYc)?~PHO-ZJtr&1Tb;XoGD
zuj&;LuF%IYFuuj_fG?TxBO(<3sJ-t#>x)KxQV*7T^Am%KAU>9C`iAr^X~gtBAM=E@
zkAt=6$T3eFeb&=6wHQ~MmHOX(7FE;hA@80PQ_>)E