From 4e60dcbbffbb1a9d720189608b63b7be3ba05f1c Mon Sep 17 00:00:00 2001 From: Lufaneng Date: Tue, 28 Jul 2026 09:43:10 +0800 Subject: [PATCH] init --- .commitlintrc.js | 93 ++ .editorconfig | 15 + .env.development | 8 + .env.production | 2 + .gitignore | 9 + .husky/commit-msg | 1 + .husky/pre-commit | 1 + .lintstagedrc.js | 3 + .prettierignore | 10 + .prettierrc.js | 47 + App.vue | 46 + LICENSE | 21 + README.md | 1 + api/index.js | 4 + api/modules/auth.js | 30 + api/modules/user.js | 16 + components/HeaderCustom/HeaderCustom.vue | 54 + components/IconFont/IconFont.vue | 36 + components/IconFont/iconfont.css | 19 + components/IconFont/iconfont.json | 16 + components/IconFont/iconfont.ttf | Bin 0 -> 1636 bytes components/IconFont/iconfont.woff | Bin 0 -> 1044 bytes components/IconFont/iconfont.woff2 | Bin 0 -> 668 bytes components/LangSelect/LangSelect.vue | 58 + components/Login/Login.vue | 307 ++++ components/UploadFile/UploadFile.vue | 426 ++++++ components/UploadFile/example.vue | 191 +++ hooks/usePermission.js | 10 + index.html | 24 + locale/en.json | 8 + locale/index.js | 23 + locale/ja.json | 8 + locale/uni-app.ja.json | 36 + locale/zh-Hans.json | 8 + locale/zh-Hant.json | 8 + main.js | 11 + manifest.json | 100 ++ package.json | 38 + pages.json | 161 ++ pages/appointment/appointment.vue | 317 ++++ pages/index/index.vue | 654 ++++++++ pages/mine/mine.vue | 131 ++ pagesA/JoiningUs/JoiningUs.vue | 369 +++++ pagesA/ProductDetails/ProductDetails.vue | 158 ++ pagesA/StoreManage/AddStore.vue | 1081 +++++++++++++ pagesA/StoreManage/StoreList.vue | 362 +++++ pagesA/StoreManage/StoreReview.vue | 363 +++++ pagesA/StoreManage/businessEdit.vue | 341 +++++ pagesA/add-address/add-address.vue | 457 ++++++ pagesA/choose-adress/choose-adress.vue | 501 ++++++ pagesA/privacy-policy/privacy-policy.vue | 44 + pagesA/search-address/search-address.vue | 453 ++++++ pagesA/user-agreement/user-agreement.vue | 47 + plugins/index.js | 17 + plugins/permission.js | 56 + plugins/ui.js | 28 + router/index.js | 91 ++ static/imgs/avatar.png | Bin 0 -> 5854 bytes static/imgs/bstcg.png | Bin 0 -> 1608 bytes static/imgs/dianti.png | Bin 0 -> 75112 bytes static/imgs/head_bg.png | Bin 0 -> 129160 bytes static/imgs/jljz.png | Bin 0 -> 1217 bytes static/imgs/jthx.png | Bin 0 -> 1764 bytes static/imgs/map_adress.png | Bin 0 -> 200349 bytes static/imgs/map_icon.png | Bin 0 -> 3965 bytes static/imgs/xtcg.png | Bin 0 -> 1923 bytes static/json/regions.js | 1 + static/tabbar/appointment.png | Bin 0 -> 4455 bytes static/tabbar/appointment_HL.png | Bin 0 -> 4418 bytes static/tabbar/index.png | Bin 0 -> 4199 bytes static/tabbar/index_HL.png | Bin 0 -> 4230 bytes static/tabbar/mine.png | Bin 0 -> 4238 bytes static/tabbar/mine_HL.png | Bin 0 -> 4207 bytes store/index.js | 12 + store/modules/auth.js | 69 + store/modules/user.js | 32 + tsconfig.json | 33 + uni.scss | 79 + uni_modules/uv-action-sheet/changelog.md | 7 + .../components/uv-action-sheet/props.js | 50 + .../uv-action-sheet/uv-action-sheet.vue | 280 ++++ uni_modules/uv-action-sheet/package.json | 92 ++ uni_modules/uv-action-sheet/readme.md | 13 + uni_modules/uv-album/changelog.md | 10 + .../uv-album/components/uv-album/uv-album.vue | 312 ++++ uni_modules/uv-album/package.json | 88 ++ uni_modules/uv-album/readme.md | 21 + uni_modules/uv-alert/changelog.md | 7 + .../uv-alert/components/uv-alert/props.js | 45 + .../uv-alert/components/uv-alert/uv-alert.vue | 246 +++ uni_modules/uv-alert/package.json | 88 ++ uni_modules/uv-alert/readme.md | 15 + uni_modules/uv-avatar/changelog.md | 13 + .../components/uv-avatar-group/props.js | 53 + .../uv-avatar-group/uv-avatar-group.vue | 106 ++ .../uv-avatar/components/uv-avatar/props.js | 80 + .../components/uv-avatar/uv-avatar.vue | 175 +++ uni_modules/uv-avatar/package.json | 89 ++ uni_modules/uv-avatar/readme.md | 11 + uni_modules/uv-back-top/changelog.md | 8 + .../components/uv-back-top/props.js | 58 + .../components/uv-back-top/uv-back-top.vue | 116 ++ uni_modules/uv-back-top/package.json | 89 ++ uni_modules/uv-back-top/readme.md | 11 + uni_modules/uv-badge/changelog.md | 7 + .../uv-badge/components/uv-badge/props.js | 73 + .../uv-badge/components/uv-badge/uv-badge.vue | 176 +++ uni_modules/uv-badge/package.json | 87 ++ uni_modules/uv-badge/readme.md | 11 + uni_modules/uv-button/changelog.md | 33 + .../uv-button/components/uv-button/nvue.scss | 46 + .../uv-button/components/uv-button/props.js | 163 ++ .../components/uv-button/uv-button.vue | 528 +++++++ .../uv-button/components/uv-button/vue.scss | 93 ++ uni_modules/uv-button/package.json | 89 ++ uni_modules/uv-button/readme.md | 19 + uni_modules/uv-calendar/changelog.md | 16 + .../components/uv-calendar/calendar.js | 546 +++++++ .../components/uv-calendar/header.vue | 104 ++ .../components/uv-calendar/month.vue | 616 ++++++++ .../components/uv-calendar/props.js | 145 ++ .../components/uv-calendar/uv-calendar.vue | 390 +++++ uni_modules/uv-calendar/package.json | 89 ++ uni_modules/uv-calendar/readme.md | 21 + uni_modules/uv-calendars/changelog.md | 40 + .../components/uv-calendars/calendar-body.vue | 376 +++++ .../components/uv-calendars/calendar-item.vue | 248 +++ .../components/uv-calendars/calendar.js | 546 +++++++ .../components/uv-calendars/i18n/en.json | 12 + .../components/uv-calendars/i18n/index.js | 8 + .../components/uv-calendars/i18n/zh-Hans.json | 12 + .../components/uv-calendars/i18n/zh-Hant.json | 12 + .../components/uv-calendars/util.js | 435 ++++++ .../components/uv-calendars/uv-calendars.vue | 452 ++++++ uni_modules/uv-calendars/package.json | 89 ++ uni_modules/uv-calendars/readme.md | 23 + uni_modules/uv-cell/changelog.md | 13 + .../uv-cell/components/uv-cell-group/props.js | 15 + .../uv-cell-group/uv-cell-group.vue | 63 + .../uv-cell/components/uv-cell/props.js | 116 ++ .../uv-cell/components/uv-cell/uv-cell.vue | 209 +++ uni_modules/uv-cell/package.json | 89 ++ uni_modules/uv-cell/readme.md | 11 + uni_modules/uv-checkbox/changelog.md | 34 + .../components/uv-checkbox-group/props.js | 84 ++ .../uv-checkbox-group/uv-checkbox-group.vue | 119 ++ .../components/uv-checkbox/props.js | 70 + .../components/uv-checkbox/uv-checkbox.vue | 370 +++++ uni_modules/uv-checkbox/package.json | 88 ++ uni_modules/uv-checkbox/readme.md | 19 + uni_modules/uv-code-input/changelog.md | 13 + .../components/uv-code-input/props.js | 83 + .../uv-code-input/uv-code-input.vue | 272 ++++ uni_modules/uv-code-input/package.json | 87 ++ uni_modules/uv-code-input/readme.md | 19 + uni_modules/uv-code/changelog.md | 9 + .../uv-code/components/uv-code/props.js | 35 + .../uv-code/components/uv-code/uv-code.vue | 136 ++ uni_modules/uv-code/package.json | 87 ++ uni_modules/uv-code/readme.md | 11 + uni_modules/uv-collapse/changelog.md | 5 + .../components/uv-collapse-item/props.js | 60 + .../uv-collapse-item/uv-collapse-item.vue | 229 +++ .../components/uv-collapse/props.js | 20 + .../components/uv-collapse/uv-collapse.vue | 86 ++ uni_modules/uv-collapse/package.json | 89 ++ uni_modules/uv-collapse/readme.md | 11 + uni_modules/uv-count-down/changelog.md | 9 + .../components/uv-count-down/props.js | 25 + .../components/uv-count-down/utils.js | 62 + .../uv-count-down/uv-count-down.vue | 169 +++ uni_modules/uv-count-down/package.json | 87 ++ uni_modules/uv-count-down/readme.md | 11 + uni_modules/uv-count-to/changelog.md | 13 + .../components/uv-count-to/props.js | 60 + .../components/uv-count-to/uv-count-to.vue | 187 +++ uni_modules/uv-count-to/package.json | 87 ++ uni_modules/uv-count-to/readme.md | 11 + uni_modules/uv-datetime-picker/changelog.md | 28 + .../components/uv-datetime-picker/props.js | 130 ++ .../uv-datetime-picker/uv-datetime-picker.vue | 355 +++++ uni_modules/uv-datetime-picker/package.json | 88 ++ uni_modules/uv-datetime-picker/readme.md | 19 + uni_modules/uv-divider/changelog.md | 11 + .../uv-divider/components/uv-divider/props.js | 45 + .../components/uv-divider/uv-divider.vue | 113 ++ uni_modules/uv-divider/package.json | 88 ++ uni_modules/uv-divider/readme.md | 11 + uni_modules/uv-drop-down/changelog.md | 13 + .../uv-drop-down-item/uv-drop-down-item.vue | 169 +++ .../uv-drop-down-popup/uv-drop-down-popup.vue | 242 +++ .../components/uv-drop-down/uv-drop-down.vue | 135 ++ uni_modules/uv-drop-down/package.json | 91 ++ uni_modules/uv-drop-down/readme.md | 23 + uni_modules/uv-empty/changelog.md | 13 + .../uv-empty/components/uv-empty/props.js | 60 + .../uv-empty/components/uv-empty/uv-empty.vue | 126 ++ uni_modules/uv-empty/package.json | 88 ++ uni_modules/uv-empty/readme.md | 19 + uni_modules/uv-form/changelog.md | 23 + .../uv-form/components/uv-form-item/props.js | 49 + .../components/uv-form-item/uv-form-item.vue | 226 +++ .../uv-form/components/uv-form/props.js | 46 + .../uv-form/components/uv-form/uv-form.vue | 209 +++ .../uv-form/components/uv-form/valid.js | 1343 +++++++++++++++++ uni_modules/uv-form/package.json | 93 ++ uni_modules/uv-form/readme.md | 19 + uni_modules/uv-gap/changelog.md | 5 + uni_modules/uv-gap/components/uv-gap/props.js | 25 + .../uv-gap/components/uv-gap/uv-gap.vue | 36 + uni_modules/uv-gap/package.json | 87 ++ uni_modules/uv-gap/readme.md | 12 + uni_modules/uv-grid/changelog.md | 21 + .../uv-grid/components/uv-grid-item/props.js | 15 + .../components/uv-grid-item/uv-grid-item.vue | 226 +++ .../uv-grid/components/uv-grid/props.js | 20 + .../uv-grid/components/uv-grid/uv-grid.vue | 100 ++ uni_modules/uv-grid/package.json | 88 ++ uni_modules/uv-grid/readme.md | 17 + uni_modules/uv-icon/changelog.md | 31 + .../uv-icon/components/uv-icon/icons.js | 160 ++ .../uv-icon/components/uv-icon/props.js | 90 ++ .../uv-icon/components/uv-icon/uv-icon.vue | 226 +++ .../uv-icon/components/uv-icon/uvicons.ttf | Bin 0 -> 39632 bytes uni_modules/uv-icon/package.json | 83 + uni_modules/uv-icon/readme.md | 15 + uni_modules/uv-image/changelog.md | 36 + .../uv-image/components/uv-image/props.js | 95 ++ .../uv-image/components/uv-image/uv-image.vue | 287 ++++ uni_modules/uv-image/package.json | 89 ++ uni_modules/uv-image/readme.md | 15 + uni_modules/uv-index-list/changelog.md | 18 + .../components/uv-index-anchor/props.js | 30 + .../uv-index-anchor/uv-index-anchor.vue | 98 ++ .../uv-index-item/uv-index-item.vue | 87 ++ .../components/uv-index-list/props.js | 30 + .../uv-index-list/uv-index-list.vue | 461 ++++++ uni_modules/uv-index-list/package.json | 88 ++ uni_modules/uv-index-list/readme.md | 19 + uni_modules/uv-input/changelog.md | 29 + .../uv-input/components/uv-input/props.js | 175 +++ .../uv-input/components/uv-input/uv-input.vue | 348 +++++ uni_modules/uv-input/package.json | 88 ++ uni_modules/uv-input/readme.md | 19 + uni_modules/uv-keyboard/changelog.md | 17 + .../components/uv-keyboard-car/props.js | 24 + .../uv-keyboard-car/uv-keyboard-car.vue | 347 +++++ .../components/uv-keyboard-number/props.js | 19 + .../uv-keyboard-number/uv-keyboard-number.vue | 201 +++ .../components/uv-keyboard/props.js | 95 ++ .../components/uv-keyboard/uv-keyboard.vue | 180 +++ uni_modules/uv-keyboard/package.json | 89 ++ uni_modules/uv-keyboard/readme.md | 19 + uni_modules/uv-line-progress/changelog.md | 7 + .../components/uv-line-progress/props.js | 29 + .../uv-line-progress/uv-line-progress.vue | 146 ++ uni_modules/uv-line-progress/package.json | 87 ++ uni_modules/uv-line-progress/readme.md | 11 + uni_modules/uv-line/changelog.md | 5 + .../uv-line/components/uv-line/props.js | 34 + .../uv-line/components/uv-line/uv-line.vue | 60 + uni_modules/uv-line/package.json | 87 ++ uni_modules/uv-line/readme.md | 11 + uni_modules/uv-link/changelog.md | 7 + .../uv-link/components/uv-link/props.js | 40 + .../uv-link/components/uv-link/uv-link.vue | 83 + uni_modules/uv-link/package.json | 87 ++ uni_modules/uv-link/readme.md | 11 + uni_modules/uv-list/changelog.md | 25 + .../components/uv-list-item/uv-list-item.vue | 535 +++++++ .../uv-list/components/uv-list/uv-list.vue | 147 ++ uni_modules/uv-list/package.json | 87 ++ uni_modules/uv-list/readme.md | 27 + uni_modules/uv-load-more/changelog.md | 7 + .../components/uv-load-more/props.js | 95 ++ .../components/uv-load-more/uv-load-more.vue | 152 ++ uni_modules/uv-load-more/package.json | 89 ++ uni_modules/uv-load-more/readme.md | 11 + uni_modules/uv-loading-icon/changelog.md | 9 + .../components/uv-loading-icon/props.js | 67 + .../uv-loading-icon/uv-loading-icon.vue | 347 +++++ uni_modules/uv-loading-icon/package.json | 87 ++ uni_modules/uv-loading-icon/readme.md | 19 + uni_modules/uv-loading-page/changelog.md | 11 + .../components/uv-loading-page/props.js | 55 + .../uv-loading-page/uv-loading-page.vue | 96 ++ uni_modules/uv-loading-page/package.json | 89 ++ uni_modules/uv-loading-page/readme.md | 11 + uni_modules/uv-modal/changelog.md | 28 + .../uv-modal/components/uv-modal/props.js | 90 ++ .../uv-modal/components/uv-modal/uv-modal.vue | 245 +++ uni_modules/uv-modal/package.json | 90 ++ uni_modules/uv-modal/readme.md | 23 + uni_modules/uv-navbar/changelog.md | 17 + .../uv-navbar/components/uv-navbar/props.js | 89 ++ .../components/uv-navbar/uv-navbar.vue | 245 +++ uni_modules/uv-navbar/package.json | 89 ++ uni_modules/uv-navbar/readme.md | 19 + uni_modules/uv-no-network/changelog.md | 5 + .../components/uv-no-network/props.js | 20 + .../uv-no-network/uv-no-network.vue | 222 +++ uni_modules/uv-no-network/package.json | 90 ++ uni_modules/uv-no-network/readme.md | 11 + uni_modules/uv-notice-bar/changelog.md | 19 + .../components/uv-column-notice/props.js | 61 + .../uv-column-notice/uv-column-notice.vue | 176 +++ .../components/uv-notice-bar/props.js | 76 + .../uv-notice-bar/uv-notice-bar.vue | 110 ++ .../components/uv-row-notice/props.js | 40 + .../uv-row-notice/uv-row-notice.vue | 341 +++++ uni_modules/uv-notice-bar/package.json | 88 ++ uni_modules/uv-notice-bar/readme.md | 19 + uni_modules/uv-notify/changelog.md | 9 + .../uv-notify/components/uv-notify/props.js | 45 + .../components/uv-notify/uv-notify.vue | 220 +++ uni_modules/uv-notify/package.json | 90 ++ uni_modules/uv-notify/readme.md | 11 + uni_modules/uv-number-box/changelog.md | 7 + .../components/uv-number-box/props.js | 113 ++ .../uv-number-box/uv-number-box.vue | 395 +++++ uni_modules/uv-number-box/package.json | 88 ++ uni_modules/uv-number-box/readme.md | 11 + uni_modules/uv-overlay/changelog.md | 9 + .../uv-overlay/components/uv-overlay/props.js | 25 + .../components/uv-overlay/uv-overlay.vue | 85 ++ uni_modules/uv-overlay/package.json | 88 ++ uni_modules/uv-overlay/readme.md | 11 + uni_modules/uv-parse/changelog.md | 13 + .../components/uv-parse/node/node.vue | 576 +++++++ .../uv-parse/components/uv-parse/parser.js | 1335 ++++++++++++++++ .../uv-parse/components/uv-parse/uv-parse.vue | 498 ++++++ uni_modules/uv-parse/package.json | 87 ++ uni_modules/uv-parse/readme.md | 21 + .../static/app-plus/uv-parse/js/handler.js | 224 +++ .../app-plus/uv-parse/js/uni.webview.min.js | 19 + .../static/app-plus/uv-parse/local.html | 1 + uni_modules/uv-pick-color/changelog.md | 18 + .../components/uv-pick-color/colors.js | 217 +++ .../components/uv-pick-color/props.js | 47 + .../uv-pick-color/uv-pick-color.vue | 551 +++++++ uni_modules/uv-pick-color/package.json | 89 ++ uni_modules/uv-pick-color/readme.md | 19 + uni_modules/uv-picker/changelog.md | 33 + .../uv-picker/components/uv-picker/props.js | 95 ++ .../components/uv-picker/uv-picker.vue | 330 ++++ uni_modules/uv-picker/package.json | 90 ++ uni_modules/uv-picker/readme.md | 21 + uni_modules/uv-popup/changelog.md | 18 + .../uv-popup/components/uv-popup/keypress.js | 45 + .../uv-popup/components/uv-popup/uv-popup.vue | 539 +++++++ uni_modules/uv-popup/package.json | 92 ++ uni_modules/uv-popup/readme.md | 21 + uni_modules/uv-qrcode/changelog.md | 13 + .../uv-qrcode/components/uv-qrcode/cache.js | 1 + .../uv-qrcode/gcanvas/bridge/bridge-weex.js | 241 +++ .../context-2d/FillStyleLinearGradient.js | 18 + .../gcanvas/context-2d/FillStylePattern.js | 8 + .../context-2d/FillStyleRadialGradient.js | 17 + .../gcanvas/context-2d/RenderingContext.js | 666 ++++++++ .../gcanvas/context-webgl/ActiveInfo.js | 11 + .../uv-qrcode/gcanvas/context-webgl/Buffer.js | 21 + .../gcanvas/context-webgl/Framebuffer.js | 21 + .../uv-qrcode/gcanvas/context-webgl/GLenum.js | 298 ++++ .../gcanvas/context-webgl/GLmethod.js | 142 ++ .../uv-qrcode/gcanvas/context-webgl/GLtype.js | 23 + .../gcanvas/context-webgl/Program.js | 21 + .../gcanvas/context-webgl/Renderbuffer.js | 21 + .../gcanvas/context-webgl/RenderingContext.js | 1191 +++++++++++++++ .../uv-qrcode/gcanvas/context-webgl/Shader.js | 22 + .../context-webgl/ShaderPrecisionFormat.js | 11 + .../gcanvas/context-webgl/Texture.js | 22 + .../gcanvas/context-webgl/UniformLocation.js | 22 + .../gcanvas/context-webgl/classUtils.js | 3 + .../uv-qrcode/gcanvas/env/canvas.js | 74 + .../components/uv-qrcode/gcanvas/env/image.js | 96 ++ .../components/uv-qrcode/gcanvas/env/tool.js | 24 + .../components/uv-qrcode/gcanvas/index.js | 39 + .../uv-qrcode/components/uv-qrcode/props.js | 85 ++ .../uv-qrcode/components/uv-qrcode/qrcode.js | 34 + .../uv-qrcode/components/uv-qrcode/queue.js | 41 + .../components/uv-qrcode/uv-qrcode.vue | 1038 +++++++++++++ uni_modules/uv-qrcode/package.json | 87 ++ uni_modules/uv-qrcode/readme.md | 21 + uni_modules/uv-radio/changelog.md | 31 + .../components/uv-radio-group/props.js | 89 ++ .../uv-radio-group/uv-radio-group.vue | 115 ++ .../uv-radio/components/uv-radio/props.js | 65 + .../uv-radio/components/uv-radio/uv-radio.vue | 348 +++++ uni_modules/uv-radio/package.json | 88 ++ uni_modules/uv-radio/readme.md | 19 + uni_modules/uv-rate/changelog.md | 17 + .../uv-rate/components/uv-rate/props.js | 73 + .../uv-rate/components/uv-rate/uv-rate.vue | 274 ++++ uni_modules/uv-rate/package.json | 88 ++ uni_modules/uv-rate/readme.md | 19 + uni_modules/uv-read-more/changelog.md | 7 + .../components/uv-read-more/props.js | 62 + .../components/uv-read-more/uv-read-more.vue | 162 ++ uni_modules/uv-read-more/package.json | 89 ++ uni_modules/uv-read-more/readme.md | 11 + uni_modules/uv-row/changelog.md | 5 + uni_modules/uv-row/components/uv-col/props.js | 30 + .../uv-row/components/uv-col/uv-col.vue | 165 ++ uni_modules/uv-row/components/uv-row/props.js | 20 + .../uv-row/components/uv-row/uv-row.vue | 95 ++ uni_modules/uv-row/package.json | 87 ++ uni_modules/uv-row/readme.md | 11 + uni_modules/uv-safe-bottom/changelog.md | 11 + .../uv-safe-bottom/uv-safe-bottom.vue | 67 + uni_modules/uv-safe-bottom/package.json | 87 ++ uni_modules/uv-safe-bottom/readme.md | 11 + uni_modules/uv-scroll-list/changelog.md | 12 + .../components/uv-scroll-list/nvue.js | 29 + .../components/uv-scroll-list/props.js | 35 + .../components/uv-scroll-list/scrollWxs.wxs | 51 + .../uv-scroll-list/uv-scroll-list.vue | 218 +++ uni_modules/uv-scroll-list/package.json | 87 ++ uni_modules/uv-scroll-list/readme.md | 19 + uni_modules/uv-search/changelog.md | 25 + .../uv-search/components/uv-search/props.js | 127 ++ .../components/uv-search/uv-search.vue | 311 ++++ uni_modules/uv-search/package.json | 89 ++ uni_modules/uv-search/readme.md | 19 + uni_modules/uv-skeleton/changelog.md | 9 + .../components/uv-skeleton/props.js | 65 + .../components/uv-skeleton/uv-skeleton.vue | 250 +++ uni_modules/uv-skeleton/package.json | 87 ++ uni_modules/uv-skeleton/readme.md | 11 + uni_modules/uv-skeletons/changelog.md | 4 + .../components/uv-skeletons/uv-skeletons.vue | 247 +++ uni_modules/uv-skeletons/package.json | 88 ++ uni_modules/uv-skeletons/readme.md | 23 + uni_modules/uv-slider/changelog.md | 9 + .../uv-slider/components/uv-slider/props.js | 58 + .../components/uv-slider/uv-slider.vue | 58 + uni_modules/uv-slider/package.json | 87 ++ uni_modules/uv-slider/readme.md | 15 + uni_modules/uv-status-bar/changelog.md | 7 + .../components/uv-status-bar/props.js | 8 + .../uv-status-bar/uv-status-bar.vue | 54 + uni_modules/uv-status-bar/package.json | 87 ++ uni_modules/uv-status-bar/readme.md | 10 + uni_modules/uv-steps/changelog.md | 10 + .../components/uv-steps-item/props.js | 25 + .../uv-steps-item/uv-steps-item.vue | 347 +++++ .../uv-steps/components/uv-steps/props.js | 40 + .../uv-steps/components/uv-steps/uv-steps.vue | 83 + uni_modules/uv-steps/package.json | 89 ++ uni_modules/uv-steps/readme.md | 11 + uni_modules/uv-sticky/changelog.md | 11 + .../uv-sticky/components/uv-sticky/props.js | 41 + .../components/uv-sticky/uv-sticky.vue | 223 +++ uni_modules/uv-sticky/package.json | 87 ++ uni_modules/uv-sticky/readme.md | 11 + uni_modules/uv-subsection/changelog.md | 10 + .../components/uv-subsection/props.js | 54 + .../uv-subsection/uv-subsection.vue | 269 ++++ uni_modules/uv-subsection/package.json | 87 ++ uni_modules/uv-subsection/readme.md | 11 + uni_modules/uv-swipe-action/changelog.md | 11 + .../uv-swipe-action-item/index - backup.wxs | 256 ++++ .../components/uv-swipe-action-item/index.wxs | 225 +++ .../uv-swipe-action-item/nvue - backup.js | 264 ++++ .../components/uv-swipe-action-item/nvue.js | 182 +++ .../components/uv-swipe-action-item/props.js | 40 + .../uv-swipe-action-item.vue | 200 +++ .../components/uv-swipe-action-item/wxs.js | 15 + .../components/uv-swipe-action/props.js | 10 + .../uv-swipe-action/uv-swipe-action.vue | 65 + uni_modules/uv-swipe-action/package.json | 88 ++ uni_modules/uv-swipe-action/readme.md | 11 + uni_modules/uv-swiper/changelog.md | 16 + .../components/uv-swiper-indicator/props.js | 30 + .../uv-swiper-indicator.vue | 112 ++ .../uv-swiper/components/uv-swiper/props.js | 136 ++ .../components/uv-swiper/uv-swiper.vue | 263 ++++ uni_modules/uv-swiper/package.json | 88 ++ uni_modules/uv-swiper/readme.md | 19 + uni_modules/uv-switch/changelog.md | 14 + .../uv-switch/components/uv-switch/props.js | 58 + .../components/uv-switch/uv-switch.vue | 192 +++ uni_modules/uv-switch/package.json | 88 ++ uni_modules/uv-switch/readme.md | 19 + uni_modules/uv-tabbar/changelog.md | 14 + .../components/uv-tabbar-item/props.js | 40 + .../uv-tabbar-item/uv-tabbar-item.vue | 146 ++ .../uv-tabbar/components/uv-tabbar/props.js | 50 + .../components/uv-tabbar/uv-tabbar.vue | 146 ++ uni_modules/uv-tabbar/package.json | 90 ++ uni_modules/uv-tabbar/readme.md | 21 + uni_modules/uv-tabs/changelog.md | 22 + .../uv-tabs/components/uv-tabs/props.js | 71 + .../uv-tabs/components/uv-tabs/uv-tabs.vue | 390 +++++ uni_modules/uv-tabs/package.json | 90 ++ uni_modules/uv-tabs/readme.md | 19 + uni_modules/uv-tags/changelog.md | 10 + .../uv-tags/components/uv-tags/props.js | 95 ++ .../uv-tags/components/uv-tags/uv-tags.vue | 379 +++++ uni_modules/uv-tags/package.json | 89 ++ uni_modules/uv-tags/readme.md | 11 + uni_modules/uv-text/changelog.md | 11 + .../uv-text/components/uv-text/props.js | 113 ++ .../uv-text/components/uv-text/uv-text.vue | 218 +++ .../uv-text/components/uv-text/value.js | 87 ++ uni_modules/uv-text/package.json | 89 ++ uni_modules/uv-text/readme.md | 17 + uni_modules/uv-textarea/changelog.md | 28 + .../components/uv-textarea/props.js | 138 ++ .../components/uv-textarea/uv-textarea.vue | 238 +++ uni_modules/uv-textarea/package.json | 87 ++ uni_modules/uv-textarea/readme.md | 19 + uni_modules/uv-toast/changelog.md | 10 + .../uv-toast/components/uv-toast/uv-toast.vue | 333 ++++ uni_modules/uv-toast/package.json | 90 ++ uni_modules/uv-toast/readme.md | 11 + uni_modules/uv-toolbar/changelog.md | 2 + .../uv-toolbar/components/uv-toolbar/props.js | 40 + .../components/uv-toolbar/uv-toolbar.vue | 109 ++ uni_modules/uv-toolbar/package.json | 87 ++ uni_modules/uv-toolbar/readme.md | 31 + uni_modules/uv-tooltip/changelog.md | 13 + .../uv-tooltip/components/uv-tooltip/props.js | 60 + .../components/uv-tooltip/uv-tooltip.vue | 372 +++++ uni_modules/uv-tooltip/package.json | 90 ++ uni_modules/uv-tooltip/readme.md | 11 + uni_modules/uv-transition/changelog.md | 19 + .../uv-transition/createAnimation.js | 131 ++ .../components/uv-transition/props.js | 31 + .../uv-transition/uv-transition.vue | 320 ++++ uni_modules/uv-transition/package.json | 87 ++ uni_modules/uv-transition/readme.md | 15 + uni_modules/uv-ui-tools/changelog.md | 76 + .../components/uv-ui-tools/uv-ui-tools.vue | 6 + uni_modules/uv-ui-tools/index.js | 79 + uni_modules/uv-ui-tools/index.scss | 7 + uni_modules/uv-ui-tools/libs/config/config.js | 34 + uni_modules/uv-ui-tools/libs/css/color.scss | 32 + uni_modules/uv-ui-tools/libs/css/common.scss | 100 ++ .../uv-ui-tools/libs/css/components.scss | 23 + .../uv-ui-tools/libs/css/variable.scss | 111 ++ uni_modules/uv-ui-tools/libs/css/vue.scss | 40 + .../libs/function/colorGradient.js | 134 ++ .../uv-ui-tools/libs/function/debounce.js | 29 + .../uv-ui-tools/libs/function/digit.js | 167 ++ .../uv-ui-tools/libs/function/index.js | 734 +++++++++ .../uv-ui-tools/libs/function/platform.js | 75 + uni_modules/uv-ui-tools/libs/function/test.js | 287 ++++ .../uv-ui-tools/libs/function/throttle.js | 30 + .../libs/luch-request/adapters/index.js | 132 ++ .../luch-request/core/InterceptorManager.js | 51 + .../libs/luch-request/core/Request.js | 201 +++ .../libs/luch-request/core/buildFullPath.js | 20 + .../libs/luch-request/core/defaults.js | 33 + .../libs/luch-request/core/dispatchRequest.js | 6 + .../libs/luch-request/core/mergeConfig.js | 126 ++ .../libs/luch-request/core/settle.js | 16 + .../libs/luch-request/helpers/buildURL.js | 64 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../luch-request/helpers/isAbsoluteURL.js | 14 + .../uv-ui-tools/libs/luch-request/index.d.ts | 197 +++ .../uv-ui-tools/libs/luch-request/index.js | 2 + .../uv-ui-tools/libs/luch-request/utils.js | 135 ++ .../libs/luch-request/utils/clone.js | 264 ++++ uni_modules/uv-ui-tools/libs/mixin/button.js | 13 + uni_modules/uv-ui-tools/libs/mixin/mixin.js | 172 +++ uni_modules/uv-ui-tools/libs/mixin/mpMixin.js | 8 + uni_modules/uv-ui-tools/libs/mixin/mpShare.js | 13 + .../uv-ui-tools/libs/mixin/openType.js | 47 + uni_modules/uv-ui-tools/libs/mixin/touch.js | 59 + uni_modules/uv-ui-tools/libs/util/dayjs.js | 216 +++ uni_modules/uv-ui-tools/libs/util/route.js | 126 ++ uni_modules/uv-ui-tools/package.json | 81 + uni_modules/uv-ui-tools/readme.md | 23 + uni_modules/uv-ui-tools/theme.scss | 43 + uni_modules/uv-ui/changelog.md | 353 +++++ uni_modules/uv-ui/components/uv-ui/uv-ui.vue | 7 + uni_modules/uv-ui/package.json | 162 ++ uni_modules/uv-ui/readme.md | 164 ++ uni_modules/uv-upload/changelog.md | 17 + .../uv-preview-video/uv-preview-video.vue | 52 + .../uv-upload/components/uv-upload/mixin.js | 22 + .../uv-upload/components/uv-upload/props.js | 130 ++ .../uv-upload/components/uv-upload/utils.js | 151 ++ .../components/uv-upload/uv-upload.vue | 488 ++++++ uni_modules/uv-upload/package.json | 90 ++ uni_modules/uv-upload/readme.md | 11 + uni_modules/uv-vtabs/changelog.md | 20 + .../uv-vtabs-item/uv-vtabs-item.vue | 68 + .../uv-vtabs/components/uv-vtabs/props.js | 79 + .../uv-vtabs/components/uv-vtabs/uv-vtabs.vue | 438 ++++++ uni_modules/uv-vtabs/package.json | 87 ++ uni_modules/uv-vtabs/readme.md | 19 + uni_modules/uv-waterfall/changelog.md | 24 + .../components/uv-waterfall/props.js | 69 + .../components/uv-waterfall/uv-waterfall.vue | 265 ++++ uni_modules/uv-waterfall/package.json | 89 ++ uni_modules/uv-waterfall/readme.md | 19 + utils/cache.js | 59 + utils/index.js | 228 +++ utils/request.js | 286 ++++ vite.config.js | 38 + 601 files changed, 62184 insertions(+) create mode 100644 .commitlintrc.js create mode 100644 .editorconfig create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .gitignore create mode 100644 .husky/commit-msg create mode 100644 .husky/pre-commit create mode 100644 .lintstagedrc.js create mode 100644 .prettierignore create mode 100644 .prettierrc.js create mode 100644 App.vue create mode 100644 LICENSE create mode 100644 README.md create mode 100644 api/index.js create mode 100644 api/modules/auth.js create mode 100644 api/modules/user.js create mode 100644 components/HeaderCustom/HeaderCustom.vue create mode 100644 components/IconFont/IconFont.vue create mode 100644 components/IconFont/iconfont.css create mode 100644 components/IconFont/iconfont.json create mode 100644 components/IconFont/iconfont.ttf create mode 100644 components/IconFont/iconfont.woff create mode 100644 components/IconFont/iconfont.woff2 create mode 100644 components/LangSelect/LangSelect.vue create mode 100644 components/Login/Login.vue create mode 100644 components/UploadFile/UploadFile.vue create mode 100644 components/UploadFile/example.vue create mode 100644 hooks/usePermission.js create mode 100644 index.html create mode 100644 locale/en.json create mode 100644 locale/index.js create mode 100644 locale/ja.json create mode 100644 locale/uni-app.ja.json create mode 100644 locale/zh-Hans.json create mode 100644 locale/zh-Hant.json create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/appointment/appointment.vue create mode 100644 pages/index/index.vue create mode 100644 pages/mine/mine.vue create mode 100644 pagesA/JoiningUs/JoiningUs.vue create mode 100644 pagesA/ProductDetails/ProductDetails.vue create mode 100644 pagesA/StoreManage/AddStore.vue create mode 100644 pagesA/StoreManage/StoreList.vue create mode 100644 pagesA/StoreManage/StoreReview.vue create mode 100644 pagesA/StoreManage/businessEdit.vue create mode 100644 pagesA/add-address/add-address.vue create mode 100644 pagesA/choose-adress/choose-adress.vue create mode 100644 pagesA/privacy-policy/privacy-policy.vue create mode 100644 pagesA/search-address/search-address.vue create mode 100644 pagesA/user-agreement/user-agreement.vue create mode 100644 plugins/index.js create mode 100644 plugins/permission.js create mode 100644 plugins/ui.js create mode 100644 router/index.js create mode 100644 static/imgs/avatar.png create mode 100644 static/imgs/bstcg.png create mode 100644 static/imgs/dianti.png create mode 100644 static/imgs/head_bg.png create mode 100644 static/imgs/jljz.png create mode 100644 static/imgs/jthx.png create mode 100644 static/imgs/map_adress.png create mode 100644 static/imgs/map_icon.png create mode 100644 static/imgs/xtcg.png create mode 100644 static/json/regions.js create mode 100644 static/tabbar/appointment.png create mode 100644 static/tabbar/appointment_HL.png create mode 100644 static/tabbar/index.png create mode 100644 static/tabbar/index_HL.png create mode 100644 static/tabbar/mine.png create mode 100644 static/tabbar/mine_HL.png create mode 100644 store/index.js create mode 100644 store/modules/auth.js create mode 100644 store/modules/user.js create mode 100644 tsconfig.json create mode 100644 uni.scss create mode 100644 uni_modules/uv-action-sheet/changelog.md create mode 100644 uni_modules/uv-action-sheet/components/uv-action-sheet/props.js create mode 100644 uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue create mode 100644 uni_modules/uv-action-sheet/package.json create mode 100644 uni_modules/uv-action-sheet/readme.md create mode 100644 uni_modules/uv-album/changelog.md create mode 100644 uni_modules/uv-album/components/uv-album/uv-album.vue create mode 100644 uni_modules/uv-album/package.json create mode 100644 uni_modules/uv-album/readme.md create mode 100644 uni_modules/uv-alert/changelog.md create mode 100644 uni_modules/uv-alert/components/uv-alert/props.js create mode 100644 uni_modules/uv-alert/components/uv-alert/uv-alert.vue create mode 100644 uni_modules/uv-alert/package.json create mode 100644 uni_modules/uv-alert/readme.md create mode 100644 uni_modules/uv-avatar/changelog.md create mode 100644 uni_modules/uv-avatar/components/uv-avatar-group/props.js create mode 100644 uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue create mode 100644 uni_modules/uv-avatar/components/uv-avatar/props.js create mode 100644 uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue create mode 100644 uni_modules/uv-avatar/package.json create mode 100644 uni_modules/uv-avatar/readme.md create mode 100644 uni_modules/uv-back-top/changelog.md create mode 100644 uni_modules/uv-back-top/components/uv-back-top/props.js create mode 100644 uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue create mode 100644 uni_modules/uv-back-top/package.json create mode 100644 uni_modules/uv-back-top/readme.md create mode 100644 uni_modules/uv-badge/changelog.md create mode 100644 uni_modules/uv-badge/components/uv-badge/props.js create mode 100644 uni_modules/uv-badge/components/uv-badge/uv-badge.vue create mode 100644 uni_modules/uv-badge/package.json create mode 100644 uni_modules/uv-badge/readme.md create mode 100644 uni_modules/uv-button/changelog.md create mode 100644 uni_modules/uv-button/components/uv-button/nvue.scss create mode 100644 uni_modules/uv-button/components/uv-button/props.js create mode 100644 uni_modules/uv-button/components/uv-button/uv-button.vue create mode 100644 uni_modules/uv-button/components/uv-button/vue.scss create mode 100644 uni_modules/uv-button/package.json create mode 100644 uni_modules/uv-button/readme.md create mode 100644 uni_modules/uv-calendar/changelog.md create mode 100644 uni_modules/uv-calendar/components/uv-calendar/calendar.js create mode 100644 uni_modules/uv-calendar/components/uv-calendar/header.vue create mode 100644 uni_modules/uv-calendar/components/uv-calendar/month.vue create mode 100644 uni_modules/uv-calendar/components/uv-calendar/props.js create mode 100644 uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue create mode 100644 uni_modules/uv-calendar/package.json create mode 100644 uni_modules/uv-calendar/readme.md create mode 100644 uni_modules/uv-calendars/changelog.md create mode 100644 uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue create mode 100644 uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue create mode 100644 uni_modules/uv-calendars/components/uv-calendars/calendar.js create mode 100644 uni_modules/uv-calendars/components/uv-calendars/i18n/en.json create mode 100644 uni_modules/uv-calendars/components/uv-calendars/i18n/index.js create mode 100644 uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json create mode 100644 uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json create mode 100644 uni_modules/uv-calendars/components/uv-calendars/util.js create mode 100644 uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue create mode 100644 uni_modules/uv-calendars/package.json create mode 100644 uni_modules/uv-calendars/readme.md create mode 100644 uni_modules/uv-cell/changelog.md create mode 100644 uni_modules/uv-cell/components/uv-cell-group/props.js create mode 100644 uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue create mode 100644 uni_modules/uv-cell/components/uv-cell/props.js create mode 100644 uni_modules/uv-cell/components/uv-cell/uv-cell.vue create mode 100644 uni_modules/uv-cell/package.json create mode 100644 uni_modules/uv-cell/readme.md create mode 100644 uni_modules/uv-checkbox/changelog.md create mode 100644 uni_modules/uv-checkbox/components/uv-checkbox-group/props.js create mode 100644 uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue create mode 100644 uni_modules/uv-checkbox/components/uv-checkbox/props.js create mode 100644 uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue create mode 100644 uni_modules/uv-checkbox/package.json create mode 100644 uni_modules/uv-checkbox/readme.md create mode 100644 uni_modules/uv-code-input/changelog.md create mode 100644 uni_modules/uv-code-input/components/uv-code-input/props.js create mode 100644 uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue create mode 100644 uni_modules/uv-code-input/package.json create mode 100644 uni_modules/uv-code-input/readme.md create mode 100644 uni_modules/uv-code/changelog.md create mode 100644 uni_modules/uv-code/components/uv-code/props.js create mode 100644 uni_modules/uv-code/components/uv-code/uv-code.vue create mode 100644 uni_modules/uv-code/package.json create mode 100644 uni_modules/uv-code/readme.md create mode 100644 uni_modules/uv-collapse/changelog.md create mode 100644 uni_modules/uv-collapse/components/uv-collapse-item/props.js create mode 100644 uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue create mode 100644 uni_modules/uv-collapse/components/uv-collapse/props.js create mode 100644 uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue create mode 100644 uni_modules/uv-collapse/package.json create mode 100644 uni_modules/uv-collapse/readme.md create mode 100644 uni_modules/uv-count-down/changelog.md create mode 100644 uni_modules/uv-count-down/components/uv-count-down/props.js create mode 100644 uni_modules/uv-count-down/components/uv-count-down/utils.js create mode 100644 uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue create mode 100644 uni_modules/uv-count-down/package.json create mode 100644 uni_modules/uv-count-down/readme.md create mode 100644 uni_modules/uv-count-to/changelog.md create mode 100644 uni_modules/uv-count-to/components/uv-count-to/props.js create mode 100644 uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue create mode 100644 uni_modules/uv-count-to/package.json create mode 100644 uni_modules/uv-count-to/readme.md create mode 100644 uni_modules/uv-datetime-picker/changelog.md create mode 100644 uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js create mode 100644 uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue create mode 100644 uni_modules/uv-datetime-picker/package.json create mode 100644 uni_modules/uv-datetime-picker/readme.md create mode 100644 uni_modules/uv-divider/changelog.md create mode 100644 uni_modules/uv-divider/components/uv-divider/props.js create mode 100644 uni_modules/uv-divider/components/uv-divider/uv-divider.vue create mode 100644 uni_modules/uv-divider/package.json create mode 100644 uni_modules/uv-divider/readme.md create mode 100644 uni_modules/uv-drop-down/changelog.md create mode 100644 uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue create mode 100644 uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue create mode 100644 uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue create mode 100644 uni_modules/uv-drop-down/package.json create mode 100644 uni_modules/uv-drop-down/readme.md create mode 100644 uni_modules/uv-empty/changelog.md create mode 100644 uni_modules/uv-empty/components/uv-empty/props.js create mode 100644 uni_modules/uv-empty/components/uv-empty/uv-empty.vue create mode 100644 uni_modules/uv-empty/package.json create mode 100644 uni_modules/uv-empty/readme.md create mode 100644 uni_modules/uv-form/changelog.md create mode 100644 uni_modules/uv-form/components/uv-form-item/props.js create mode 100644 uni_modules/uv-form/components/uv-form-item/uv-form-item.vue create mode 100644 uni_modules/uv-form/components/uv-form/props.js create mode 100644 uni_modules/uv-form/components/uv-form/uv-form.vue create mode 100644 uni_modules/uv-form/components/uv-form/valid.js create mode 100644 uni_modules/uv-form/package.json create mode 100644 uni_modules/uv-form/readme.md create mode 100644 uni_modules/uv-gap/changelog.md create mode 100644 uni_modules/uv-gap/components/uv-gap/props.js create mode 100644 uni_modules/uv-gap/components/uv-gap/uv-gap.vue create mode 100644 uni_modules/uv-gap/package.json create mode 100644 uni_modules/uv-gap/readme.md create mode 100644 uni_modules/uv-grid/changelog.md create mode 100644 uni_modules/uv-grid/components/uv-grid-item/props.js create mode 100644 uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue create mode 100644 uni_modules/uv-grid/components/uv-grid/props.js create mode 100644 uni_modules/uv-grid/components/uv-grid/uv-grid.vue create mode 100644 uni_modules/uv-grid/package.json create mode 100644 uni_modules/uv-grid/readme.md create mode 100644 uni_modules/uv-icon/changelog.md create mode 100644 uni_modules/uv-icon/components/uv-icon/icons.js create mode 100644 uni_modules/uv-icon/components/uv-icon/props.js create mode 100644 uni_modules/uv-icon/components/uv-icon/uv-icon.vue create mode 100644 uni_modules/uv-icon/components/uv-icon/uvicons.ttf create mode 100644 uni_modules/uv-icon/package.json create mode 100644 uni_modules/uv-icon/readme.md create mode 100644 uni_modules/uv-image/changelog.md create mode 100644 uni_modules/uv-image/components/uv-image/props.js create mode 100644 uni_modules/uv-image/components/uv-image/uv-image.vue create mode 100644 uni_modules/uv-image/package.json create mode 100644 uni_modules/uv-image/readme.md create mode 100644 uni_modules/uv-index-list/changelog.md create mode 100644 uni_modules/uv-index-list/components/uv-index-anchor/props.js create mode 100644 uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue create mode 100644 uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue create mode 100644 uni_modules/uv-index-list/components/uv-index-list/props.js create mode 100644 uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue create mode 100644 uni_modules/uv-index-list/package.json create mode 100644 uni_modules/uv-index-list/readme.md create mode 100644 uni_modules/uv-input/changelog.md create mode 100644 uni_modules/uv-input/components/uv-input/props.js create mode 100644 uni_modules/uv-input/components/uv-input/uv-input.vue create mode 100644 uni_modules/uv-input/package.json create mode 100644 uni_modules/uv-input/readme.md create mode 100644 uni_modules/uv-keyboard/changelog.md create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard-car/props.js create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard-number/props.js create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard/props.js create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue create mode 100644 uni_modules/uv-keyboard/package.json create mode 100644 uni_modules/uv-keyboard/readme.md create mode 100644 uni_modules/uv-line-progress/changelog.md create mode 100644 uni_modules/uv-line-progress/components/uv-line-progress/props.js create mode 100644 uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue create mode 100644 uni_modules/uv-line-progress/package.json create mode 100644 uni_modules/uv-line-progress/readme.md create mode 100644 uni_modules/uv-line/changelog.md create mode 100644 uni_modules/uv-line/components/uv-line/props.js create mode 100644 uni_modules/uv-line/components/uv-line/uv-line.vue create mode 100644 uni_modules/uv-line/package.json create mode 100644 uni_modules/uv-line/readme.md create mode 100644 uni_modules/uv-link/changelog.md create mode 100644 uni_modules/uv-link/components/uv-link/props.js create mode 100644 uni_modules/uv-link/components/uv-link/uv-link.vue create mode 100644 uni_modules/uv-link/package.json create mode 100644 uni_modules/uv-link/readme.md create mode 100644 uni_modules/uv-list/changelog.md create mode 100644 uni_modules/uv-list/components/uv-list-item/uv-list-item.vue create mode 100644 uni_modules/uv-list/components/uv-list/uv-list.vue create mode 100644 uni_modules/uv-list/package.json create mode 100644 uni_modules/uv-list/readme.md create mode 100644 uni_modules/uv-load-more/changelog.md create mode 100644 uni_modules/uv-load-more/components/uv-load-more/props.js create mode 100644 uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue create mode 100644 uni_modules/uv-load-more/package.json create mode 100644 uni_modules/uv-load-more/readme.md create mode 100644 uni_modules/uv-loading-icon/changelog.md create mode 100644 uni_modules/uv-loading-icon/components/uv-loading-icon/props.js create mode 100644 uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue create mode 100644 uni_modules/uv-loading-icon/package.json create mode 100644 uni_modules/uv-loading-icon/readme.md create mode 100644 uni_modules/uv-loading-page/changelog.md create mode 100644 uni_modules/uv-loading-page/components/uv-loading-page/props.js create mode 100644 uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue create mode 100644 uni_modules/uv-loading-page/package.json create mode 100644 uni_modules/uv-loading-page/readme.md create mode 100644 uni_modules/uv-modal/changelog.md create mode 100644 uni_modules/uv-modal/components/uv-modal/props.js create mode 100644 uni_modules/uv-modal/components/uv-modal/uv-modal.vue create mode 100644 uni_modules/uv-modal/package.json create mode 100644 uni_modules/uv-modal/readme.md create mode 100644 uni_modules/uv-navbar/changelog.md create mode 100644 uni_modules/uv-navbar/components/uv-navbar/props.js create mode 100644 uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue create mode 100644 uni_modules/uv-navbar/package.json create mode 100644 uni_modules/uv-navbar/readme.md create mode 100644 uni_modules/uv-no-network/changelog.md create mode 100644 uni_modules/uv-no-network/components/uv-no-network/props.js create mode 100644 uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue create mode 100644 uni_modules/uv-no-network/package.json create mode 100644 uni_modules/uv-no-network/readme.md create mode 100644 uni_modules/uv-notice-bar/changelog.md create mode 100644 uni_modules/uv-notice-bar/components/uv-column-notice/props.js create mode 100644 uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue create mode 100644 uni_modules/uv-notice-bar/components/uv-notice-bar/props.js create mode 100644 uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue create mode 100644 uni_modules/uv-notice-bar/components/uv-row-notice/props.js create mode 100644 uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue create mode 100644 uni_modules/uv-notice-bar/package.json create mode 100644 uni_modules/uv-notice-bar/readme.md create mode 100644 uni_modules/uv-notify/changelog.md create mode 100644 uni_modules/uv-notify/components/uv-notify/props.js create mode 100644 uni_modules/uv-notify/components/uv-notify/uv-notify.vue create mode 100644 uni_modules/uv-notify/package.json create mode 100644 uni_modules/uv-notify/readme.md create mode 100644 uni_modules/uv-number-box/changelog.md create mode 100644 uni_modules/uv-number-box/components/uv-number-box/props.js create mode 100644 uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue create mode 100644 uni_modules/uv-number-box/package.json create mode 100644 uni_modules/uv-number-box/readme.md create mode 100644 uni_modules/uv-overlay/changelog.md create mode 100644 uni_modules/uv-overlay/components/uv-overlay/props.js create mode 100644 uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue create mode 100644 uni_modules/uv-overlay/package.json create mode 100644 uni_modules/uv-overlay/readme.md create mode 100644 uni_modules/uv-parse/changelog.md create mode 100644 uni_modules/uv-parse/components/uv-parse/node/node.vue create mode 100644 uni_modules/uv-parse/components/uv-parse/parser.js create mode 100644 uni_modules/uv-parse/components/uv-parse/uv-parse.vue create mode 100644 uni_modules/uv-parse/package.json create mode 100644 uni_modules/uv-parse/readme.md create mode 100644 uni_modules/uv-parse/static/app-plus/uv-parse/js/handler.js create mode 100644 uni_modules/uv-parse/static/app-plus/uv-parse/js/uni.webview.min.js create mode 100644 uni_modules/uv-parse/static/app-plus/uv-parse/local.html create mode 100644 uni_modules/uv-pick-color/changelog.md create mode 100644 uni_modules/uv-pick-color/components/uv-pick-color/colors.js create mode 100644 uni_modules/uv-pick-color/components/uv-pick-color/props.js create mode 100644 uni_modules/uv-pick-color/components/uv-pick-color/uv-pick-color.vue create mode 100644 uni_modules/uv-pick-color/package.json create mode 100644 uni_modules/uv-pick-color/readme.md create mode 100644 uni_modules/uv-picker/changelog.md create mode 100644 uni_modules/uv-picker/components/uv-picker/props.js create mode 100644 uni_modules/uv-picker/components/uv-picker/uv-picker.vue create mode 100644 uni_modules/uv-picker/package.json create mode 100644 uni_modules/uv-picker/readme.md create mode 100644 uni_modules/uv-popup/changelog.md create mode 100644 uni_modules/uv-popup/components/uv-popup/keypress.js create mode 100644 uni_modules/uv-popup/components/uv-popup/uv-popup.vue create mode 100644 uni_modules/uv-popup/package.json create mode 100644 uni_modules/uv-popup/readme.md create mode 100644 uni_modules/uv-qrcode/changelog.md create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/cache.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/bridge/bridge-weex.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStyleLinearGradient.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStylePattern.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStyleRadialGradient.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/RenderingContext.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/ActiveInfo.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Buffer.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Framebuffer.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLenum.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLmethod.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLtype.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Program.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Renderbuffer.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/RenderingContext.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Shader.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/ShaderPrecisionFormat.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Texture.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/UniformLocation.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/classUtils.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/canvas.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/image.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/tool.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/index.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/props.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/qrcode.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/queue.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/uv-qrcode.vue create mode 100644 uni_modules/uv-qrcode/package.json create mode 100644 uni_modules/uv-qrcode/readme.md create mode 100644 uni_modules/uv-radio/changelog.md create mode 100644 uni_modules/uv-radio/components/uv-radio-group/props.js create mode 100644 uni_modules/uv-radio/components/uv-radio-group/uv-radio-group.vue create mode 100644 uni_modules/uv-radio/components/uv-radio/props.js create mode 100644 uni_modules/uv-radio/components/uv-radio/uv-radio.vue create mode 100644 uni_modules/uv-radio/package.json create mode 100644 uni_modules/uv-radio/readme.md create mode 100644 uni_modules/uv-rate/changelog.md create mode 100644 uni_modules/uv-rate/components/uv-rate/props.js create mode 100644 uni_modules/uv-rate/components/uv-rate/uv-rate.vue create mode 100644 uni_modules/uv-rate/package.json create mode 100644 uni_modules/uv-rate/readme.md create mode 100644 uni_modules/uv-read-more/changelog.md create mode 100644 uni_modules/uv-read-more/components/uv-read-more/props.js create mode 100644 uni_modules/uv-read-more/components/uv-read-more/uv-read-more.vue create mode 100644 uni_modules/uv-read-more/package.json create mode 100644 uni_modules/uv-read-more/readme.md create mode 100644 uni_modules/uv-row/changelog.md create mode 100644 uni_modules/uv-row/components/uv-col/props.js create mode 100644 uni_modules/uv-row/components/uv-col/uv-col.vue create mode 100644 uni_modules/uv-row/components/uv-row/props.js create mode 100644 uni_modules/uv-row/components/uv-row/uv-row.vue create mode 100644 uni_modules/uv-row/package.json create mode 100644 uni_modules/uv-row/readme.md create mode 100644 uni_modules/uv-safe-bottom/changelog.md create mode 100644 uni_modules/uv-safe-bottom/components/uv-safe-bottom/uv-safe-bottom.vue create mode 100644 uni_modules/uv-safe-bottom/package.json create mode 100644 uni_modules/uv-safe-bottom/readme.md create mode 100644 uni_modules/uv-scroll-list/changelog.md create mode 100644 uni_modules/uv-scroll-list/components/uv-scroll-list/nvue.js create mode 100644 uni_modules/uv-scroll-list/components/uv-scroll-list/props.js create mode 100644 uni_modules/uv-scroll-list/components/uv-scroll-list/scrollWxs.wxs create mode 100644 uni_modules/uv-scroll-list/components/uv-scroll-list/uv-scroll-list.vue create mode 100644 uni_modules/uv-scroll-list/package.json create mode 100644 uni_modules/uv-scroll-list/readme.md create mode 100644 uni_modules/uv-search/changelog.md create mode 100644 uni_modules/uv-search/components/uv-search/props.js create mode 100644 uni_modules/uv-search/components/uv-search/uv-search.vue create mode 100644 uni_modules/uv-search/package.json create mode 100644 uni_modules/uv-search/readme.md create mode 100644 uni_modules/uv-skeleton/changelog.md create mode 100644 uni_modules/uv-skeleton/components/uv-skeleton/props.js create mode 100644 uni_modules/uv-skeleton/components/uv-skeleton/uv-skeleton.vue create mode 100644 uni_modules/uv-skeleton/package.json create mode 100644 uni_modules/uv-skeleton/readme.md create mode 100644 uni_modules/uv-skeletons/changelog.md create mode 100644 uni_modules/uv-skeletons/components/uv-skeletons/uv-skeletons.vue create mode 100644 uni_modules/uv-skeletons/package.json create mode 100644 uni_modules/uv-skeletons/readme.md create mode 100644 uni_modules/uv-slider/changelog.md create mode 100644 uni_modules/uv-slider/components/uv-slider/props.js create mode 100644 uni_modules/uv-slider/components/uv-slider/uv-slider.vue create mode 100644 uni_modules/uv-slider/package.json create mode 100644 uni_modules/uv-slider/readme.md create mode 100644 uni_modules/uv-status-bar/changelog.md create mode 100644 uni_modules/uv-status-bar/components/uv-status-bar/props.js create mode 100644 uni_modules/uv-status-bar/components/uv-status-bar/uv-status-bar.vue create mode 100644 uni_modules/uv-status-bar/package.json create mode 100644 uni_modules/uv-status-bar/readme.md create mode 100644 uni_modules/uv-steps/changelog.md create mode 100644 uni_modules/uv-steps/components/uv-steps-item/props.js create mode 100644 uni_modules/uv-steps/components/uv-steps-item/uv-steps-item.vue create mode 100644 uni_modules/uv-steps/components/uv-steps/props.js create mode 100644 uni_modules/uv-steps/components/uv-steps/uv-steps.vue create mode 100644 uni_modules/uv-steps/package.json create mode 100644 uni_modules/uv-steps/readme.md create mode 100644 uni_modules/uv-sticky/changelog.md create mode 100644 uni_modules/uv-sticky/components/uv-sticky/props.js create mode 100644 uni_modules/uv-sticky/components/uv-sticky/uv-sticky.vue create mode 100644 uni_modules/uv-sticky/package.json create mode 100644 uni_modules/uv-sticky/readme.md create mode 100644 uni_modules/uv-subsection/changelog.md create mode 100644 uni_modules/uv-subsection/components/uv-subsection/props.js create mode 100644 uni_modules/uv-subsection/components/uv-subsection/uv-subsection.vue create mode 100644 uni_modules/uv-subsection/package.json create mode 100644 uni_modules/uv-subsection/readme.md create mode 100644 uni_modules/uv-swipe-action/changelog.md create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/index - backup.wxs create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/index.wxs create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/nvue - backup.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/nvue.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/props.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/uv-swipe-action-item.vue create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/wxs.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action/props.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action/uv-swipe-action.vue create mode 100644 uni_modules/uv-swipe-action/package.json create mode 100644 uni_modules/uv-swipe-action/readme.md create mode 100644 uni_modules/uv-swiper/changelog.md create mode 100644 uni_modules/uv-swiper/components/uv-swiper-indicator/props.js create mode 100644 uni_modules/uv-swiper/components/uv-swiper-indicator/uv-swiper-indicator.vue create mode 100644 uni_modules/uv-swiper/components/uv-swiper/props.js create mode 100644 uni_modules/uv-swiper/components/uv-swiper/uv-swiper.vue create mode 100644 uni_modules/uv-swiper/package.json create mode 100644 uni_modules/uv-swiper/readme.md create mode 100644 uni_modules/uv-switch/changelog.md create mode 100644 uni_modules/uv-switch/components/uv-switch/props.js create mode 100644 uni_modules/uv-switch/components/uv-switch/uv-switch.vue create mode 100644 uni_modules/uv-switch/package.json create mode 100644 uni_modules/uv-switch/readme.md create mode 100644 uni_modules/uv-tabbar/changelog.md create mode 100644 uni_modules/uv-tabbar/components/uv-tabbar-item/props.js create mode 100644 uni_modules/uv-tabbar/components/uv-tabbar-item/uv-tabbar-item.vue create mode 100644 uni_modules/uv-tabbar/components/uv-tabbar/props.js create mode 100644 uni_modules/uv-tabbar/components/uv-tabbar/uv-tabbar.vue create mode 100644 uni_modules/uv-tabbar/package.json create mode 100644 uni_modules/uv-tabbar/readme.md create mode 100644 uni_modules/uv-tabs/changelog.md create mode 100644 uni_modules/uv-tabs/components/uv-tabs/props.js create mode 100644 uni_modules/uv-tabs/components/uv-tabs/uv-tabs.vue create mode 100644 uni_modules/uv-tabs/package.json create mode 100644 uni_modules/uv-tabs/readme.md create mode 100644 uni_modules/uv-tags/changelog.md create mode 100644 uni_modules/uv-tags/components/uv-tags/props.js create mode 100644 uni_modules/uv-tags/components/uv-tags/uv-tags.vue create mode 100644 uni_modules/uv-tags/package.json create mode 100644 uni_modules/uv-tags/readme.md create mode 100644 uni_modules/uv-text/changelog.md create mode 100644 uni_modules/uv-text/components/uv-text/props.js create mode 100644 uni_modules/uv-text/components/uv-text/uv-text.vue create mode 100644 uni_modules/uv-text/components/uv-text/value.js create mode 100644 uni_modules/uv-text/package.json create mode 100644 uni_modules/uv-text/readme.md create mode 100644 uni_modules/uv-textarea/changelog.md create mode 100644 uni_modules/uv-textarea/components/uv-textarea/props.js create mode 100644 uni_modules/uv-textarea/components/uv-textarea/uv-textarea.vue create mode 100644 uni_modules/uv-textarea/package.json create mode 100644 uni_modules/uv-textarea/readme.md create mode 100644 uni_modules/uv-toast/changelog.md create mode 100644 uni_modules/uv-toast/components/uv-toast/uv-toast.vue create mode 100644 uni_modules/uv-toast/package.json create mode 100644 uni_modules/uv-toast/readme.md create mode 100644 uni_modules/uv-toolbar/changelog.md create mode 100644 uni_modules/uv-toolbar/components/uv-toolbar/props.js create mode 100644 uni_modules/uv-toolbar/components/uv-toolbar/uv-toolbar.vue create mode 100644 uni_modules/uv-toolbar/package.json create mode 100644 uni_modules/uv-toolbar/readme.md create mode 100644 uni_modules/uv-tooltip/changelog.md create mode 100644 uni_modules/uv-tooltip/components/uv-tooltip/props.js create mode 100644 uni_modules/uv-tooltip/components/uv-tooltip/uv-tooltip.vue create mode 100644 uni_modules/uv-tooltip/package.json create mode 100644 uni_modules/uv-tooltip/readme.md create mode 100644 uni_modules/uv-transition/changelog.md create mode 100644 uni_modules/uv-transition/components/uv-transition/createAnimation.js create mode 100644 uni_modules/uv-transition/components/uv-transition/props.js create mode 100644 uni_modules/uv-transition/components/uv-transition/uv-transition.vue create mode 100644 uni_modules/uv-transition/package.json create mode 100644 uni_modules/uv-transition/readme.md create mode 100644 uni_modules/uv-ui-tools/changelog.md create mode 100644 uni_modules/uv-ui-tools/components/uv-ui-tools/uv-ui-tools.vue create mode 100644 uni_modules/uv-ui-tools/index.js create mode 100644 uni_modules/uv-ui-tools/index.scss create mode 100644 uni_modules/uv-ui-tools/libs/config/config.js create mode 100644 uni_modules/uv-ui-tools/libs/css/color.scss create mode 100644 uni_modules/uv-ui-tools/libs/css/common.scss create mode 100644 uni_modules/uv-ui-tools/libs/css/components.scss create mode 100644 uni_modules/uv-ui-tools/libs/css/variable.scss create mode 100644 uni_modules/uv-ui-tools/libs/css/vue.scss create mode 100644 uni_modules/uv-ui-tools/libs/function/colorGradient.js create mode 100644 uni_modules/uv-ui-tools/libs/function/debounce.js create mode 100644 uni_modules/uv-ui-tools/libs/function/digit.js create mode 100644 uni_modules/uv-ui-tools/libs/function/index.js create mode 100644 uni_modules/uv-ui-tools/libs/function/platform.js create mode 100644 uni_modules/uv-ui-tools/libs/function/test.js create mode 100644 uni_modules/uv-ui-tools/libs/function/throttle.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/adapters/index.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/InterceptorManager.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/Request.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/buildFullPath.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/defaults.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/dispatchRequest.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/mergeConfig.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/settle.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/helpers/buildURL.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/helpers/combineURLs.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/index.d.ts create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/index.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/utils.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/utils/clone.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/button.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/mixin.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/mpMixin.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/mpShare.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/openType.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/touch.js create mode 100644 uni_modules/uv-ui-tools/libs/util/dayjs.js create mode 100644 uni_modules/uv-ui-tools/libs/util/route.js create mode 100644 uni_modules/uv-ui-tools/package.json create mode 100644 uni_modules/uv-ui-tools/readme.md create mode 100644 uni_modules/uv-ui-tools/theme.scss create mode 100644 uni_modules/uv-ui/changelog.md create mode 100644 uni_modules/uv-ui/components/uv-ui/uv-ui.vue create mode 100644 uni_modules/uv-ui/package.json create mode 100644 uni_modules/uv-ui/readme.md create mode 100644 uni_modules/uv-upload/changelog.md create mode 100644 uni_modules/uv-upload/components/uv-preview-video/uv-preview-video.vue create mode 100644 uni_modules/uv-upload/components/uv-upload/mixin.js create mode 100644 uni_modules/uv-upload/components/uv-upload/props.js create mode 100644 uni_modules/uv-upload/components/uv-upload/utils.js create mode 100644 uni_modules/uv-upload/components/uv-upload/uv-upload.vue create mode 100644 uni_modules/uv-upload/package.json create mode 100644 uni_modules/uv-upload/readme.md create mode 100644 uni_modules/uv-vtabs/changelog.md create mode 100644 uni_modules/uv-vtabs/components/uv-vtabs-item/uv-vtabs-item.vue create mode 100644 uni_modules/uv-vtabs/components/uv-vtabs/props.js create mode 100644 uni_modules/uv-vtabs/components/uv-vtabs/uv-vtabs.vue create mode 100644 uni_modules/uv-vtabs/package.json create mode 100644 uni_modules/uv-vtabs/readme.md create mode 100644 uni_modules/uv-waterfall/changelog.md create mode 100644 uni_modules/uv-waterfall/components/uv-waterfall/props.js create mode 100644 uni_modules/uv-waterfall/components/uv-waterfall/uv-waterfall.vue create mode 100644 uni_modules/uv-waterfall/package.json create mode 100644 uni_modules/uv-waterfall/readme.md create mode 100644 utils/cache.js create mode 100644 utils/index.js create mode 100644 utils/request.js create mode 100644 vite.config.js diff --git a/.commitlintrc.js b/.commitlintrc.js new file mode 100644 index 0000000..89f188e --- /dev/null +++ b/.commitlintrc.js @@ -0,0 +1,93 @@ +module.exports = { + // 继承的规则 + extends: ["@commitlint/config-conventional"], + // 自定义规则 + rules: { + // @see https://commitlint.js.org/#/reference-rules + + // 提交类型枚举,git提交type必须是以下类型 + "type-enum": [ + 2, + "always", + [ + "feat", // 新增功能 + "fix", // 修复缺陷 + "docs", // 文档变更 + "style", // 代码格式(不影响功能,例如空格、分号等格式修正) + "refactor", // 代码重构(不包括 bug 修复、功能新增) + "perf", // 性能优化 + "test", // 添加疏漏测试或已有测试改动 + "build", // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等) + "ci", // 修改 CI 配置、脚本 + "revert", // 回滚 commit + "chore", // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例) + ], + ], + "subject-case": [0], // subject大小写不做校验 + }, + + prompt: { + messages: { + type: "选择你要提交的类型 :", + scope: "选择一个提交范围(可选):", + customScope: "请输入自定义的提交范围 :", + subject: "填写简短精炼的变更描述 :\n", + body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n', + breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n', + footerPrefixesSelect: "选择关联issue前缀(可选):", + customFooterPrefix: "输入自定义issue前缀 :", + footer: "列举关联issue (可选) 例如: #31, #I3244 :\n", + generatingByAI: "正在通过 AI 生成你的提交简短描述...", + generatedSelectByAI: "选择一个 AI 生成的简短描述:", + confirmCommit: "是否提交或修改commit ?", + }, + // prettier-ignore + types: [ + { value: "feat", name: "特性: ✨ 新增功能", emoji: ":sparkles:" }, + { value: "fix", name: "修复: 🐛 修复缺陷", emoji: ":bug:" }, + { value: "docs", name: "文档: 📝 文档变更(更新README文件,或者注释)", emoji: ":memo:" }, + { value: "style", name: "格式: 🌈 代码格式(空格、格式化、缺失的分号等)", emoji: ":lipstick:" }, + { value: "refactor", name: "重构: 🔄 代码重构(不修复错误也不添加特性的代码更改)", emoji: ":recycle:" }, + { value: "perf", name: "性能: 🚀 性能优化", emoji: ":zap:" }, + { value: "test", name: "测试: 🧪 添加疏漏测试或已有测试改动", emoji: ":white_check_mark:"}, + { value: "build", name: "构建: 📦️ 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)", emoji: ":package:"}, + { value: "ci", name: "集成: ⚙️ 修改 CI 配置、脚本", emoji: ":ferris_wheel:"}, + { value: "revert", name: "回退: ↩️ 回滚 commit",emoji: ":rewind:"}, + { value: "chore", name: "其他: 🛠️ 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:"}, + ], + useEmoji: true, + emojiAlign: "center", + useAI: false, + aiNumber: 1, + themeColorCode: "", + scopes: [], + allowCustomScopes: true, + allowEmptyScopes: true, + customScopesAlign: "bottom", + customScopesAlias: "custom", + emptyScopesAlias: "empty", + upperCaseSubject: false, + markBreakingChangeMode: false, + allowBreakingChanges: ["feat", "fix"], + breaklineNumber: 100, + breaklineChar: "|", + skipQuestions: [], + issuePrefixes: [ + { value: "closed", name: "closed: ISSUES has been processed" }, + ], + customIssuePrefixAlign: "top", + emptyIssuePrefixAlias: "skip", + customIssuePrefixAlias: "custom", + allowCustomIssuePrefix: true, + allowEmptyIssuePrefix: true, + confirmColorize: true, + maxHeaderLength: Infinity, + maxSubjectLength: Infinity, + minSubjectLength: 0, + scopeOverrides: undefined, + defaultBody: "", + defaultIssues: "", + defaultScope: "", + defaultSubject: "", + }, +}; diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..00ee2de --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# http://editorconfig.org +root = true + +# 表示所有文件适用 +[*] +charset = utf-8 # 设置文件字符集为 utf-8 +end_of_line = lf # 控制换行类型(lf | cr | crlf) +indent_style = space # 缩进风格(tab | space) +indent_size = 2 # 缩进大小 +insert_final_newline = true # 始终在文件末尾插入一个新行 + +# 表示仅 md 文件适用以下规则 +[*.md] +max_line_length = off # 关闭最大行长度限制 +trim_trailing_whitespace = false # 关闭末尾空格修剪 diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..63dba1e --- /dev/null +++ b/.env.development @@ -0,0 +1,8 @@ +# H5应用端口 +VITE_APP_PORT = 3000 + +# H5代理前缀 +VITE_APP_PROXY_PREFIX = "/dev-api" + +# 接口地址 +VITE_APP_BASE_URL = "http://localhost:8080" diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..f69f521 --- /dev/null +++ b/.env.production @@ -0,0 +1,2 @@ +# 接口地址 +VITE_APP_BASE_URL = "http://prod-api" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..edef1ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.idea +.vscode +.hbuilderx +.project +.DS_Store +node_modules +unpackage +package-lock.json +pnpm-lock.yaml \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..fd2bf70 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..b18d041 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npm run lint:lint-staged diff --git a/.lintstagedrc.js b/.lintstagedrc.js new file mode 100644 index 0000000..3242196 --- /dev/null +++ b/.lintstagedrc.js @@ -0,0 +1,3 @@ +module.exports = { + "*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}": ["prettier --write"], +}; diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..a284f7b --- /dev/null +++ b/.prettierignore @@ -0,0 +1,10 @@ +unpackage +node_modules +uni_modules +static +.husky +.hbuilderx +.vscode +.idea +*.sh +*.md diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..3c61781 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,47 @@ +// Prettier配置文档:https://prettier.io/docs/en/options.html +module.exports = { + // (x)=>{},单个参数箭头函数是否显示小括号。(always:始终显示;avoid:省略括号。默认:always) + arrowParens: "always", + // 开始标签的右尖括号是否跟随在最后一行属性末尾,默认false + bracketSameLine: false, + // 对象字面量的括号之间打印空格 (true - Example: { foo: bar } ; false - Example: {foo:bar}) + bracketSpacing: true, + // 是否格式化一些文件中被嵌入的代码片段的风格(auto|off;默认auto) + embeddedLanguageFormatting: "auto", + // 指定 HTML 文件的空格敏感度 (css|strict|ignore;默认css) + htmlWhitespaceSensitivity: "ignore", + // 当文件已经被 Prettier 格式化之后,是否会在文件顶部插入一个特殊的 @format 标记,默认false + insertPragma: false, + // 在 JSX 中使用单引号替代双引号,默认false + jsxSingleQuote: false, + // 每行最多字符数量,超出换行(默认80) + printWidth: 80, + // 超出打印宽度 (always | never | preserve ) + proseWrap: "preserve", + // 对象属性是否使用引号(as-needed | consistent | preserve;默认as-needed:对象的属性需要加引号才添加;) + quoteProps: "as-needed", + // 是否只格式化在文件顶部包含特定注释(@prettier| @format)的文件,默认false + requirePragma: false, + // 结尾添加分号 + semi: true, + // 使用单引号 (true:单引号;false:双引号) + singleQuote: false, + // 缩进空格数,默认2个空格 + tabWidth: 2, + // 元素末尾是否加逗号,默认es5: ES5中的 objects, arrays 等会添加逗号,TypeScript 中的 type 后不加逗号 + trailingComma: "es5", + // 指定缩进方式,空格或tab,默认false,即使用空格 + useTabs: false, + // vue 文件中是否缩进 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f755343 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 白開水 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..48ea067 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +vue3+uniapp+uv-ui \ No newline at end of file diff --git a/api/index.js b/api/index.js new file mode 100644 index 0000000..3ef9985 --- /dev/null +++ b/api/index.js @@ -0,0 +1,4 @@ +import AuthAPI from "./modules/auth"; +import UserAPI from "./modules/user"; + +export { AuthAPI, UserAPI }; diff --git a/api/modules/auth.js b/api/modules/auth.js new file mode 100644 index 0000000..cc9d547 --- /dev/null +++ b/api/modules/auth.js @@ -0,0 +1,30 @@ +import http from "@/utils/request"; + +class AuthAPI { + // 注册 + static signUp(data) { + return http.post("/auth/signup", data, { + custom: { + loading: true, + }, + }); + } + + // 登录 + static signIn(data) { + return http.post("/auth/signin", data, { + custom: { + loading: true, + }, + }); + } + + // 刷新token + static refreshToken(header = {}) { + return http.post("/auth/refresh", undefined, { + header, + }); + } +} + +export default AuthAPI; diff --git a/api/modules/user.js b/api/modules/user.js new file mode 100644 index 0000000..00d5cec --- /dev/null +++ b/api/modules/user.js @@ -0,0 +1,16 @@ +import http from "@/utils/request"; + +class UserAPI { + // test get api + static getUserList(params = {}) { + return http.get("/user/list", { + params, + custom: { + auth: true, + loading: true, + }, + }); + } +} + +export default UserAPI; diff --git a/components/HeaderCustom/HeaderCustom.vue b/components/HeaderCustom/HeaderCustom.vue new file mode 100644 index 0000000..03999f3 --- /dev/null +++ b/components/HeaderCustom/HeaderCustom.vue @@ -0,0 +1,54 @@ + + + + \ No newline at end of file diff --git a/components/IconFont/IconFont.vue b/components/IconFont/IconFont.vue new file mode 100644 index 0000000..98e730c --- /dev/null +++ b/components/IconFont/IconFont.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/components/IconFont/iconfont.css b/components/IconFont/iconfont.css new file mode 100644 index 0000000..babe6c2 --- /dev/null +++ b/components/IconFont/iconfont.css @@ -0,0 +1,19 @@ +@font-face { + font-family: "iconfont"; /* Project id 4657887 */ + src: + url("iconfont.woff2?t=1724050101808") format("woff2"), + url("iconfont.woff?t=1724050101808") format("woff"), + url("iconfont.ttf?t=1724050101808") format("truetype"); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-uniapp:before { + content: "\e624"; +} diff --git a/components/IconFont/iconfont.json b/components/IconFont/iconfont.json new file mode 100644 index 0000000..8c16935 --- /dev/null +++ b/components/IconFont/iconfont.json @@ -0,0 +1,16 @@ +{ + "id": "4657887", + "name": "vue3-uniapp-template", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "19317486", + "name": "uniapp", + "font_class": "uniapp", + "unicode": "e624", + "unicode_decimal": 58916 + } + ] +} diff --git a/components/IconFont/iconfont.ttf b/components/IconFont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9010d88724b4c936e8166e3ace3f7e8749b3ce12 GIT binary patch literal 1636 zcmd^9Noy2A6#lBZXED*ZGOmY?#3(A0IPM`TxFjCLHRdE}JJYj-p6;fnBgWH!7e!I; zf)`JM2Ty|FK~G-1dl3;2qoCl$ASlWBRdvr(*#M2!0ZyZ6zohsikPwfE=SJ|tMUE1>f zT7~#M$DS&QOv|`I{G6k&T92+~(?k$oIAvYGXk$?6Mu}6pZeI;V4>r@jhPvh1b!XYb z;U~1e24p4h8&T`)M2)VyXdeV?H=6AxE|`qkZkrj!{39}E$c{gmeQ|LzkAmq`J6JzLc?a0GAB;gbL-&nY{ zip}_mMbJ-K1sMT#Cn}z48sZ*OOng)F#JHQR;xh_@J0(&E*#+cu`B(`rT79j)_~ zMU!qS<{yzNp}HvwbMVE1?Hr`VnD#wMR_)r(m8T_dVq@%MD!$d%=J}JEdU67YBqrVd zV_6)ZeS^M%_^#AVQBPh$^*Ospcbdsg!CKL~yjSFQ_7)DwLT+_VrmcRt_n_Fh+D!la zA;zQ-=Y>|^z^h4GBxu!n~`U-hERD{;GNC~to)r@ zb=gYIOJvy9Nlga%jT)Q8TQyGck5JG!P5yw!UD$?W8h0~dpt{9e#611DuCc%}JknUA z2hTJ%$iLFqBz~iD3ORh#I8A;=<1UPgB^r05UlfmojvYBA>++OUEBap9_oB{v)~QUo zcGyun>$np(YQAUf$Pad?QO9$_PMF4(N+F8MRyp+R)(GP{uIpPt=ubGsC|`}DU}#`K z+f>1XL(!6aPn4Ch(r?jEOihz9*sOba`Z z=Wk}N*C@Tb*mG_*4P0Ti0&9#|k;M@*Qk`f-*XOVjm)PP1D%%9(6zQEuHQp6q2m|~& e=jr(8<8#*IKIWUN|KGwQ*|i4JlU~gZ0^k>HL)wb~ literal 0 HcmV?d00001 diff --git a/components/IconFont/iconfont.woff b/components/IconFont/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..8b46eff1f28ce15c69a1a74808384b01589aabdd GIT binary patch literal 1044 zcmXT-cXMN4WB>vd5e9A$&6Wb;gV?CRJvh{ffq{_&C~6JFAqw59RsO;HMnEwaARmMi zY%D##C+8*>0L40hd~YCK@Z4vcSb9!n8jyVjqy~ihSp3a0QWH}c7?@0ee0?A`)A(MM zo&gjDiUGwL6o6QT{TXvdMs7(3P^<;W2ieWR!N$Ollb;My*8}7Oc|dHyz>u3*0koHC z3Xm@c#0rdj4C;A_xv4<0EkL^+fONXRVw(*G`Nbs+49s7EYUF{~;Mx1E%!)b52`LE) z50VTLHY6t$6@KPSd~n)R=VbDPq=du>11ikQ(uXx3FitiKkh55$Fr!hBq2UwfPoOs$82&e~uroI> zurNq5Fi0{g3Mw*+87msuGZ~4Ai!re&s4JnU7{bKJ7|O`RXr(B{$jr$8 z_aHkHGn0tA6=TCcp#Fc7U%!53WMpFfyM}|EDUgGikr5hJ439SO{(pA#^X;0{2Wg26 zjqdtsvz1=_=hb<0hSx!lomtpJgdzMq_dIa;0K*pKZ-K*yjve^$-=5o=Ie>-LfRUl- z2TK_XFcMfmu?Padc!ZjtkTiiUiOrz9v5}iYQsQ6pPaX#DKt?l=eCtHpyh9EGt@95~ zV40%fwZtSdOjASX%sY zoB8+l&6GXK@NPqU`={N{^==+k-8@Nq$AQHKQ-4j~;9n=UZei!Vg1Ns|7clEr2;wzOmxW ztgU>p8%p$EZ@)e9g=2;gPr^dO*5o*YD@qC literal 0 HcmV?d00001 diff --git a/components/IconFont/iconfont.woff2 b/components/IconFont/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d21366a911b95917e00ae2171ada0a071376dfd GIT binary patch literal 668 zcmV;N0%QGmPew8T0RR9100Nu<3jhEB00v|L00L3~0RR9100000000000000000000 z0000SR0d!Gf^Z68a{)F2Bm)Qw1^@&g1%zh@FdMH05!I6`WM3a}C(Q+tKtOJwz|2OU z)4Jd#uP&^hUI$PA`~7dvIrBs$eU~O?h}r625_p0}(?+GyyoyLB!cF?IhK4+Wsazpn zO|of@J^<>1a&gXGxd=6qvnP+fkP>7$`8?O;E1(1ZAhHgsXgaWo9uB)Kig0h_Q=fwD zjzBH>5(MzmL>FdYXkvlzk)3Cbkw}KEKbqPzQH}*A9svhaaO>-U0JS)o@W3TV1YV7K^FQWQ&^;pwfHSc39VNI zzH^+=j2!yUL)&(0D)5~ze$-q8fTorL7)_HN3dWVTn()Q?#&|bYx>)wZg3p+$mw7d=&3;fLt#?L0DjjG4vr(v`>EQ*EhGdli5ro7Oi>Pt zml8sm8n_710ykbd;is0t^#Kx`z#{4cDp)5FqTGQY%sp75JRp>L0T*e0z)h5Y@UtYL z-2zky@R3k3YLI{MsutsEIOcmp`%Z$If-j`qQ$H-@T#a9`Ak8sn|Jaq;fT5b + + + + + + + + + + + + diff --git a/components/Login/Login.vue b/components/Login/Login.vue new file mode 100644 index 0000000..c9af66e --- /dev/null +++ b/components/Login/Login.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/components/UploadFile/UploadFile.vue b/components/UploadFile/UploadFile.vue new file mode 100644 index 0000000..32d4dd1 --- /dev/null +++ b/components/UploadFile/UploadFile.vue @@ -0,0 +1,426 @@ + + + + + \ No newline at end of file diff --git a/components/UploadFile/example.vue b/components/UploadFile/example.vue new file mode 100644 index 0000000..9e06ccc --- /dev/null +++ b/components/UploadFile/example.vue @@ -0,0 +1,191 @@ + + + + + + \ No newline at end of file diff --git a/hooks/usePermission.js b/hooks/usePermission.js new file mode 100644 index 0000000..587f7a9 --- /dev/null +++ b/hooks/usePermission.js @@ -0,0 +1,10 @@ +import { hasPerm } from "@/plugins/permission"; +import { currentRoute } from "@/router"; + +// 对某些特殊场景需要在页面onShow生命周期中校验权限: +// 1.微信小程序端点击tabbar的底层逻辑不触发uni.switchTab +// 2.h5在浏览器地址栏输入url后跳转不触发uni的路由api +// 3.首次启动加载的页面不触发uni的路由api +export async function usePermission() { + return hasPerm(currentRoute()); +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..7535993 --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + + + + + + + +
+ + + diff --git a/locale/en.json b/locale/en.json new file mode 100644 index 0000000..8c3df39 --- /dev/null +++ b/locale/en.json @@ -0,0 +1,8 @@ +{ + "locale.auto": "System", + "locale.en": "English", + "locale.zh-hans": "Simplified Chinese", + "locale.zh-hant": "Traditional Chinese", + "locale.ja": "Japanese", + "index.demo": "uni-app internationalization demo" +} diff --git a/locale/index.js b/locale/index.js new file mode 100644 index 0000000..274eca7 --- /dev/null +++ b/locale/index.js @@ -0,0 +1,23 @@ +import { createI18n } from "vue-i18n"; // v9.x +import en from "./en.json"; +import ja from "./ja.json"; +import zhHans from "./zh-Hans.json"; +import zhHant from "./zh-Hant.json"; + +const i18n = createI18n({ + legacy: false, // 必须设置false才能使用Composition API + globalInjection: true, // 为每个组件注入$为前缀的全局属性和函数 + locale: uni.getLocale(), + messages: { + en, + "zh-Hans": zhHans, + "zh-Hant": zhHant, + ja, + }, +}); + +export function setupI18n(app) { + app.use(i18n); +} + +export { i18n }; diff --git a/locale/ja.json b/locale/ja.json new file mode 100644 index 0000000..4a991e3 --- /dev/null +++ b/locale/ja.json @@ -0,0 +1,8 @@ +{ + "locale.auto": "システム", + "locale.en": "英語", + "locale.zh-hans": "簡体字中国語", + "locale.zh-hant": "繁体字中国語", + "locale.ja": "日本語", + "index.demo": "uni-app 国際化デモ" +} diff --git a/locale/uni-app.ja.json b/locale/uni-app.ja.json new file mode 100644 index 0000000..41cef76 --- /dev/null +++ b/locale/uni-app.ja.json @@ -0,0 +1,36 @@ +{ + "common": { + "uni.app.quit": "もう一度押すと、アプリケーションが終了します", + "uni.async.error": "サーバーへの接続がタイムアウトしました。画面をクリックして再試行してください", + "uni.showActionSheet.cancel": "キャンセル", + "uni.showToast.unpaired": "使用するには、showToastとhideToastをペアにする必要があることに注意してください", + "uni.showLoading.unpaired": "使用するには、showLoadingとhideLoadingをペアにする必要があることに注意してください", + "uni.showModal.cancel": "キャンセル", + "uni.showModal.confirm": "OK", + "uni.chooseImage.cancel": "キャンセル", + "uni.chooseImage.sourceType.album": "アルバムから選択", + "uni.chooseImage.sourceType.camera": "カメラ", + "uni.chooseVideo.cancel": "キャンセル", + "uni.chooseVideo.sourceType.album": "アルバムから選択", + "uni.chooseVideo.sourceType.camera": "カメラ", + "uni.previewImage.cancel": "キャンセル", + "uni.previewImage.button.save": "画像を保存", + "uni.previewImage.save.success": "画像をアルバムに正常に保存します", + "uni.previewImage.save.fail": "画像をアルバムに保存できませんでした", + "uni.setClipboardData.success": "コンテンツがコピーされました", + "uni.scanCode.title": "スキャンコード", + "uni.scanCode.album": "アルバム", + "uni.scanCode.fail": "認識に失敗しました", + "uni.scanCode.flash.on": "タッチして点灯", + "uni.scanCode.flash.off": "タップして閉じる", + "uni.startSoterAuthentication.authContent": "指紋認識...", + "uni.picker.done": "完了", + "uni.picker.cancel": "キャンセル", + "uni.video.danmu": "「弾幕」", + "uni.video.volume": "ボリューム", + "uni.button.feedback.title": "質問のフィードバック", + "uni.button.feedback.send": "送信" + }, + "ios": {}, + "android": {} +} diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json new file mode 100644 index 0000000..a227eda --- /dev/null +++ b/locale/zh-Hans.json @@ -0,0 +1,8 @@ +{ + "locale.auto": "系统", + "locale.en": "英语", + "locale.zh-hans": "简体中文", + "locale.zh-hant": "繁体中文", + "locale.ja": "日语", + "index.demo": "uni-app 国际化演示" +} diff --git a/locale/zh-Hant.json b/locale/zh-Hant.json new file mode 100644 index 0000000..6e43514 --- /dev/null +++ b/locale/zh-Hant.json @@ -0,0 +1,8 @@ +{ + "locale.auto": "系統", + "locale.en": "英語", + "locale.zh-hans": "簡體中文", + "locale.zh-hant": "繁體中文", + "locale.ja": "日語", + "index.demo": "uni-app 國際化演示" +} diff --git a/main.js b/main.js new file mode 100644 index 0000000..642bf76 --- /dev/null +++ b/main.js @@ -0,0 +1,11 @@ +import App from "./App"; +import { createSSRApp } from "vue"; +import setupPlugins from "@/plugins"; + +export function createApp() { + const app = createSSRApp(App); + app.use(setupPlugins); + return { + app, + }; +} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..8e0d5b3 --- /dev/null +++ b/manifest.json @@ -0,0 +1,100 @@ +{ + "name" : "卡叔电梯", + "appid" : "__UNI__3A16C1C", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "minSdkVersion" : 21 + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wx2c04ebae2099b3d2", + "setting" : { + "urlCheck" : false, + "es6" : true, + "postcss" : true, + "minified" : true + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "获取当前位置" + }, + "scope.userFuzzyLocation" : { + "desc" : "您的位置信息将用于小程序位置接口的效果展示" + } + }, + /* 地理位置相关接口配置项 @see https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01 */ + "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ] + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3", + "h5" : { + "optimization" : { + "treeShaking" : { + "enable" : false + } + }, + "devServer" : { + "https" : false + }, + "router" : { + "mode" : "history" + } + }, + "locale" : "auto" +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a6e673b --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "lift-wechat", + "version": "1.0.0", + "description": "卡叔电梯", + "main": "main.js", + "scripts": { + "prepare": "husky", + "lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"", + "lint:lint-staged": "lint-staged", + "commit": "git-cz" + }, + "keywords": [ + "卡叔电梯" + ], + "author": "Lufaneng", + "license": "MIT", + "dependencies": { + "crypto-js": "^4.2.0", + "dayjs": "^1.11.18", + "three": "^0.178.0", + "vue-draggable-plus": "^0.6.0" + }, + "devDependencies": { + "@commitlint/cli": "^19.1.0", + "@commitlint/config-conventional": "^19.1.0", + "@dcloudio/types": "^3.4.11", + "commitizen": "^4.3.0", + "cz-git": "^1.9.0", + "husky": "^9.0.11", + "lint-staged": "^15.2.2", + "prettier": "^3.2.5" + }, + "config": { + "commitizen": { + "path": "node_modules/cz-git" + } + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..de8a60b --- /dev/null +++ b/pages.json @@ -0,0 +1,161 @@ +{ + //组件自动引入规则 https://uniapp.dcloud.net.cn/collocation/pages.html#easycom + "easycom": { + "autoscan": true, + "custom": { + "^x-(.*)": "@/components/x-$1/index.vue" + } + }, + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "电梯", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8", + "enablePullDownRefresh": false + }, + "pages": [ + //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "主页", + "navigationStyle": "custom" + } + }, + { + "path" : "pages/appointment/appointment", + "style" : + { + "navigationBarTitleText" : "预约服务", + "navigationStyle": "custom" + } + }, + { + "path" : "pages/mine/mine", + "style" : + { + "navigationBarTitleText" : "我的", + "navigationStyle": "custom" + } + } + ], + "subPackages": [ + { + "root": "pagesA", + "pages": [ + { + "path": "ProductDetails/ProductDetails", + "style": { + "navigationBarTitleText": "产品详情", + "navigationStyle": "custom" + // "enablePullDownRefresh": true + } + // "needLogin": true + }, + { + "path" : "choose-adress/choose-adress", + "style" : + { + "navigationBarTitleText" : "选择位置", + "navigationStyle": "custom" + } + }, + { + "path" : "privacy-policy/privacy-policy", + "style" : + { + "navigationBarTitleText" : "隐私政策", + "navigationStyle": "custom" + } + }, + { + "path" : "user-agreement/user-agreement", + "style" : + { + "navigationBarTitleText" : "用户协议", + "navigationStyle": "custom" + } + }, + { + "path" : "JoiningUs/JoiningUs", + "style" : + { + "navigationBarTitleText" : "加盟卡叔", + "navigationStyle": "custom" + } + }, + { + "path" : "StoreManage/StoreList", + "style" : + { + "navigationBarTitleText" : "企业门店列表", + "navigationStyle": "custom" + } + }, + { + "path" : "StoreManage/StoreReview", + "style" : + { + "navigationBarTitleText" : "企业门店审核", + "navigationStyle": "custom" + } + }, + { + "path" : "StoreManage/AddStore", + "style" : + { + "navigationStyle": "custom" + } + }, + { + "path" : "StoreManage/businessEdit", + "style" : + { + "navigationStyle": "custom" + } + } + // { + // "path" : "search-address/search-address", + // "style" : + // { + // "navigationBarTitleText" : "搜索地址", + // "navigationStyle": "custom" + // } + // } + ] + } + ], + "preloadRule": { + "pages/index/index": { + "network": "wifi", + "packages": ["pagesA"] + } + }, + "tabBar": { + "color": "#999999", + "selectedColor": "#3F70FF", + "backgroundColor": "#fff", + "position": "bottom", + "borderStyle": "black", + "list": [ + { + "pagePath": "pages/index/index", + "iconPath": "static/tabbar/index.png", + "selectedIconPath": "static/tabbar/index_HL.png", + "text": "首页" + }, + { + "pagePath": "pages/appointment/appointment", + "iconPath": "static/tabbar/appointment.png", + "selectedIconPath": "static/tabbar/appointment_HL.png", + "text": "预约" + }, + { + "pagePath": "pages/mine/mine", + "iconPath": "static/tabbar/mine.png", + "selectedIconPath": "static/tabbar/mine_HL.png", + "text": "我的" + } + ] + } +} diff --git a/pages/appointment/appointment.vue b/pages/appointment/appointment.vue new file mode 100644 index 0000000..2b5ad79 --- /dev/null +++ b/pages/appointment/appointment.vue @@ -0,0 +1,317 @@ + + + + + \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..9997171 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,654 @@ + + + + + \ No newline at end of file diff --git a/pages/mine/mine.vue b/pages/mine/mine.vue new file mode 100644 index 0000000..939f6c5 --- /dev/null +++ b/pages/mine/mine.vue @@ -0,0 +1,131 @@ + + + + + \ No newline at end of file diff --git a/pagesA/JoiningUs/JoiningUs.vue b/pagesA/JoiningUs/JoiningUs.vue new file mode 100644 index 0000000..9272d11 --- /dev/null +++ b/pagesA/JoiningUs/JoiningUs.vue @@ -0,0 +1,369 @@ + + + + + \ No newline at end of file diff --git a/pagesA/ProductDetails/ProductDetails.vue b/pagesA/ProductDetails/ProductDetails.vue new file mode 100644 index 0000000..a0cf53c --- /dev/null +++ b/pagesA/ProductDetails/ProductDetails.vue @@ -0,0 +1,158 @@ + + + + + \ No newline at end of file diff --git a/pagesA/StoreManage/AddStore.vue b/pagesA/StoreManage/AddStore.vue new file mode 100644 index 0000000..d5be917 --- /dev/null +++ b/pagesA/StoreManage/AddStore.vue @@ -0,0 +1,1081 @@ + + + + + \ No newline at end of file diff --git a/pagesA/StoreManage/StoreList.vue b/pagesA/StoreManage/StoreList.vue new file mode 100644 index 0000000..fa6adb5 --- /dev/null +++ b/pagesA/StoreManage/StoreList.vue @@ -0,0 +1,362 @@ + + + + + \ No newline at end of file diff --git a/pagesA/StoreManage/StoreReview.vue b/pagesA/StoreManage/StoreReview.vue new file mode 100644 index 0000000..16b75b9 --- /dev/null +++ b/pagesA/StoreManage/StoreReview.vue @@ -0,0 +1,363 @@ + + + + + \ No newline at end of file diff --git a/pagesA/StoreManage/businessEdit.vue b/pagesA/StoreManage/businessEdit.vue new file mode 100644 index 0000000..f57f94e --- /dev/null +++ b/pagesA/StoreManage/businessEdit.vue @@ -0,0 +1,341 @@ + + + + + \ No newline at end of file diff --git a/pagesA/add-address/add-address.vue b/pagesA/add-address/add-address.vue new file mode 100644 index 0000000..ea70b95 --- /dev/null +++ b/pagesA/add-address/add-address.vue @@ -0,0 +1,457 @@ + + + + + \ No newline at end of file diff --git a/pagesA/choose-adress/choose-adress.vue b/pagesA/choose-adress/choose-adress.vue new file mode 100644 index 0000000..f3c1485 --- /dev/null +++ b/pagesA/choose-adress/choose-adress.vue @@ -0,0 +1,501 @@ + + + + + \ No newline at end of file diff --git a/pagesA/privacy-policy/privacy-policy.vue b/pagesA/privacy-policy/privacy-policy.vue new file mode 100644 index 0000000..543a21a --- /dev/null +++ b/pagesA/privacy-policy/privacy-policy.vue @@ -0,0 +1,44 @@ + + + + + \ No newline at end of file diff --git a/pagesA/search-address/search-address.vue b/pagesA/search-address/search-address.vue new file mode 100644 index 0000000..e902496 --- /dev/null +++ b/pagesA/search-address/search-address.vue @@ -0,0 +1,453 @@ + + + + + \ No newline at end of file diff --git a/pagesA/user-agreement/user-agreement.vue b/pagesA/user-agreement/user-agreement.vue new file mode 100644 index 0000000..4f911cb --- /dev/null +++ b/pagesA/user-agreement/user-agreement.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/plugins/index.js b/plugins/index.js new file mode 100644 index 0000000..6d53e99 --- /dev/null +++ b/plugins/index.js @@ -0,0 +1,17 @@ +import { setupI18n } from "@/locale"; +import { setupStore } from "@/store"; +import { setupPermission } from "./permission"; +import { setupUI } from "./ui"; + +export default { + install(app) { + // UI扩展配置 + app.use(setupUI); + // 状态管理 + app.use(setupStore); + // 国际化 + app.use(setupI18n); + // 路由拦截 + app.use(setupPermission); + }, +}; diff --git a/plugins/permission.js b/plugins/permission.js new file mode 100644 index 0000000..bed1f8e --- /dev/null +++ b/plugins/permission.js @@ -0,0 +1,56 @@ +import { + ERROR404_PATH, + isPathExists, + LOGIN_PATH, + removeQueryString, + routes, +} from "@/router"; +import { useAuthStore } from "@/store/modules/auth"; + +// 白名单路由 +const whiteList = ["/"]; +routes.forEach((item) => { + if (item.needLogin !== true) { + whiteList.push(item.path); + } +}); + +/** + * 权限校验 + * @param {String} path + * @returns + */ +export function hasPerm(path = "") { + if (!isPathExists(path)) { + uni.redirectTo({ + url: ERROR404_PATH, + }); + return false; + } + const authStore = useAuthStore(); + // 在白名单中或有token,直接放行 + const hasPermission = + whiteList.includes(removeQueryString(path)) || authStore.isLoggedIn; + if (!hasPermission) { + // 将用户的目标路径传递过去,这样可以实现用户登录之后,直接跳转到目标页面 + uni.redirectTo({ + url: `/pages/index/index`, + }); + } + return hasPermission; +} + +export function setupPermission() { + // 注意:拦截uni.switchTab本身没有问题。但是在微信小程序端点击tabbar的底层逻辑并不是触发uni.switchTab。 + // 所以误认为拦截无效,此类场景的解决方案是在tabbar页面的页面生命周期onShow中处理。 + ["navigateTo", "redirectTo", "reLaunch", "switchTab"].forEach((item) => { + // https://uniapp.dcloud.net.cn/api/interceptor.html + uni.addInterceptor(item, { + // 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转 + invoke(args) { + // args为所拦截api中的参数,比如拦截的是uni.redirectTo(OBJECT),则args对应的是OBJECT参数 + return hasPerm(args.url); + }, + }); + }); +} diff --git a/plugins/ui.js b/plugins/ui.js new file mode 100644 index 0000000..c292db3 --- /dev/null +++ b/plugins/ui.js @@ -0,0 +1,28 @@ +import uvUI from "@/uni_modules/uv-ui-tools"; + +export function setupUI(app) { + // UV扩展配置 https://www.uvui.cn/components/setting.html + app.use(uvUI); + // 调用setConfig方法,方法内部会进行对象属性深度合并,可以放心嵌套配置 + uni.$uv.setConfig({ + // 修改$uv.config对象的属性 + config: { + // 修改默认单位为rpx,相当于执行 uni.$uv.config.unit = 'rpx' + // 用于在传入组件大小参数为数值时,指定默认单位 + unit: "px", + }, + // 修改$uv.props对象的属性 + props: { + // 修改uv-text组件的size参数的默认值,注意:默认值都要用default声明 + text: { + color: { + default: "#303133", + }, + }, + // 其他组件属性配置,具体的参数名称可以去每个组件的props.js中进行查看 + // ...... + }, + }); +} + +export const $uv = uni.$uv; diff --git a/router/index.js b/router/index.js new file mode 100644 index 0000000..52f7240 --- /dev/null +++ b/router/index.js @@ -0,0 +1,91 @@ +import pagesJson from "@/pages.json"; + +// 路径常量 +export const HOME_PATH = "/pages/index/index"; +export const LOGIN_PATH = "/pages/login/login"; +export const ERROR404_PATH = "/pages/404/404"; + +/** + * 解析路由地址 + * @param {object} pagesJson + * @returns [{"path": "/pages/index/index","needLogin": false},...] + */ +function parseRoutes(pagesJson = {}) { + if (!pagesJson.pages) { + pagesJson.pages = []; + } + if (!pagesJson.subPackages) { + pagesJson.subPackages = []; + } + + function parsePages(pages = [], rootPath = "") { + const routes = []; + for (let i = 0; i < pages.length; i++) { + routes.push({ + path: rootPath ? `/${rootPath}/${pages[i].path}` : `/${pages[i].path}`, + needLogin: pages[i].needLogin === true, + }); + } + return routes; + } + + function parseSubPackages(subPackages = []) { + const routes = []; + for (let i = 0; i < subPackages.length; i++) { + routes.push(...parsePages(subPackages[i].pages, subPackages[i].root)); + } + return routes; + } + + return [ + ...parsePages(pagesJson.pages), + ...parseSubPackages(pagesJson.subPackages), + ]; +} +export const routes = parseRoutes(pagesJson); + +/** + * 当前路由 + * @returns {String} + */ +export function currentRoute() { + const pages = getCurrentPages(); + if (pages.length === 0) { + return; + } + const currentPage = pages[pages.length - 1]; + return currentPage?.$page?.fullPath || currentPage.route; +} + +/** + * 去除查询字符串 + * @param {String} path + * @returns + */ +export function removeQueryString(path = "") { + return path.split("?")[0]; +} + +/** + * 路径是否存在 + * @param {String} path + * @returns + */ +export function isPathExists(path = "") { + const cleanPath = removeQueryString(path); + return routes.some((item) => item.path === cleanPath); +} + +/** + * 是否是tabbar页面路径 + * @param {String} path + * @returns + */ +export function isTabBarPath(path = "") { + const cleanPath = removeQueryString(path); + return ( + pagesJson.tabBar?.list?.some( + (item) => `/${item.pagePath}` === cleanPath + ) === true + ); +} diff --git a/static/imgs/avatar.png b/static/imgs/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..2a620d0087a66445e50bcdd8949313ae838e1a14 GIT binary patch literal 5854 zcmbVwc|25K{P(%nVC-X*tzs;NvSlZ6jeX0K;#;vpMRd$^XKzB|J-}d=e*B7pL5SSpZEKdV0*%phf|aj0Kj8zW@HZl z#C(MSmW}y1ccsYlzuHxMQz9t)xPJx!!7Otl1Ba0F3lCdT4w~}6^D>W*|A-%No09wp zbzUEYbS#@K<5TCq^s&BPgy{f|Y!D#E>r>2XRLp_^l%Rk!lO8o3!i>H%CRn+&HxfA4BT-@OGENol#)9k`x3H|6;*>=#WYc@US+gM?OtpXg@KdPjj zI?U#2@c#j(5U-6h%h!#8veLmhAszqE5o7dOD&u8MO>oQl+rE{Rm6>3!m=|5&B7vat z{OHi&-1?<}HK~z-G@00miHT!U)dtl9k^r*826a7q&}TzhzL2@Ov9YKlfi;LeYzbir z?_FmW9o|njeBT^i!l-23#C9J*L3gV4SwisBB||q$wn^S+r-ZKh;ZTuRKAh>kTMg6W zd##=-JuXGSV`{R4zg#RIe^Ndnp(F<2Swzo_*z<@>V*BHLx(vYQaowRVI-P#Z`m?mn z{KC>wz}IWJ^x(0yk(LpLV@bb{K5c2SlE!ejT-S@kw(XD#eetbOtcr{g$8*x#F2PMSNQKg$0lq- ztCPdIqcU~oum%QfrzHt81So(Z23NQZoPFcF+vyzcwdMaTw{5z?Ht=y2mjD|T;LVCq z=#&9-H?Qv<9vgGn83g zsz;g)F@ku~b>(n*2^7mMqe{0QxvB6vP@3Xzpz!g)6&!*I`I_&N{;j3`AD1*)wNN+} z$rCdKWQva$qv#?7f8pklW`zJsg$|-eNnAZG24jIgej;Kg`NqI1i*n-OpBsFQA#NvQ zGB88Zdt$XPI5ekYo$t}#OtB@ul_2Ty4IbU=K9#yf+L@^Z1`4$)zX(9e^Xo8Ul49xh z;al9l85zH7o?d?4ZmFpueL1qhNuUIlH2RGp02a@$rOgJF5!Ri0EK~dXGX2#`Y{ZK- zIQcn;C^3LL#K$utX$%w@uNCb3@FRecr|lFSod-E$5sr+GE$367gSq!zwBZz8^4Z`B z$tjj)crBF(EMBN#aB4e)4;CCRL>vxUv9H|js8N3m&ZGFVOk{fc-*;R0kd8#>#xLKu zN5Vp&ms7VY4^oTad2 zA<81<#|jy+E%$ZPpG}IFMcBXY4S}K|98&Sg97EFU6B^VHk>BP#+z8&F(3cg!MlqkI ztM15XhC4p);39BO$BDtyttORAV^wSK=JoeMI5q@${<`};;zERK{?ok#Zfu+&Ump9h znXCW-NO>pDujom>BsYPtH%bcAYXhQ`{@OM$+UcAEw*~BQh@o(A@=;7L`PL*o=M|%y z9ym}cuMh*_04C3&pyQ$5Rj;P=V~a=ff*AK{{aNogEik=mJgx{kH3S^UlRitIup4t~ zIGyRp^neNZERz7ftmrSc@GcwKv$t%0AX(3|Yw_`kAt-yEB>2uS@+>VkkpzDL4lT0& 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

3@&--MJIDI88*cW9yLdlVhi73b#- zkKTBbySEMj$PzKIJ7N%muI*W`H&~et9snVYBlf`rs<#fM6I2wV;{?^WXwhMnz)Fdf znmkJ>U4S!`0IBqD0db8zZ%6Pj4sEB8Ev;w!!m{pZtfsFltK}6sPLSSmak;|!S7v3!%DF%CDK(M{$fbmMl+co8YY>l^VVWaK>PLNPZuW3#PLvd7iV}l%d1Tg0Z}~ z(Qt%Y^?F(qQZk+I;dDYVo3J{|X!{ORZ)nRJkTe%(sB}%dS`jBPzHNxLAWIX9JPR;H zqRF!u<2|PCD659|Kl+lcEy>~^P*x4rOP-&v(7oi#CojP{n!e+!ub$C%hSQT%>dx}o zy(3$`WsSnpNPt z$I+OJ%QY%eXdMwLg~(I3Uib|DK-=a`sfa{Nj*gDFcRVLg6ti){WSla}G-<4{#_STR z)F9FkQn0BS78eU@A8{!JRaMfp9ob=E9fjg9S+_wle=r-dKJg^uf+W&dZ`o8`P~i@H z81G#$rIH~?MD38hkmVWaP-|M_aO;Yh)CiqWRyAeQbA0PI7nLO{3XY4MD`{AmV4C*M zyYKR&pMHSOC+zLVL`rb>+#uz!5Oy7PUDKH$ z#kVF_%3=}*KyU6!O!uc;UTwH6!wG1N34RyG(RMxFnqk?v z1$#mv+c}JTh6SzIz3Fb~ZriS>tSXW?=HA1HXep@cn%UkQtt0xrV>BA0bP!x9nP9yq zN>cXs_i3A!q$=6l3ll`!wq#k3cb2XS8`r$70OSS!v>*0g%Yrp!W^Y1M^T zGH-*0=x`sn;lK=rU>>0)Vi^u6DP=JHk7B$D#$4WogQwoCS#L`6qM&Shw3HkkN=)1C z4oxw@LP7=@M>xl7UGn6!&rosBcy@trHpJ4PB^0wMT1i~oqLPf+@g346VY#@(_8rq` zLy@Jy10>EUiUOrIy#=omtV*a&O)(lXpG`qZ-hS&%o__iPX_j;6_QCMpJFYG-iL~J2 za!oRd(Y~eIEO>d@(svf&9P4#ST~%axPTSNR9UWl0j`h0a_U+p!JbQb4Oy>tEp_tBQ zR8`Hz#TE1YIo1m{wLvL|F%IDjiH2mFpsp3+!Lk&EiXx&Y+ z;lUoGM038Z=&B4{gm+~qe3M}Kwp^@9(-h@G!x-s^x-;~BPqJOmZ#@-u(1O3dH=G~B zR<1=^*s$b3+?#M>a!MG}Z8^c^}LW39ueU|p-D7%4*Dq&Fc(&sYb83sMvZ z=<@0F3;xaDe89`Kr%Cqct)Qt&a%Yi3(l+gm>MW%|r(8c&*SD|>51>+EWRW4-X`3w; zl#bhlVpukc;Z1@-i8E&C*0v9Z2(RtDXI-~gn{coq%8%Fu@Zt1WU?F1#D8d7}Z@L&X= zkITy|>cs{A?kvC*N}_HoGPgDYKEUNPb;pOFJ>mRn&9n2GqX%y?i!DzsKc!Jg_&afe zbPlN#Oy3WkQcyg4Kv;`KU`+=?lW1stgqGp&CUJyUl5XH^TOU-XxwGU+L~m>mhM00^ z1+ardj*s_QT%6NYCGliTV|(h=n#(6&A(Y_xXCDP)szEP( z@ZE=a1Se;gcm!X5`Gl&hD65inu5cgU_CE=hi+SK0fDU zQIn(*SIbrC)@-0}Hp8J>6f-8HgtqO;qFda(e}|^3iIRlPdL81ylq8KLZPzhL1t+Ix zTwPs}M1r=5-dHX#7W~CeKIB&)e@T{)c=MgN_~sjTcyxD;_Q48P-SngY>Z;_)SC8qI z=j_i$9PW+Ck7np7Cy9c4W!sw&w4fwy+hXe_FJHV0-X!x03Y%w;VI6?PiJ zljlWnla!%xkpvP%Th|y9c4$&SHX8Hf)g_-iIp?d>4bkKfq{a&!@?iKt%E?<`iTA#j)7JRj^q!|Z##`*(xmoZk`Nw^(f`#Gy%(N25b* zy<)vt(_1@qQ0$gJP6+<|N58_!m|M4xIC=UMYnsp4?o{L-Y7CJ(}~21zl$`-ZC1G zX`2>j4a>zj)zt-;re<x$)EhTo*x~S!11~y`1kw%0 zOGfNW=!KG`$`MBr8KuN=gdQnyJ)5!#9uUrg?ZZM!I6nF4Wf=dj7I>+^IqIh2afEkD^bW};=x1=Q2S4D=c|a+W{_(2zTZH(X zQuUtS99_Yp%03*c;B&2t*wvY)>>BL;7Trz`>vQT%qQ z2&fh{Z_?Jzn))7D53KWzI^JhQA>aWK#Z6wSs=Yf^7|^hLnx_!K#LeS_z2HjFpDlV%?wHe(C$I3F-FKTj zl7U=2Twf8({53SIl+|FJhaAc6`!Ja$)fRydE7? ze|KkJkZ<|gcN=V?SA|P^Ah;+rF}@vAM-ficr^KFQ&){>*n2lKE@W6!Mcs(S+&s&h_ zB&HIFCCcwXx+A12gTaW8D62hQK(bH- zC3=Kk_u{r%_V0(o1^2*EsJ(Xb9@3mJlvFy;<|<@lXvkn6(}rh1w)u@^9Nmb%+V56> zEBA$ZmXE!G9Z%1X3<<%c6Jyj$i&1FMuLvVP)f%U|XQ4Pi9 zGO~vUFQ#qEpx}uMM@e2b_l1;QvSHC?!e*Z_YcVF3H~9fBRF`8h@W5q3_ss{|x_Ysd zjhaG}T&pbfIbCN}20e!;@CQ>1djQZo6P=IWLh)CG5)8Ky}*IRTX z4qPUbR1AUi*`gMz$z2&2`)1admz>Hj?x!UWO zAvPua>7$&2T8h)~b~rych7Ni#^oBOvWAR{|y?J4$L8cw-w;mc_D|AeAOuK>w*cks# zy7kEMxBm;6GG8Qr-&?gCrNO~Ei&|b7`W{MaAk$a%nRD+D93B0TtKtES(}X&9WJw5NI5&%)9fKiX z+~)Zqq$y*{Ag9MtuxF^tPu4hBY#WB?9q@jR+a0sYTSf{y>k1pK6!bp&kVEdl&mD7c zJ2nO1^ISW-`FPrB%z4-M-1kD^y4Eq?g_E@36{Q_u+*D**i#v|A&CxI7fA@&wYg+Hu zKD7b_6Az|BRTh8$?t#u%y_#24fY?+oviJHw=G5tCZ3iK~mxVKc|ByygIo4^@W^rV} z6yoXXeeI#q`~TMPHJp)f{8y8&wvf*!(#sE8#-%F`-`L6n}X*kD@Me;|_Qd9=X0J(kI@V87zJUqXcP zUCEQ$u` zTDX+DonFCCiX-Y8xU~s4tw*&8!*OkKnFkfZ6}=*b)DyqM%8yUgVqK^bTzu(|)AMQm zMJ%H^(gnK3nj~Kb(c)<+lQSnU6Oijc>{v~VtV~dyhP!f!90`%45kQ-k|VDj6Hkl|JqO0()AgqE8w_1z zAPLT5^zl??!Do1GPaAH$>np`aoRMrn0L)PuBFK;K-7?_l^r? zF0;3ypMWU$s5W@F(wy(W?EKl*k{5A2 zqeJ>k3nxl6N^>r>Bd+q0G!Zjo5#m4^J0w}-kH07ESFBhyjcX$oqG{L7v z{PS^UpMoab!j7=${)>`@eGHtly2oBw$jQxX5DS4qohK-gTxUul&g#&>y(MS1tj;p7 zMd3M%NIO2V?NV7=FYIzwH8rJK{!-&Q1MbP#=JyKtc{w!!0luI$GEtIDsrfR76tG;I z?GJC|=%N$xfTA(xEP3`uekNUl;Q%QHaf9lZ61xWdi`zLp!1R~oP(}1|(syem`ykgH z;60d;^b&L3cdtatmG<&4iE8)8N$kp@8c{dPL|GV2qyOF`d=OtLSOOwZ4wX$Y!`u>cB9jXsBvvmu5k2xCO8A^_3yk+7IoM~9a@X>=}Tl2kWdsgs{k zfzA@kg_CDHM>sZiD{|Kn@IcU;{7IKH+)OBBW3S}b&-`}^^JSG-2r5AxxA|{puo!hN zNLeqsh|F#WMUF5P4=%z~oS@Y7_g~M)?x$fB!Hhkb6gc%-S6G+D$c%xS6%v~!t*Ro{ z1f3mkk41;EMO9ql!C9F!+qar8yohs0&efWO)So zLP@x}JN%AfR+@l|jb%LUX(^`FuiGEkx<_eW2!q>wj!-wL0Jr1Y7XIRY5r=N^>xZu` z6;l)7`g!@rMVGAk`PBzG)-Rh~tLfM_j!c*0jpwBQ5f(`KyA|L^e`^O5#4&7b8o8Yd zh21T3jDt@@5hkuQD*mCKs%xY-c2*^E@^fhnuu)m7w9|m|V-YinkXY(E(lPM7C#Zup z)|zLZ#FS4JABHnd|pPeI$+Ms*Y5}J;C<)9j$$fWs zBfouy{D5S7=<^WL(i-A+=n^|96k206lE$qX(@DG}NsQ!+<)4PV=#gfZ23N1Gz10hQ z-22Mds6!ZZ>d}8nN>zAADmq`cIqwepf%UT|+G2H;YqHknSO_C{5x)@#_TP>ye};Na zV*jZ{rRq#pZi;E6p}c@ToD$3>E0R`3j(Lac;qf)z^2>dXYBZe9aJv6m3rTeIvXdx= ziTP;J3sM&nR7W=+02;r*KWgG?;=O9UszP>zJa1%T8QMsj+YFhSj*yH;3^dN$AGcYP zgImp^2@l~)1w1DQD_M8&P@Z@Mb*Xp#1;a*H3VLNls;znBJ|?TcWH{$=$@a#kiqUKh z1%zWHXbK1d8l*S2W4bF+I@w;bDk@%Z(83@EgihqZhSfexa2mY@ySEFz8Ff6yqPqW! z&p+0W3MJ?=S6>!AHV!`$75Pqc^vky(8i@B6>I#A|;8!UkO(!A_LhECMeFk3V1dnqu#wI0|ALWF|lCrgM<5@!qbY!gD47+NX#B#+Hon8KduY3 zW?D|hCQUkV3Z)J3;wC)mZ(t$=-Q+=yjkKn>m#z$Y5$U)c#0Npkp3*Jd{eGO+!`q#L z$|`T1*EMU2IY{)5*F~8iR*hoxEo9kM7~Ou&HIn57GIlKZ&m3Hb7QKCHrv**nRm&HLjSNbjk?Lk{6WtWpg5M4}%j2^UpB^D$ zdwzYOouKEt{O8DzC|b`weNRUE-1YD|gDJ@bJP=N7Zj23KxZYuf24|Na z#RO<1i%$2?wQ-uPKr)F>#fMm=QSGy^xe2^i!nLVO3As(hfM!^LDVstkV;t*J|8GIx zo@GHOaKCWie31svvQ2EYQJ{6zC7PL4_Qz283=6Xo!4`w9md~HUl^I2?bSjfMcR#n` z_|c1xVW(Y^Ez#B{x>qJi$xtNjBNF~>MlaSs+7#8--M5un^B-V8?Bs&{o`-bAC^RwDQWULUwSo%$Bf(#1=H-E%sk} zra9hSN2;yr`}zZ9g{;zvzXbizgFh=P+lZG9;{T|E@ntqre24i8q;@Lzs`8(ZBJH>{ zTaD!Sg%?;$4-yLzZ%-yEe(`P0$B!!&vHX2JjvN41F6)IQ46)Z62ZuZnfsLo(U4;U~ z+_kxHB2@k*#~!Rr?)TPEyt7!csj+F|daE;s;ty?yy1C=3x{xd_h~C5B+jL`K52H-F ztdrVS4Bl{>I&#p0*%u(a7-N?|>_7L{5v3Z%a4F!+f`$W4XtkRogo_xc-#8#?KrD0U zG>Gw-onf{8c^b$6W}wFSoRr%#TgtWuWhHn37y3fHL{X>;ZV{*cCQBL&8V*=9f$b%HR!U~F6F*!S=DO1j5|GfMf zksLK&>$kMl8-e9y^NsIl4-(4FGA8Kc77_Ba-=}QTc5VMiM_w_MhnrM4Ak%84rQ1{Z z>H!ba;j5nS61VRDL>jJaS;HQU&gY`L_F)MmU$aAkc^GxTiB(J4G^utDnG3~{*1i+= zr(a+l#k%+@%JtNFVxMfddqEO;vqD&XfejlqC~f<>Tb^s@2OyY1vvsdfc_-iF_@_Gx z9)Xt)n#aw8UjE-e(0@tfQUMzHA8k&d8(XEQ%vMJ?^MWKHAwP~qSc^&vjtV^4y)L3= zs3azQb|&y^OJ4rd)?3@4hlz3mc<_@%gRbPrzqbm(deuWd=hW2sCVf;aTH!SY=F?1n zsHWO0oob0m63SE6W$0DbKW4R#+;0?~7*F-xZuf22_1$N>g$eppm5ST;2-$=kZ?gLAW>lG z#1wA@Ox8>j&J``ct>JcF4urIC4{@hEB0`psc~G z+`>9ISmi{5B~yZ7+LHsaH!r->Bg@;vp!Ke$AHEG}-r zf0zPqKbdz@4eM8SGR4scI;B+fi`Xxxv&8Y(nrnkZIg)nYPhLv=ERjkX4*#BTAQQ8) zJd5wV_`ambu&yC=;y;O!o20O`raPJT1`icKv}t%G$Pi#DwZYi| zz+U>GKd@Z_(&PPQ)%G7F5Q6fGH5zxbDpV5K94Av%l^{I+A;myog(eQvIb!?>z(cI>dTnlohFV0qmmfxg>2 zK@+A{PY)1Wpqr8`8!Kz!xYk249OLz-^~M=p;g#0vowSsiBdBCw zPiy5Y?OtOHZd;x?>(33w(m zNVyr!E;OR>O^Mb?t3ZM>FfHX0KT!`@p;0U{)cL!N)GW?Ul)Taw^ozo;jxd}w+h_j=#k!`#P-E_J`&T#uJ@2NS( z6ev?l(R^KmGn2lnpf~b=259SVag2&O@txJVDuto?YI8_fijYBL2@$K7igp6l1g{_7 zGQUNFGm0+4`Nw0u{qu|D=}Vba@FSffP?IywLeE6jgZJ>l_7I`$-hX^dE{pSfr&2Ta zb{^Ue$j8l|ucU#i2a21}RWsGKj_KWZV$W(HG(JaS7kmqi{?pp;!{`>aO(E>&@WA8j zw=nZtAgGB%pmhuB8(rXf|tnznWgTc@zJ)BW6I_ z$nZCmcXMnBBfVyeVm&PSu7|a}iumhZli71x#I_M7Jcuv`5o??0FEK9n+eHmdQ8Y$M z>o3HOViY?Fa&8nF zQ(Cm8&ab;$xWabPlLq+TglQ?M$s8csR-!}YNosdX+!F8A=$X(SZ`?v~ULA16)_l)G z%GOakK}z(?ycPjzypPKnC>HPbYIYH3*kWKB=X>|M)}hmtJ0anfAl6gmHTyBB`XvCa%Fg{4CwWu?|@{hK-_u@t(1D3cz(zYk&fFB5@wD`?$1LL zI7z}HBBegzdgU3EYrRT`_vVw@JKiQE&GHQc)muJS7I6m=h6ETaQ{$}lv? zSxfhaFbE5A8+1x(v7Ejg!Ru#>w#RMJ;L6K45EBVbZ*+=@BO@u-n?OFLuA{5fWgLga zNMKcLhvb%;SM!psh^YhnWi7WVC>9hVD+Z26D1XNSOy9lINV}{ z1%7QKsD^bI3;b4zmYnG_zkY9mBRCz>#31_%f2HNEF-Bg&E5bL8GAMmXl-gdZ!C;T(?7^XH zlPEl*;)@Ho-->Jl_6#g)Gvjkwhpl@{spZF1lqt%8#e&Wu+-9bY96@Cr*wB<2_fD+a z9ba9~g$8}&b7(Zp`SSx!3KL%JMR&}=`|FKsAz-b2ie;lS<0Ec0{{i0#+tn_oH!_1e zZ_X!*=H;IEvvCA1JOM3=QtKH=@ib4B0eM9f-WIw5@3Bw@_yG8ZEs(8@BSqHT6UO&Vx;CgX92BQ zIXTw4!L>bi@9j57>6G#T*a7SK`^NnTaAW1zWg0)sqm@}<>nk-gZ;1PAV=nd^oEr_r zne2j#RL!EaD3-zu=rznJegRJr=>~cZrOroHSm*aYnlY@`U+fk$p>-Y?qNd(Lu0!Ew zaFE!7M??oddVZT0DW+q@LoP~#>mQcwHkmzopYbn5_#s6Kx75E%iU!rTfmw7d0+t0i zR81Ru4QaK*6*0Oo3ZbH7{rIzn_knLwo2yvsxGKh7vc_OTw+l)l{*3EALD`cEy-zpv z5>L0%zbgOco(9K1^^le83H(qCxY`HoxPP^EM(*y&j^?xO80>r+HvPlE2cpl%YAt4{@c! zLfbSXz=4v8Dj3uf|IXcAy43QP_*!ezv0N|2?#@LUYn7%+>mf0&aETX<@?hNihV1eFFLv$8^n_`(Zaz&!0-h zGEci7u<5eTGd?{dW$Psw^gg zYEKXaJ%9P0o_4l?qM|HFa`D>Oq(+!UPwe?nsh%oC+@i^J#yhHNh!L>jT`#-*vYCi@ zXsZbPX4XP^#OinY>2r{@&VRwzyLt(iX*2dR-wHnD$%~YrJ4Y@EcXk4Ob(%&04H!kF zz1C~di9JKEA-c9zS!+w!BLk8?uUiH9eCtmg&H@%TDw?7WF)egTbjs^9K2PtZsr#vOmNsV!-(qQx zGiWk6+>+&-pvWf41&tpbLdvJq{QVIzaM4`Bw50-0JwDh z35vrb!Lar&N@c@ce+~uQh5;W@z_(B_?*gQ6d$C=;uuH2VVbCGZmLklpAQq27( z;)?YMk#h;W7!y9G`cl{X7;bc*+}lUMupDXA-XytclD;H$U z<#gYU)ruNI)_%nnO_ORY7idBAvygvnWZ_&iP1TER3YPXou#i8idNWA37aX zvTS8M`Yk&O52!{Sw19)Rjdc+N+l}hNbLQ--=#5)N9kDZ)sd-Jgky+6^RVUO*+6m^_ zvZMBVYgYW42c_@!67xUt>3z6=ed+Pb zvBg#*ZrVe!AuJkzUkE2TI8I$Ms})p{CJmQ3{MtM*%Bdsg>bn&PyIFs7de(dCdco4G z`Kbg-XW_~V9UJMpCDSpP!2^ua_RiOKk;^)nbT^EwU#aB8*0f2F^{$ zt^?_ja&!!#j#i;Snhh?)yi1Z6UH~tXO6u3xH$B(yiCXIh`t=nfHT7xus1VFc^?$TJ zx<30GpPkLn%Rcz=n2bZ$#FtxbtcYy1Jas6N;~1u-{5^Im#A(~p<9@eP>*;;|NhICb zjM1LA5W(G5a3tEuUwR-qD=djF9CA*%((;v-k7G3VAf_qYwF!E|sX3C_Dmj+d3O9d{ zP%e~yq0Jq_x(ifAjcnsTV$7~$hX)~Cfbna$ilm$n1epKj#GVd$ALQf!Y0gD?#mgfA zWVA>L1g*+n4$aPiG*Rf0-wXE3mRjf_&C4$L9Td?wM)P#8=6~AbC(@;F{%y;8smXxj z_F0J9-M6KL-qyrtbw#OuF2?|G?ut_s7I1Q6wV>0qJ(*zxn&Y>=i}toQqkE2>T?^1YE1506t1*a^;!01D`w5K)T6XUA_< zwXYtEi{zK{7iOkJkCoIRAKaVd}pwhbijLClSxYzXZKihWy~2 zYU!mLoHlEofxcrPECs>gW`R#Hm!JL~UO;G`&mK_8x?5D%t?&pd=(zDC!K2Jxfw@gA zO8b=YDnplZN=(1rYl84cfSik_gQgyDo(ikxQ2S`gyWL_5aTB^C)c=UD#`A3EFApuh zxku@&HPuqCRS_+ft9>T|oNB7ojK$}XonB&LH#yfA;ck5hZ0`I}aNL^$Ga*i9Zqs@; zC&8ote+xh1PoMS<9iipG7CG2$7#i@2h5u`#F=lUM+k;^*B^7& zhes3I)*Xd|?sE7S2I$xr{QAU1w#Vx{b>qDZ`PiyN#Km{Vs*qedEWOShHyBZBt#our zkL(}b|NgU{Z>};jZz-8h0ssPNLhs2M|Io7!E5~6nian`!i`TO{sdA-zyTE`tNFc8P zjAT=N!M~i`dWYs6VVxJvHbeetMcW(kJr(56U7PvO<6#lLd9c8t3_B_on19+#dI--H zpXBj}k2y1b(C@XTocr12r_MBAn^vZlc+ag zdZnUM39k3BI$`lw^j*NIO{=O2z#wbu(}d?}qZp`BpNS{EUq|OoeOE4HaNuK@H>;c4 zO(%OTV<4Hn2b2~SKS?hym_M=FtXyt6D`;f^?=^8#`P~~&h%it`yLGqUXOoQJ)03d! z%bvFOmwh}w#oMm1GwFl|hF|9}1l(4FiZ@q|0=;wR)Yt)Q-P%gI zF=zNvy3or@CERJLksUVqP-YPN5aN8V%%J`X-9{hA)U~AIi!zT1p#E7)FxC!L)e16Z zKJpl%gJO#0TUi1dmdZFPUoj+0B&~&>*p$x=8Xt98?x@N)P4;&Y=OcZ7|J|1H51 zSLG*q3E3}7p2-loMW3CaFJs=a4C1Q8`@%Ln91_RF!aHTTXkmVHMp{j{YP5m$7Zx07;T^_mRayH;ns!})070vkDU}lgSC|xH#ZBJm9D7p0^#d)zffwVj3V_@nNBy^lk3KZ3_)c z6Qs(Z#fM$=u z6sX9^2~6eBXkUhm#OIW7!YyUB5=J36Q@)3-rn47kxy5F07aGU*$j|mFVx-d|pe0sQ zQwxg9R+odX_2H~ ztxi7{baK`zYwh89I8U8X(h!mYd%}iY^2+z*LgG}9{xBsYDQ#C#jiamX+hJ8jP(X}BDqOqeCctCvG>JwSRRxS zr~w$PKMf=N)Z0FGSF2xLE#NbsP$ry%NrX7biHem zeM@w@k`LGB@4Eh~?59w|03x145ZAm@!2dv=NQ!w;Ux16JySoof=#LtXQ%J!FWwC%e zfK+esOmeZ*`HaEjdmYTnf+5?XFH6DXY}29TO$4&X|I5kfY^Ip5zTN0{jG!8?$2-0=1#bzuI6@Cf{E!r!N8F8RF@kE{A$R!| z-yH*DYQc<*AJw0kmS|(%jY)QWL!=MHuyCt;fBhaD})M#T^!_+>_{&&q&14SOt{8- zGxgq=K@^kimmmwKFj>ES$dGGO{|ffW$KbY+6;ij4KNj0hh-zXKc0?33ra9dP{6_B7 zZ;}V2-?f={aehw%ld6^FR@KGpW*yMn6+=p)n^85h*s67M zxi=&sSp%KVlAp^SbDu$44xPv@0Rv{)QQ~4~+S^t5Zxgs1MDlSu0x!WKPAq;wy&=z8 zdKpgI-q87ZMnl%9ZM67Z^c8{b!1Fg$<=q`{4RTPE(fJmPXnZ%SSBR1d#$y88y+)@Y z$@z2#sL>8tkX5-gqOIf8?i(3M?Zl}G3cgt?7Yp%Dg6?F-4`FvWN~N_O z0ZPTc`sVWxmO(-|ZFeCY@Zp`Kvoh}aofd582ssV3)xlHB(d3E~N>BwqFd~8SK2RrC zj2kT&#S@Fz7$7^BL|og-HT^K)6ta%sh53e{;sz)$Hm*lS|6IDm+n$N>anV1`GB1xq zGI1k=l?l_jqZ|yQDQGRSnDbCuVUshW1iN&s6t$GCp0LEdeh49xlH9}`CXXg0rez2) zHOC3b@W9VffD2)>;xQc|;;Cq*e!+e-{`vCZdh#1fyQXAk19sStLp~D%iQpb6&GV!_ zo?&^hySu-|68l$1^_7Gc3r~0Pr@|I-1! zZ>m*%O)O_U5Ms?l;|HN5MEIyby=qZdiuqzkHQ z=J;g7DMfX0c5#0Che{o^0{7vy>$tz5jYNI~bBSeF)KehdvfYjwXSd>*IqBE80$M4= zU#qs*)XOj-3J^ML1-HPQmfsKfD`^Fm#(GvOMcl3)axk;C9!EdFmr4>8!Aft`Pp-y|2< ztv`V6olsg!PlsM-<05AYqromSk$1_{gubSnPzIzoRI#}d zD>! z+Gj6jj?k&I-no(3=f}z$sJWO0|Hr>O!Ncdl$_6bQZf^efw-Tw6zW|LnMU-#RL89F6QAh%#EHQz@dJ z6QlHTq}J0|ddVC@c@1}dvYGFBM@LSsJ-YxFhBJJT+l)^{)H1{;aoym)Nn|Q7L`jg; zD|q$n-x^YJs@z0UQp{Y!icnrNPnjT?n@rl$?q~B{-)l=MF=2*=@s@lsC8cKW@ zleu|;9w8b1>T8yQBSU`V(`bH|5%c8jbAA=2IeustM?cBrHV&ReG$Lx@U82^1L6PFW zxu}NO0!Cd>G%fuTGZq(xovFz_M`7u#2*kp&v zs1@uu+7|UDP|!y9w7_br>d~5TADf6%_?2Yd=Q(fiB!=Tk15i38LX_YaX36DmSkyHj2r*f_xF>sxg_pV7XCr@z`E>Rbzb0lol7HsdmvNZ%uoC2` zlJ{*lgc5Z8QE5JC;UWFQQ7mCM;@C@`lm0DVK@EE~SwV}`IHBB+TQ5^e!xN(I^H&5x z3;&f0W@$4zj}w_J5)9!1@6$&|N9tU>@+n-?_;d1fXrSI#DGMdvhw8$z?xnDr(Z7!q+X<`IEi)0rv^Q{MDLBSekb;hC?i%Ppj~>Rei)}7)6}{hGZF*Y`a z5K{o}{vm~#usxY`#_W@*)M8c@I~JpeiL&mVrAQJVJxjHLH1B`_7?2o}Tl2+~ldcw! z(b(6hu8Pa180cy{^}n4dXCZsc{mM&4H<0qCd|Ud}K2KmEVES0?@IqnTe6)_@1^bi> zSG>z^wD1-i@fC=Wlw9-`^S{L{CB&ft%GWuz>_tB_lR233kYkUc&{t35$cPdUI~&MS z%4ugCF&!k>nf3iW+@h=h7N1bkc4b3A_h%@1%~r`s=QSwMyi?zb42)cet=x_fnS0A% z`*~eJCR*Dt9X23++M^qE2J$mO7=4#U8pPHNbyt1|4zM3TkCsBG)zSAhd|06~p~a52 zm)9_~lHg%s05j-1`wFz_VU(34?2Y6Iu>bX_&iEqJKBD|d6%Y^6vRbKs=L>B8W8T~g;y!49IsG!wLev#9Ty*T;<+xPaMrsw) z1g68oY(XPnE~N03$iLh9~|eB%k=RsR~O`=JDdrC-c^2WX3usPOG+7 z4+<^ne>1Ni|9RSn(-fEZ2X)lI>wuJ*V?P?|&f&;t7ZW|)U z=NBpk4~z%VWe@YdQ@tNp@L0fQr{`QUuu||?^xGVP%-Uin1ZL4RpEl;3%a3uz?zq(9 z?}sDDw0@u#@=HaL_f%HaV~cLrOI*>wIs9anUTFvZl!^JWMf5tD2$WSl%9C3hCzY_$ zEN(*o=XAkaRnl_5I2>3hjF3gpN$-;ZBB(0i93tuxn_k8LYd%$lFPFl`5z zZ^Sx;ierqtv(CqgKVr_3aw1*c!w3G7IN@KPg1)dA}2bDrm0Glm?&A*!|zn8sqlnqe25d2LgRQMU1B(bR&G}=&zh+c zeboa!rizf7_68pvvDZiOV%2MZrEG{l z3}}I-CbMlLt6X}R(QgG;s6=6J3^)}VdW)o+YJx1u1P_ZP6<3TR(TsfmLwXfj#Mp{+ zA(5Uq^6K>gr~4EHdMWB1@J)PEos!*tUJq$8x=Mb!n% zs{L?PvwMFC6p$k5=*KYbJOAF=|8kbF>VYTAl9QFw`cfes7W||)8FA;w zz@c(F5FM#(wQk+DZD8U=CbhC(;RzV=z@Ki2CcfpLsyG55`08+8QbJ5Q`ey7pg^hA{ zUmF$3V6_lMiRM0wq^w0WBgo%h!iUEg9Qq(gMzmh2vf`<}F3YdSj!o z=({g{aOK)%<#CQqL-ePWNrk|+iMIx;ZMY7ou!aK`6Z%A&_oGT zc3RcA(FMO{7R)|7Dt;*MavLp{J;JoMU#h{?5Z>GKvmIkA_>Ji1kWinkj~6s4>^9`k zaq4}%zKbu1-p6LJKjJ1lSa_ITSX5%`ZzJe91hwBjQJ7z)$88LvID-&hKnt`I$-*SX zlGAsZ&TeHq`S|N8Zvm|m;Hg?bn^yEz;T-DBk*vS&>VGQCZY1gy2F-}tCyWFQ^wv6j zjQB11o<^m;*4st+jAWd#yu94l*z^N=Qo#8Z(W}cl%F_4PM(WL)n6hvGHlY<;Kn+s1 ze1`4v!zL{o=v3yU2~=?J;>U7INby;de)BFM^Q36fb}XietIU7-FdEV7groJ-QtNzo zkz1OH*4K*=gw=9@-dVzyt5IQkS^ zPzpYyGp@)k+g{N-ZEs&|T-UXJ3u-fK>NS}Y6lfqVY>E_CsaQ-es~wwVc!v&23-pN} z{H7a7d(J2IgOsS$yNof;iYe8={cI3T6TOjvP65ILU8Z&lS{~L&VDh(<>iP&6N&>DQ z8IR(9GL5s?lJ9d$jcX+pdmj$T0@(gkFF5ZZahvvGFrq2^a_5%;@oKUHaiT+8=x&uz zHR6*k&v)7$#s!GCSP>bfKG{I;npZ$TgqxCkIt$oZXf!qUcRFf zJ;h@M;ZHIeKKcE{Ou7dbzk4t+N!=o4nL^I3|E-<6H573|q)3{UC?V{aRQp7=X9Zv2iF39!@v&%WlK0{@9B`tL=HxUgEUyI)T76a zuDd9@e?L}*J<*J5AyLxj*a(w)c;auL8?STx(LAB^ClscV*tC8x)8qDZs2z2W$Hj?$;>tCoJ-F&qbp z>BXxzd_F!76^C`hvu|IZlbrFf!pfGbn+@0RZu!9%pyL#+HGQ+^=H`~(dg`X3t{c{i zC6{}RsY{NWr`&E?uU3p=hwut5B~cu7>wpkW@$Yqf1YNHJOT;-(-&;CgW1I*Jm8%Q7 z=?En~ec$747}cwC$NKu3=Fwejsxa1LkVqYKbF)Cp0n62zLDym5|FB(0+lLa#EQ!%N zEVDM-Ef74EO|_@4YgV^wCUJo=hOX_oy1wDTalx0bU-0C6pOgNLKQ9P0vf*e*6ls3- zi(hel@tV)R_z|o1hPSsB7u)cGs%~D9D_bKy}GtNeuA3mNk9_HMC{FE$~6j{dEoi%TkHGQ+E zTzBL}ig3X*uH%^9b`#2ClZ2#5nM}rrcQv-{DTZTW6&iM~-o0gCR?P3-W4BtdynKuF zmY@HuIq3Ug2^ZSlGnCc{Z%}V;h$2nhG{jLv90!JX-}dN8AL76oC$2-q*f>QU_7zpN z4=wf|_#^&6ed`XaSH;zvx8TAM_tvD|l9YXW7DK#zN$DwIlcdws?0 z+@pl2YZ}s6jr}Yt8p3+sj025P! zs_j{B_Ms+BM9>*L;r3>1$Q)F4$F2;4u6Db?m=0?U^>#yjG{CBa-a2F~QQly!LCS=t z?dUs06h$9)U*3lbzI|1pbi{hK#&!+Pba-bdcN@Ac;04y364N)dou%$9s01ToS{Ih~ zy$zgvFBLKl^6j9=d2r{5vJck1G>*7`{|;_=Mq6%aUtE%9DWhRQWUCL0U1xfVJjXN+ z=Pg3$kh&HU9mk}wYu1F$DQ#YZd<}lK?ZCIXFRfUqCrVf33PoF%dYAkQxzGXHU6URFA!S&sN zEo_iNhQiJ9nAK{{U;p$MWch$Qcg}FO=jeD&x!tf{UUQl|OuYqDlO_?9`JBDqA-%z8 z1yVco!8Ybhhtit1+99zF$0Mq0jj#iTY0UkTGai3&4mzc&cD#K4g57#aRX5x&mgsy) zvuhb9p3}MItMA@2h#aHQke9FC5*0J%lOYbp*T4Gp0XB1w)9*cE^5g+Y{+eXkAcbeK zE;*i$Nwbv2dPh@kx%csBoE%Mg{qiOI&eAp=PtQL>M-e9{$Hb8i{9xzElbA?4vNT3` zf4IgPj15d|-ISC{mC4?4j)Pr2PwE^nD-5uZJM%I)O^rrG1#l8>G~Ww+l`q%m4JX5)gp zzw<+SFWHn0(zZN(aEE;#u(NSi@YjFw7o6QY;&*@iUvqVHOa0Bu5EN0G@o>P+^)<7D z*WL-iXf)vdgF7TzAQhx(OccdrNkrRqY}ZTnb;IiBnzCy7?1w+(tGU4N>CI9)2AQP zc#V#)$n%1I-(XCOv6=^u9@6Z0#BoCH6m@rl6oRIA#HmIqeK@qCYCA;LVRVX$TTI*H z>|qJI-;yPBhzG=3fmSV2D!hzPA`A)rPLt}G$!v=Eo;*((4ss@w2~iaB`S(BN?A`;C zVt~YQdV0!eG@!TZun0W>$>JpN?JW^yxo5Qru9&X3bgeni5>kWt@&31=EQ8x{{-JYYNMhVNaFMr9u`itjuPGFinpPl`8l*NSY;u@ucp0Asx zq3Bzb2>*z$8p{2ipZ)oN;_P&e@d2RiT!7pg=MGa0ES77wYJ?O<5ezc=Y%&o3f?3*l=``aeQ`8U*D&!YIf^YkaVOt z$OmJxMDzKlAJaQHI~rr1=f#^#Uc9&^8w`U-yxfI1E=}34*Nl%Ex^Bzul_e6Ea=XK- zj?s8Xo&`+hlP3?UTln_bOQL*$N>c9LIpd4(-Q(TWHUHtK-!YIq0~(&cyXM=AHF2bf zWN=C7={ds=>Wd3hS}=e3Noc*;TyuOp!ylHeS&=i&W4dyUj5O2fjBQyVMVP>akeJEn zknEH6T}vFtj3yIAl+tW&P*Ne0=r|)vyTHEg3T#&%9_R`sVKSZa@{ktYl~pK0u%V2g ztt-+jL%5Er+>+-7`Schar%Z;S_cBkzl~E~8Y#Q(#ve9UvsH;6vMK~{5-QI>a8a>1r z6RzWFj8p<=98KMz`aT3FoJAa3X`BezIC)qu%P0z#Kdlh92kQ~elEfP4G{!;SI@+c| zs?h%^o#o??p3>`#k3PDCYf5f+4N)Y>h6VGZBVK>~HBlT>ZMS%!+Et+#*m}PF<|T`_ z&-ugojF-=!bG>O0LQoDA$FnK7H`i>dmaEmCy4>;O&p+bj#e%Xs;63A%?d4mhnc!+? z!ot)9Q-F6CEkpD8<;9jXiIKw5=qb;>`Wh)9{=a>a^}Y;RB42_4r>C?Yg1O3-ZD5DAaHooBS;wy zG6usG`X(^DRf3}?jxm?m3 zOz}dHBpKFOvMghKd>12PY_n(i_BBxy6LmfPen(qwa7m7dBBh=ZjnolcmYopE(}!)~{yt7~i=Q|&fv*Xw{T^bX-1v2^s+ z4&T>w^_F_SV_2kk7dFIA*HP6i);UI#36uFT!|O}5jwy;F80VEj3jLvn?)~O^JQ^|_ z7MxB$CLhiCTYu;8a&>k6q0znCm%Ohf%aVwr>6jwXRIMRR6Gl-)+Z(znY`n89VUTAG z2RV%m1TAAMm&;wSFsfi7{N*oy&6{P*gC`#YkR>rr3!InCPfi()MjYoOK6^6bcrqYO zQ&Jt0Z}Z8R>ut|hU;TSTlp%z}cP&`MSKoZcFMsyeTyGjCvoX0aNa2W8co-x}f^946 zrX`LvUE9$#Ev9$WZD0WRT^D$}ae`I?Oh=>=^68kWs_6R`Z+kjt18m5J-%%)qvmN`g z41Q|wu}ECEKQzGrE<~04YENHok$BKLZ1`i%%WuC8ldDoJmn*JUq0L7sjdg^QhEWkJ zlB}hv!UNse@UsW`Gw8$`higiX&W_kCPtzOX`IK^XgEMU?PB`eBUIg2iF~OHAL|~Hp zz6+qJz=r)`PxRK{ao`Pji*RkwR#k!%;Rb*Yp^I<7drrB!f+p6K8{Gb1h?^cf1 zN-m%Ong~Z@9B#3u-0u1M=RYHjHEmgj!%8Wt1gc%n!+Ffv-Mg5N?=qW=`ICS2Ck$qD zUcY=z+^zZeIhU^6>s$WLi*ecXZ{3ScS4` zWvpB4doTUQm`Nb}K?$CO`x!{y~QC#R=GaYPg;UVir-Klq%_6;_8`IW|ci|K<) z$(xWTh_vGACr^0$>J`tvdB*qC6e%P{D$qJX>%d)?wkA3(^0F)oRv01JS9|vRiqW7r zAfYR4-yl4=wr000IU1+{W!kJcJvkwYG)bD1YmJT-<55l|9D`INZ9`XW=|n=+wA|d> z@Z~qp*|eIwNlKDsPz41-yF)I+*h9WRl4TjkCjLWJrjV=QSB zV@>wK`ql1kvDFIYTl%J?Z|eZf_ny8t#7Po>Fm>Q)YLVS8rI}T+(<=S+%@*v*Kdiu-TUEH!G}j98E{WpFd(Sny|fE@bsf6eDn2J zeD&p*RCUen(F2rHl>3IC|K(3PJ-<&e9MX3kQKZo-CXaPsifBRyTc1*vdwS)Vj&t_q zmd(zw+B9ToIILY)AzT+W&dHGL%a=4J0pSk%eM3_>L3cI%;mr)p1!F?oS}KJz4(t2} z2+(f>X<-@)9G9@<)mnz-MUv8+IuuDD4ti!nnx!}gDhc|TI4s5If+^M08N;INm=&7UYQt_jm0}-?FP~5Qa3*aB0{*U`k{xkva)&?>6j8tTA}g9|Ae{L;aV; z($;&-2f~}=v(G=pS%avT0qLq!BDcgki6&+~8M5A0L{SpF)yDGh$z8sB_L5KTACtxr zOE_U;pBlEY}UYEn;(W$-z2e{h`LBp0MPB5v*oHyO1a41n99`SsY$$_HBh7NT3hbIFqV5fSZ$p?# zh|u>K>A*I}(KU4lK}8Wd34`UZi1_ZC@6dx8)6C&lFHm^gXbiJ6vLwcI9pK1|jFYny zMxzm0YmSbN_~SqR`<$Pjp_St9>6}3tI#5qe=8TW0q(w?9d+y)AL!@1INePp3Qn2 zCTZ_OsO)g73Gb6d|Ih!^|H$*VZ}{ccFX++KRZY1s=~~0_@to`jk1&1DH{BN0G)vvBo%g*vR`3&6VmyG`ka_(=n8FxWGy|a3q8Zo@HkYd7g%* z4Hon4BMe(QS2zV*ZiA`e6Xm|vGI zy$$>ofv2rYHWV~QQdKpG3ZXQq3Zad@X;>_mq{3p1qpVv-!x4`^`GoVjVK^G|@X=!i zvtwR<^EFv9q{xd9xlRhq#;{2;RFW~B9DLA7(ny2r@lv7VP*B{oHO2-js!j)ZwMVCc zx1nQ&M__Egi^@ajzHK{Pk@MxV*NAMy`S~fmND(@wXrF{=sP;>e7;HzOEI<0YU-19_yMNE7Y8k{apMQLx2d5L1gym{Ww?BMdoF&qd`Rs_= z?}(BN5HxL%)PV+geSO0qPeVPJ&Vo&`?io$SAUGg)C0Ik#wlu2}>q34&NX2&B(07I+ zcj$D$o7Z2Xu$-KjR$eSg76D+P-ma*Gz55YhY9`v@u^kFdDtu9G4 z438$fdVb4rG~qZ&Fm}VMSFbS+kP%*JgzqVrH{82(jMg$Fgr#IQ8S}kIr@VM`O)h&r zJs)s7Y%$jJ^Xrn+`G_BUaxd&uoC(BCXX*P6feEg$$p|goVYm?Jbd+$?&G^0X80$mq zH!cS3%Zkm_8~*4IeuwLu1>e1RP1iea7fT+Tjrrn>Pnb@pyn1`Z>FEj2pTA&!bV5~b znT$sqO+#1RU;OMhsJ)?SJ7hBE{CrA2Ip+Cy-;rqnzy6L`X@;XQZKV0;T>%CL>NyPwDy|aVVqhdc$hHBR!olpC9q*=bv%^?j5SmvTg*?P~(MUzgbb$ z4YqIDZZ_Or?NL(jt6zP^ozn?VpFG5P7>>p$0hiZHgpdpdL(b06ks`PU`mW>g)2B>N z&l##IkM9pTnvQ5YL!Ky(j*f_#U=*9&cKt4U>@b?%=o}G@E#VGd;ptriEmjYpymmNv!eS5z(W)L3kV5Lc;wO zeJEJHe)o>`)m!o+r|%jXLKT{`mdrN{rDib7dH(Df9)&d)XF)}wNCBy^wq>yklbO^J z9*NoQ@S7D<1sht>>J<`4vsoO1K9VSsbZy7Yde7_I5<#$$Cb4EyTkaJ(n_b1ddw1wA zH!OAy^6Hw+a>3DL$l~UT z^{%GtdiGV#ZnwjE&&_hnwhTi_+dEe4ExT&L>gy%R?9V`VUCm<>pHwrv~|#N zwF&_>+qWc#fkpY?&cTNw1|28tnmsx#!nAA~+@XNEt1E10FvhXGxhA`NPPy}Ju5Q?u z6;%|hsK$oym-R3n4T*eDw_P$l8Suxy|05oqhSYN1bo}O1nRMP-PT!22LUdJ!J#p=3al+37dH3#;|L`CFBcFWoJ^su8>L2r`|Kv~kkYB6{G&hoF}~R$b0W9CE6VzK_AI z@$wCe)t1}!9;G76swYVjyzLR*AaU%Qj$eKG4WE7;x0v4IbVQaFIA;&A6pKd&N>|f>2*s~)l5%u(L@^w2a(Y5tH=#pPN^}$xrwMtM zv0iVP&W=da1XKXABuN5NQEmh#+zXkEMtt&IoS1(@D_mN zg(S~2+5_sa+*foaG$VWI4+q5ive{sfY?_+BR|n38!uCDGVb1YvNTNKiuijDbE23zM zF@|ba^7ieLia1~3FNz|Z zF__*^`w9-XnKaFUH(Y6qQT+99-cdV6S%)b@YeiVXON7!Py4!U)(@|*4AAE6-*}UMZ z#e!`nX}b>B?nyGugW~~7B+>OEJUnn{DZ(DZ82Y}&2}!+g5IUi%Do*DktnF#KDts1@ zGzW)^)Zwb?54(+!+zep@8AZ55?EVAJ$sbCi53UN^mguwyp^vtq+HKja*I1cQb`^Q7 zcz3hr(eHo4v*%ZgM?APAdyOe)^b)cTN}%a-@_v8BzNkNfHrj$#hf@M^W%m_dT=8kR(!I zEqNNV>RX%-%U&;fMny_n?>U)IxxT)p$WtccAyPPs#S$UJp_36rl(JcEQBu>@9Xbu= zzNhmsFP^`^8N=`X_X=JFHU-iiGvb;oA}|4Ebb0Hb@zyq5J@XbIKEdN^NJTn+_#|7u@?GnR(|h z)?*KWm9FhW(+&_PN$`^!6L>9B<6J-qhm?L8nxs-FB{7H(GNS1NM@312wIR_t91bb+ zlswTO5|Emc<71Qzs9e0K?F<7QF&qvtX!>#;oH{}rq}b5+sK5Nhud}Pgmig&je);9s zjK*UY%OzJASN!dte4qdQpZ*z9lJnj3SDc=ovDxf6IX>dsZ~rZEnsR>cKKpOpvRv=@ z>0kW?uP-;;y?>wE+Zm=>b8~gYdRwBj=FXkF{Nm@Yc=+fsb<^V}V`e8O)K!hrnkdQ0 zi-IT$_3v?_*_S28SXQ^Uc%j&=mh7vREKBISpwlWT+3mK_daCUrxFXQp+}yJ17WBrj zS=>_9Et6qJ_UM?|WEdj5&atcZv@aS|q!BVgNvN9^=N;Saj@!k8^>W3%yJu|IYp$;@ z(Q%4XHJ8yI*H^rF@tkpyB81@b>IRV?5yugoain>Mk}XPDBIOwrDf|5%(=`~Cu-ole zE^cw@gp>K0IMN56Z~(#xAwr*G9MjwIfp-WjVHu|n2U-9cg&1#d0>&}`vIL0>2fVd` z6$3CRiV#y*l2X;)Cu5lxG5_s9{v$rWTkzn{5wmX>{N~Mu zebsRP?is)LyFcLX{opZA&j$Pt|HY5^U*0~)nHJ~5O<_|Rwv8ptV*0Kp8RpdcJ?f-j zkZ61xT12|42{lksA!Q6&F&?HgZI9`~&*pp3T84HJz}axyunyuh!dXEw$f>#t6)9ZT zQSE#BYKPk|S?&$_(LHW96*sF5k(Ssr$CzsdMMi5qkydoZlBF5%u9xJ>a6B3CZgqq6 zj;`z3ZUb;@lqbwaDX%UU>^p}SiZ?G`AqGbXDOj$SXb~!)E^k+CHz7G$?JKIbWwG9| zTdx8`+FPKud?w=o%Byn)-co!tVNU?Ptm2&BZ>bj;%?cSy68ERy6|#%M4g&r-JAOaAO%|7Y&pIpOY6 zf!@`8{oNZTqXEMrWjG!&nM@cA@(`xd5n3s#vg3NWBOOk;zPzEfnqj6H4$f(+5Z@jY z1xd2Q^`5S45yLPn1uCKYaMSFXCZu9rN0ul){^%juaKw>YaPR(I_WPRAbjJJs+39q` zY&yn!$7nd9$dfS1DoL8+f}C{X&q z>0bUgfuTkN4TU8C|ApxAGDfQNW*u^Lj$fZIE{yz_8|AaVm Ri%9?g002ovPDHLkV1iVEpArB7 literal 0 HcmV?d00001 diff --git a/static/imgs/head_bg.png b/static/imgs/head_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..af2118726ffa8d8d7a21dcae3438e864f8ee90aa GIT binary patch literal 129160 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

RzR}?nB92|eYGR_%H3sk)IBQE zmT4LE$$e)Xcqxzd-EDZa#}ZyWvqlyVoC7+`RBS7O-YTaPK!3HdQ))n7FN;E~>n9F{ zXk2Mbu;+jh>tXCOAEfeO+OkKD$Ku%#O<8ZKzFXNT>VvjYrvdki*8}aIP z<5ZFsh8BNTI7eRN=^3F1+!Q$G z(*~Xl^Z_Pz)?J@-gWjVn#Y2YV9S%-KVB9z=55F1y3C^mq7i+i=`cVTSJgbd}!R>a3 zlj+SV=xKzFp{h#MR7$l6wf+kogmai+$G!JMLp6W4C`HYOuXV0*H@za0K_i;MuGp2l z?#ZBK5VQr7Mi=P;UO8w0A449Q6Jg~#m0(ncD-Lai^^1?aMpcxM8r>nIR9ZHqV`ZbA z^PK8bhO=KOp2q9@!9$kqbn7bpD(JFJlDdVZFDC)&`zi=7khc&bp^e6y5>}tm&2_G^i|Q zP;b^^wSC418b}QJBrrtJb)8j3U6CY{9?EfEeIowB-nagQDW~FwX;k>`JT**Ex5#&_Rpg8W%}Mkuo$mtcYxJasb@DQu z7eg0(;wf)W0S%IIt0@neF9yD}k7Ltji>Zs5cxe$y-|N85%Hy_@=FP6xg zhc~c44uJ%duR656t*}#iXf@t101|FU`E#IHyWF2R{0$nqAsuKny##H%Z$tWP#6e)d zqcAT21ZGA8C}~=rMB4cc^a&Y#!{->!6aT*xTfoitgz_~3RO>GfuYTW#u`7%AytdJz zZmF$nCs=SGLD0p8fYD)80Y;|QvZt%36>AqDp!+UNn*|DM(B7&-0K8)AeqEJYN)cLV zVI{W98lzV6h*i-I8pv2tMV+cGFYdhn>rEzFCu)BVAVK34 z#tV!ifLBykiDXCtiQqE6&#F!AH4)`V2es)^AOSFz{O~e@5fBQX5PPR&tGs}^gtj)` zVVRl5#={4QK%{C$Bm}N{4>50nxvJVkz!1sSNr6$mg+(=*o7Ns}yl_X>Z=BXgCQ5?| zH_56tw*yRsayMmGTh2&k$f(;UzxOC6kjUGU_@VvDEefYm+2GoLzHdey8CQ6fQ=1$} zkUj-hHI$4+XkvCK|H@?R1pBN?l}!jIw?Fe=sJJk8&9O^qONMG(ID@^3L3zuLtTc+V z+cp147RxChy6cc*@mY2&2gS*X30NTr^;1!w7Z~Ro9ukc31xQ4MF=Ryc0?E$SqJ!G` z^ke8wH_9t~ayh*2gzHK7M+M4vfJE*w6Wue47*(n6Q8PZG5^8{%3F8NJSJTKl7w!3e z^b`=GReQeCygcb;1)gaIt~uC4aBtu-C^BUB4K)L%HW3Rg16B zVQgqbN>r4WE4lVj{U(e}I~#r;oF}faG!W%QSjn6Kvt8*(O$*E1E zZN+oK>mT93G&0mjVu`R7kXqRnT#)WijHrNUO%o zHFE69ZjB&?dx@9}F^j!dWDzy0%nV<#WuI?52uN;b_;u7p?fg0%rB<+>)j zNy%WK#bqVkqpM*MPC%=6eR31prAW9<9Zl%^rEBD253qQ+TME=^T`N5a18?`us8Xab zz35*q`FD6~QshY+ zv>;Guqo{e&We_s=!9825^5M}HRY&5XK*O~v7mC{K2{g*E?r{v@!n5d+`y()Msw;Os z(|SI%x3VK30yGuHaLR>QB;H5j7)bbhcnZoQ>KqBJlcEu6h!L1(L?S!_(d6t^RQ8dGh+5{l zs^-+CT-#udy)Pg^$WS0cG%nH`vnrldnCf-+^CtadyHYv_KNI~iBNN$E0sT@GbyebZ zCSUWO@TqlIqlW|<(xIbx)1wF^z91s8ka`=GDxRk`URVGQ7W~L;Kniev z%6ZubhVQ&5#VG-WmB;nH!>zo=61wPCj1N8aEswUn9zVpFZ@jF)<5%FCgKdZT7$U4g z@lS4nggb7~gcRlF!x<^ZPdU#1_Rs(H-9xdh6s*JWLL1oR0hr)WG$RFy^N#3c@t;9x zL40neNE(d;0|yRL9`HQ*B2XM3P>d8t$0Bt|ef{sEBI!BS*a@DRrbv{BYXK3yt}^81 zNrZt0Pn*`EytJ%^p7amCM_xI(+p3}8DDm2^L9I(ibJS=LqQ00u_V2lJGBWTV)sSp7 z$Fj|8<7Fx#?W;m!@@_#}%3Ix?d{v)ZkqI48c>1kOuZ)KRSWWL(qhLDAo#UWrM1N9> z77e24eG?^xWoT;+xjrzEM(;(zAxwCg;c%+@^j*>Dxai)L{Un1o&)PSqZpcp)-9e@xkmB1g(lIT z>xg75n<{{@!0bMdD2D~lI^~Re%+E>pQ_+YVuA->C^G$7P@USVKuz>v;(paQmUC~|3 zZ#O}mE{A-O92I#7ta4f1i4wV6KsBg2iZt--Lngsf-6ef{H6@D`=}Q?G(We9wU%7uS z^1H{5o`Sp_oey=ow!16mLVH6-d?=-=Li38;s`Aw0m@21)?qq(MC8$LKV$@8P$yCir zWnY!&5I|mqC6;j2O#+E~RBkFD@#SmwW64DH1mz7Rg6f)gkW_iRAvV_HFWdl$xbox6Y+{Qeqy%OCp!BraIwmyi7Z zD{$?>K49%q3m(j4dn-#vC@1aPcgU$|{>q#QP*tt`c19#5L5$iWKv3TMone$QWd^hx zssSE^6Yx$CxR(1Xxe?XmjHRgXts{s zjsNIvCH(-=iXy9}_S+;q+nBW$%EhQ$nBjp1kl5>Nt-X~w1mM8~-IhA-;0d(ccomQ+ zIu5K6Hn<`PDLyCEMbyEm zP0@u?)TWF`JQheW;d%uU;eAbNlYoSWgp4|tCrYJcgCdetCln9Jd)SDUIW;6eS(ozR zKv1oFkXHaCtOK&sEhMsJSk}F-!)p!*7lPRO<&S>QxeEA-<&F`6>H^4VpwH=nyEtyC zywfk=0}}pDQh7{v0eH{zDT8@OO!cccMVA42W=lSFj)Xch%ZuG}!+!m~eRQOYwGRuFAh$=MuJ+z!&9gUHMq2n7$n21xkfMpU|) z1ftUFtYkzv@{~wdbc$0p!yFE@zBtpdGfA^gHR7+ewdTBcjGC7py{y2`UV&>5_cH;B zvP75@7qS5n2`~^szC~0bz=dq6!#)y_P>aWYc=}l0)4Xi{ooVF5t>s>F=wM5@Gmn26 z0PJq-hR3R~{J9jX4To%Ojk53yLpuNfAOJ~3K~!4s`WXG+(fG!l_OYq}yl< zlLXmx3cqh7z#}p;z*Rdv*NRQ-pqQ=vuByLC_>Y83OGf5?$$(NM1>RBme0o~d#EliBJkJA0Z+kks$`Fl}id;pq^?pQxSE|I+V}V2}^ydZ=Zd7}C z)b<$07e*VDj`$Ns(*zO#q4kL6P>HJKkqKIkWejz4zQ8FXA=)EYO%zNMNc6r><4P1Y zQ3vyk2r!$%@Cd}Qu`NrRM(Rp25>E9*=)AW$k5vX)2VogU(=g9#lFE^w)F06n2RAv# z9V$<)WlPOcAp8HaNwzL3psZXoY8yzz9wHwg0B-e^5#5qGFbO0G#8h@z4e8oRq$skT z1D{7N8(~B_H*{~iic|sfq+3~zfLCziL4Zdd;}e(&Ad#RT@53$f9hfVT4H8X8#}G3b zao^u5AVCEk-vG)$HNT11-Bpi?uRJ%R#EBN%I@#F+Ew}AZw<4WC+*t9`xm0J1kvz$4 zJtPvZAMPKrl2gn{-R_%M0JqKx@%&WdcNNdx8T9ENoxdUHANf=;bN&r4pLkh;D^}pz z!>vf|^2+0LK3@beZq7Ahro=JGuhG%kp-x-S2?shIfN#j;Bpc>1$z^?JHGSHrtdU(m1 z$nRxD!t))<1z117i)3fHrcdCv|euUQ!{96XZ)ESuFZVO15r&7SP+;gRhl`a* zhPKK(v99~5|JEEG9C~G~-d9no%qz`(-v<&~<%*vecf=@uO>K&^Pfqm$Bw`Q3I~cX@ z!=PCs5&-}*+4>F2zXt6oldXr5FRO7$?A-tfd~N~>cqDrJ-5cri!go6|LE2P#@NsV8 z$;Hz=+A~ZNEEr&7d?#ojIwSlZY?MVHTCM*XF;nybW8YGm{0@nFVgh*0P3qOC$cxJ_ z_0t&g$N+^$G54tE6Q9w`TXY?*-IR7Z(=Cg!hV$(0NXP=2y(iiy8R7|%^8NF901{1w zLsg@%q|nfeWd4gA>ahWEQXm?bzZ=#0jFKtR32z0@Q$}MY&;R zdSjl7USyu2sy-1+L{uUpeRpy9?(!^V$7=$E&dmVe4dYutBE}H%E$CjKgDwzj^Yv>+ zaUusP#+J<<`3L96D1Q3+ig-()EPLq&0k(eU&&+LvKZf1YdFLdrqgqSMyGp{|KjfaR z=XFHh7SOzqOZNtJ@@LoDTK>=%Ao1vBfBC}iu>#i~?gdDkKHuAyoB|T=U``pWC^-X)LG`iukS;evL7d zN7poD*}qhR_=^%2R_*Rl*aJUq%-}IhI8+XU(K1HWlaaKB?@0kGY%FO`2YSu5wFeYw zdbd;-kP0FGTZ+mNB;LWYn&P}hIGp6zTez3KSKADrlbK0R&6S40Ro}~ zPI;VpBXgf#B|RbmsFJW5X^USwB?QK4SA(0Eb^-}RGI;WIN9tVIy`|y0QeH|#h!m&D zg6_d^Qs9?Gppy~LCB%J_5yn0o+{2BfwUI;u24zCpC-B^gjB(J)UDE!H3uo1TRBg)* zepfVvQFDkke~+qEWL92!$Sh8GFIHb#qFJeD$!~PprbEM>E(sivM6GcO0A|BO0}}E5_$)eA-zP{=P$sK4eF=&aJ697N zCmo6j*T}6vSz~mF$J$7y#`}Wq1f9eRhjPrw@sjjMH7Zb{A_9U5FkR@`c-=79eDz)j0UaITJlBXsC1EzrM&B7U z3!^&8115vdK{yh zF~ZxEKaMEM_TJ^WHGXs&3(|0WhH_J2NN|G;Aix^HybItl>H|kNBRB>(^PQq}(eTus zV*N;asc2Fdx9WF*TUsE)+^njoGx{8z2!m5_hkv{A)(B zqB|waR(i5^T>b$PH)tFSJCdzQZNieG6l|1#&G+Qkr%CE}4rku(t0mg2#BWC5;v)+n zfOW==cDI3n7v)Ga$9D1mYe6us?z(vmoB z)qw=gLu{?ia~kdiB%;JH@@OhY!a#)Nx8z;l$sNZ90bqkWHGdYe;;52RiHi< zl@>CmTu-%kz}oZtI`(tDwUNR*3D;W7(i1!kDGPEPTo#5S<1WF(+jnns+>%vph?Hb_ z=7@xD=~la3{*#OCuFD_!^2wJKc-jhF3nHW@FMj)0($m0UwM?VFXI~)7!ieG$NJPG6 z{1g9;90?zUKfgR+Mj2rR9epPaxshzO%*2ehQskmVh0x|ZN+FDhfi)nKa<<>Qq3=MY z%0)WGXeXCrRk$nofv}p!aDl1v!cF5;kqvB$@<3RJze4l~*@s{r3FYj_oT?U9Z%0s? z^HECQa~|T~GkTF_{6HyyaX%H%NTRpuQ1X7wb+mBzVOrH<>NQ}F_aSP6iJ%NPsbF?2=jfhCRW%<|G>!3D;rvT@GZSJFKjQU7?0IzX# zMmh4a#YQXa3RM_mCYNUa29<_hRq`51*Z~skoau!I3Y;%=A>%t0$jy=P%!B@iH9>VV zj1hL0IVkM@m628A>Oipa_ZXXfh7pr8nmmHX->J%t@&r zh~_d^>yqECGQe}6eGV?yFsJ37nYwaW1F+D~?fjq4Cs6bxsuzV(9dsXTT!0`@xzJw% zw52!)VR$zc3V9V;uZM^Go40S?CWufnWBgv{q3_D1Aqi+K;a{8C!N1n__L*$J!V^$^ zUg|`YV<(my-%^uDlv)#Ty!p$HIcA)C0WmLPxs>Wu8o{kiCGdDfi z0S1!I*(8%*-HMDbS_U8<6q@Gmmy@7|x&^a!R%)Y;q%)#jPUTV*P(P2q<1WBc3lDoc zQuee3el|b^g|}`Ip;56j5uvcNw3|e}ubEaSjLSDs5-Xb2H*iBqbUEwyUJ7Xf2_zxo zU8J%xXDatq=g7c%QF}arz3u~OQVldHCk!rZ)~H0%3Yt0xp;k;H$HA!dm97t?PHI-C z2vmZtpe|9-=Ez>X%BVw}2T_}Fb|F{dp1yncE~!x=LxMJt9j}){4*+=5y%v?I>0fA# zTmU3`xz@rVxMQ*QAzLC}q`G(C2hFL^yGM-$EDs-awe5BE#B&3B z_7|RCqnA(o#1%Mq9-eb(SD!5#fBD6Z>T-X!~l=oRgSaZp1eI9qzl8kkj*q|AqxYX=C)Ypc0S7*_S9 z5jkN5VT96sBYF%g;1LC9^oiimbB+s;K=L6B86_>N8@AR|VfHdWvO6?S8a+e~OnRMd z{fs|6s7GZv^tvbaHzE>Dz%CPwYt-jQ+Sm33ra)D+5l?;-2@+L|p9dWVksWoK9(xOy z=QMF?#55KY{YeZOGj>VKlJ`~A8E^8Xd8$DjF4{hjkh+xDb1Or(K*F0Ao&yp|Z8{Z^ zxIX|A2f_?d9yA5?QldD&4kUJFvfPb4&MMv|>ROhz4ax)on4)kp3<(AS3R+5PkJFdI z{seIk^bvJSKMy2asO)Di6s2xVQ6NHcl0bOe3nus8y{6#^@Y#R(?-tdxV_g768Ah5t zCCUzmbta6@D8U&ZvEaa6fMK>?$O3WYA&d6cE~eI9AAs{WbxYin0P>kP!RV}HQ$!@t zKLgJaZ3`9oKof{RA-mtceVafc)+3UzQ(1rcT=^xn)<$VtZy%Op=B8CNt$ZoNs$((hfTGo{d2^jJ_7u655P3LrB^`>#NL5eiQo1-;+OKeLKAxQq)Sm&NJ)cEYu5mXdF^E&tJ|^G zCJcFj33-ZZZ}lPJiCoyGj`{xA8dg_WL_G#yU6iWRUck2({rH|N$4UIQ5zy?YS}83ES- ziMT(gFtbB#Vnm{V#QP7Gq*@V)pf+6uBm}Ww92BL=dJ+sEk-YZpOt0cl>kCf{Xm{rp5k zA`C243+vB{p0h7D_h?Nv(!rN+`Lz2?V`cVS8g%$~dgpagWm4idf=jq_QOXrL0EaeJ z(knY>3Q;nPNH9{0oC{F#>dyishQV*i^a(&9Vfp`*<(5b0_rJl&jCu)6rR>S3lxrlb zqwkWv%`}yaMpQW~Gu=O6kpt)k6@ZnYM7K-H%ZgM<&&o(z1Bv)zSAb%}I-`b3xlbU( z=#+BqN-q(`Yo+WQmi*s=4y#?_MJ5EMJld1At%rzApjn-C5x|-9*jnaiB0ZapKAMuX z9J*`lwX5x}!xMjisQvRl15WeWPk}NNf=oU#6WYJ&Fn<~fuWu|h9p7qgzNB$=gu;=O6J}Lf{cDtx9&C%oY*w- zMdIBm-zfB~byY-0XSrK(_jWE%zUWPJ_8V7-~etS6*de>DzV$j$C z04qnLfW&QjFyFubkmn-yErG`9&-AYmZF!C6o?kRZFgIKDo()b&4g zVXw6e4Cn$yI`$k;;!kGV$X@x2sCtnz2hqSvN_A!cfuT*Px!8LW*;@aH2T z_nvcfDvh7Po_{}f@hEF>MW-?pKT@gY*>>>;qYsOS$H>cXWwkw&VSCoV5bIqLiOP}L zo&kXfP@DE55=gGkI~c_t{UsKiK8XGN!+AM@z$US)nnL?kpOByE4mo-HbFAUYB5 z2g<_g0x9y)`!%C^(uJj0c5;TMZtDN?WPWPu>Xo5>B2jcBKtx1VqM}vEoIG+K31*~M z6x#g2Mut4j0(;!2OWbS^?NfhpZXj11druwM%lCiE3YI1@=NDp^VtC+%tt5jaW#XRCv>?uT^S~lPiEdP?Ex{ z-A22H$?iVN$X+50kay4P&~RCvze85MXdVJpEriR{Y0Z!1r4}zY zauh;=RhidXPZ^)fj5SUrygQwV>!;APN;SH&l2S#rk*M4h|DZur>I)i)*b5%A(X6ZK zN7}D4w9E6@-!qk26{@mytaZJHfeJcKDl77dJ;!2=tngHol{L;2sSG)P4ghu-mAHdc z0==IDBtUJ7Mls>d45|p4XN7@+Jc>OaVJ7J~92Jr9ZswL7vH=o)*DTU^Xqd1dfY!Q> z$N>J`gi)u!?{(a&O8liq`!tYfj@4-yzXv3iyR$?xbNYEO8U$5DLS?cC=g5qHVf=dL z*1D<@4dZc+DTVtX4Ryyez2*|F;(?$eM+)4QhQG>{W<+2pu>KE$dsU3XcUa|%YvmQ7 zMzS^UR8gnQXcoXM0J7SlwXv#nB;}_l17#C7i-tHR=T0pCgnCr^$@CP@sYlG?!_{NQ zD%n8{Z;Ar^Z?XbXM(PSI15GD4P^N2c{GoHmI|Jw z^U5#Iwb3|{APu1_qp9k(Q)$V#izXnSK7TGxPY7=$@pYF~g`sY4ozshn(I&uui1WLE zh&JrOaaHa@QoOtgRZyGw{#2r@6jhN2QsDN_McW~6Ag0>ab3gm8wE6@n=v;}(W#<=}7od=SETA_l#Q7yCBDE>{HH0@YInZllZ-XegE4DFf zva_muVI5%@c-5vjKS;I?AOX%f%8y18XEd!l0upixOqIS1BnXIO&BLg1FY-XiqM;dA zTLxEMtsQzIK11U!awryFHSUE)PO}h0g9&T{?+@2_ zhJMq<`~+1)x^#{pdMX)G*QLDlqBgZbn$8#PVVwofHH#dB1~RKbT>D;+Y$sGxwdOwH zej}Nm?kt{xcI;@g2QADKu$fZ?nTW2>vHzk379jW%V`siwHI96fQHlBv&-$0lmH2WK zf9JicUNS3~Sc^FHxQF9y2?6XI^HdK*cJ6@?C=}_4a9%`YT=^bJabjRDfQ+5G-kpE|cd&pFyZz+(TAr@Ld5v@a}l74)pCG-V-$ z*LOExqFE-Jz>1EV44(~-2$k`<=&QQ zn6Ad_DPdagmEzt|tqhDToZS4bO>z5PC{y(*@DEpVF*`daKbJgmHN ziN9+gVP%O~0v6?2q44H+T?zJT3?M;Xv%$+@m{v~t30=Mj_dOj*fErOvv6QQk zFDtS}Jb~_*@s8b|WK(}R8M@v^JKdDu|cQe^~$B^fpR>HDJBorwXW@>8F2_TUz z8)jadd&(q26p7LL4n0Zw5Vg^iH6!=Rq7q@O*V#6j6MY5%ynT{%wzR=ncp@Duud~q{ zqD42=`8vzKs&GcgewI;v_x2ruCx@8@1#s8YH9N~Y6GZFGuXHAlOqBy}*G_}?;*{A{ zYq}^pUSsr@VM*w8vLu~S6sL!bR{Q$MQAFR1y?uK#FT1PP8=%i>Zk`+Lv%c*5Isd$G zo?D>j9N8aWvHytEtuf8P$yQ1^l8%p{n}U)W|3v;%I0(v#lyqX{&ED(-iL^(htPl29 zp=)uaBcnd8Wv+z*33>1p&3GL()KhVi+EmI}$>iLy#iNYqh8dMc?MQQ( z6+h~8E07Ru3h$K;lDs48q&FiAY5G*H7vr0YN(rkTxkg*;=KEWigZ9at=sn&2vw8 zXnitDOt8t|X+y(0Lz7!Aiw6n1EQ85=f<*f*kZAAmtiOL&Z4JX;pSB_bjGknl?S)EN z4a*)L=wU_^vd#n1#0k3l@s--V8Q+O&J@T?k_LLm1TnHTL>d&XExC$IPItkZc`!5^@6xEY+HdE|zx=XI4&@mT23^tFIq)j~o6S z#Zdxb)07e}&*fk90V#6?C@3zVTq8;vAR++*n-V5nDS*V+yq^(as7h7*T<1tc-ys@8 zs&vRIDWNaWIU5lkuO^p~4?3)R?F862)8T3efUbrY?rrPiDMayGJUiy8-ZDCO5s7>A z78IxWM>+#~)gsR0Epv>&haL8;=H|HpKkLiRO0PfQ2hJ_fa}N0ru-JdZ>7D@+A*7NX z%t*iTv?BK_9G0?yWRJ+Utcb**DbbMH^HV@TK_;u4@eznH-H0#P!m3|@JW8H~ODzM# zsVEAl!#xb2QeM&#Z7M>qoBvO4u#$%}-{FX+<$xy@j(Nw@5c7FS=2;Oa7>S2;tQ%=q>3XYAR-azji#c_>L9A0&sUUkT&#s!Dek8?x04du2NIpE zIe`Sj_;;wMlYhA7TN(f;DeXO6JdRW@we|~zt&9jhL#CK=BLo^pu85ftb>?!6iU4uU zmNx?L8X_EOm{;e~0OACxtlISPQv$y0sZCZjNqp%;AOZSJHKa@0#Md*_CT@}S9>AVp zS2hs|ZKing7Xpd%s-Y=D!*pRKn=BC<4X$jQpvvg1!<=WFfDZ9!4l0gucC`KsurDAIfaA^Ew>Q81 z@+X|Ss?gTEgWePSk%^Ff*)f}7Pv@WP4{7;-)oadgwA7HV6&ncgp?q(ck z1|~az?3V0Y9qgBMcF)2jYyX%9#&RLW7&Cp{6#hbL`^25EbbPZN4Ke zH4i+c9(52+C#S(KvI2}!P7NfGqmc|X9p6jpkU z^UeFnkq96WHJ|Af%^Zm+|C&{sK3OSWCT;R8u0TTNSqGiwS%5?=w#$b$UJd%QV>vv! z3|(R8cvjUz1Yq0BNtXFPz0OVdSX?A_z1tOWq}cG`av&6yikFEw5@A$Eq%f#W0VpPr zFynA}jX?1x4Z=P*$5?QjpO{gXj+{;}e%=Rx;n)jY0*yOa}m?7E7zaFCcVlGJ!d#x_0VUS%pc+r=N9Kj4Du&0`0qL8 zi!Z|QpcLsHk!Duy6rC~(`hd0x2Wxe<{@XwQQ?7P;U6*ib*;~#zry&==OD{_ryH?d= z_0k`l4|O5-WIaVCq-bP|_c)56+6Kj{VBNz(i+epzWeBfhTf^7ss6^>ij)&4 z$BEVNslmGsAo#_T4T+MkQ9*M!^#ScWcZ-`0p#KR7A58V*)!{C zrAK15;!G)WE8t(8 zTHRYw7q@*Rbml#{Yw?d;|FzQ$9QT(?CK_Wm+U9|DptS zI4{!HtD-tA!yPp0zxhA^ZvY8;D+&}ySjxsR;UZ(YXdfHe%;{(ZbdZ@j1VdhaW;aND)yYo{GJq`}gZ5r4*Z?`4N!E$Xv;ZviJ6 z4t!xpBxd+uz+2}*^s<;M8q$4&$1rQ{FZaRkR!?jscjnz1ITGi9#GRFY{TeRKi-AN( z@r<@e-nP2YiW;JO3vZ|zf}IxFe&dcmNn>{ys1ryO$f(LqQGfv6=}i7+bFYe08tC(? zTIXc#MnWtT7%|YkNO-JyX|v;T7>`wr%_6KTkgzkcMg-(+$sPj34BW0}$sV5Zd=}+Z zRbLzOjkFwtEuuVaJkI6_kXhNXu$@VH-OmAu6alKbH5<~EBfyQwk|zkS>raCC%niVZ z6k#2i?7Z+Jg}iW|y!6sZ%+<*K0eBMt#M&;Ek+i<_z)QAieeewS_{rvkpe;q!JqN>a z&w|?Y?w3DR8F0+8kWa_ilH!EwDFGxB)a$GdUmF}G>mPyII#+rJ&+eXMY=ZO7yT}#M zyG6%ko<`0ui(nx6IvpC>U*dJ?LKlByoXfCxPP$x{=dSZrzrV@^J!d#R6-d}|xN1^A z^-Jd#=SK|gs$G1(f&7dqpB?=PAYqYwe@uKMI#`EIqspA>)upH1{>{JtuNnWu57h5q z8u?{VFMRS19m*Ay8&4$*Rm4ycR&cV1r;bLns(!da=x};ZvzEnx&MFA?X%ErY6BZEB zUNs6!%ZX44SI>(W|Gs)BO>l@~wi^6tEQTRuB^BZ5)BB<5!y~PTL~LfznpELwA(q7}5EW>phrP=JV&48)(XB8i z8sr>Tu4#Fb-Oi#Kzz68NE5*`C2YF|zYxqToZ!Q}=^-cf>26eYMxgGyA9 z6-dY%ou?w`GN*V$1v1Y{P-*7My^iOM8H^U5_Ti{M^=kE6?IufP(J#VAk`o@D@ z9cwotfkb+dUnDO?^{EIkogis|R`i)SvYaaP+;hO__O6J>+K^876nQS9=it4PeF8X^ z>`i$ZKtt;|BN9#PY56Y4fo|?pq=n~5+3QFE07cv33xMd&p0qp9K5b9 zh{Pu(OzTg~BfR!+-@QvJoSbyA9;GvCFr*M=WFpGKen}@($f909XlLnHO{9ROJM(G~ zI0+m5X|zu`xp1R(%(IZ3B0PB>psz$>jUyAZriV8V=r8f`#-embg&5}j6HuH#9nkQC z3w!xTt};Q-8ICVN;_?l6mQP-_i_h}rpYo7%=g(!552LL`R=0cfe+; z=Pd7hchf*(;W?%;rsOyYck;!RAK(hxl~9FiSFLG-hk&DaFmHN_C@Lp;ri$mq+zkM!Iw%Iw{0kU%13N3Sr~_BJw1 zAD{7e3P@&>BD-gkrs4C9=ccg|yx>xFn3s%h2f*c#b`M%nsb*umH9`X5W04F38hCio zCjy2O_Hs*Y8g9ZJFX2`K2*3bHuo28kZHi8^(M9$iiSChXjfQj)k@y)Z0*WHA%4Fv=(>ImemBA0>7llp++%61T-9<= zFo68^`cfN>!z3$kV9tzP@MTq$BrjNrO$NT?^0%bm=&YFB=lxgT8#jdezI#O`6=tCL z%L;dpk)>12k>HLYEx8;SB|k|yg98LI3-^8J3~lz!&Ib+bDjXvB-0cnT=n5pFCq(aH z7~5|i-rPjRqj1h>4Ml6j_(WF&nDFH5EGg?WQ9%h@h+H2j8D4*#K zPhHTzs>OQJ`Ad<<=DsM}&=n%%E~}SKIf=>43Fk*PLJn#Z>|ZHzdOJ$MH|<1*qP(OK z^tj{@zC1tWRYC%qUoiPeIw_0aX-P7?XfW9EY6%r5TVi^@M*L+w8%krE2Pu$~V+`S(5rEhCO<6ENmhy~I z4lF5^_AoQ3glPf_5L5%aT93j-wa*IGV_yJ#Lh(hj5-Gk?#8p)Vc^g&b%PLRlv+}wr z-0ulJwca!kF-NnM-o9U|Aco_FGgy5jcFt8l^PC_bR`;NG$r#%^H|WP=mA-6TiW*kJ*d@SWU4$~^ z=P$sk@4HjKm5f^Vv-F^R!#nzQZ;9;vtJ7qHm~-o!2hVaP6lJtr4U>g<*X)sz)HXJ{ z%xmNH7yY|OFI7Cjn#hIBh~|uPD#&1mqrwU=aCuZLq72Bx+_eeN-4V2P8Yv>N-2-=M zl_AbbZS|ZbY7YkF&iY$4%4w|+1P2-Q|Nbq@zh+~nkPkegX>7lKeG{b?k)#h0ojO6~ zpDkLgNInvI5nb5^iiE^E zL;`j=K;m!dsw!`70YgOcQtC+U@P@U+Zs$fl>PMH{po<@PiQW6GFT8kUe*qu7WO3JN z{uM6v-ZHJru=^Rg`O(JjMF0-hc=8Fpja zJi&}WLLul5vMPv9P>=?};=!kpCvf22U`0qed2!|i41fdqvq=PBL%f;;jN%T@uOLER zEC2~q@=@Og8Fu2yyQ@ZCGKK9WixqN~fbDTiGb{lYH&0ki3I-l<<_M76pE6$!kPO^S zpAJq|gS37}3v}~76{`a4opT9ZvdYjhM*>k7Uw6Dm-ulS&*M>W2i9JzSNqCmOrC}UM zxBD4Dd8jO6M>+^3R3cRgkwsBy&y@qK_8MaMG#C9m*SPX8bdJn3swjnw05fbqefro{ zo1%geZYMT&DC0J6*1Nt7B$U5G^|}QTpKjj&77>XrnIjPqiI~S*CR<0e;?p6Jn9{|Q zt({7eK!To7L}TjYPANVn%iWV62)PnKLd+FKK;vg&2cXE#tEM)UH@_GF=xirWwu>)$ zfMo=av5S(U@OT~YB|Pbof{JK(2%Ac*4hwTBZbBK!kT>3NRnJ&8d`C>&gCs>K%ER!8 z>u#T;+<2Xw$jO`5tm%RTDjp{`-iKL?|A-=;m3$gIgtSGkO3p zkX5Rz3JQQkR3bqq#R5xNc?bq^DtB?THCGzx`Bu#(r^@q2Pn!Z`b!K%wxeow^ok%YV zmPfJh*vSQl_YVdDcJ6zEh>>i40!Zx3fAY(hWNRtg8`7ka+d2Y2Z`uJSmOdSn&d%5Vx6bF;Q0CJejDSv zBbeTDLuX8qbB#c_EP?E4dW%45d^hGC-ggwpK<zB@H291jK@sUij~En{ zSR+aum5WHk=O_vL841`Kk*fxcF&eHhhX}u+9WJ2885L~xgnzSr7(jwwT|eV%ERdl4 zoKXpOzYb$W&z=!^I=ejLMZo2{U~}Ft{K2!EnU`3O&;HT_O4Y%8E*avKdAd!#s6S!~ z7jD_|v2(Nexg$L{y6fh=|E;q?;>63`c9Ne$GI(XFgd_6fr%yMZKYhCS{`Kq4t1KoG zKq9D3E7fNh_N77>}C}H{CYFyW$b||=}HEBT{%58u|^|N5Egj*^OB&@@Cj>~{VCs)!8sYGk! zJ18->8&Lt6#2+2ltV{gmOMW(#j!KP1Db0%b=zRJi+9<_Y6$;Bf6S=iS+31P$uS9R| zlXN8L9ZeCy5v4&XiWSEdmn=F+C;ca=3yk*FVKWZkNgzS~cY5L(F~fPodp8k@Ps)){ zL_$CU^e03llq0dYC>G0l0*RCmm_Lnlbk;>gVhbdAe=nBf`#>TdjHK__`}VAMa()|9 zo&zI3crUXXOdg?F5{n8%VAr=`!yFgGGfWvtxiyXae#cmjBOqr(U1_0(V>U|R+(OH` zZ)%dLISnK_$ypHx7{fOXan}0>sZ&L^Q}#tc zjr;s3Kt*`+;f0~BEJq4KhUH5HphzlgR#kI8fH{(m@_;sS)bNJw!wmEpCCWjcQS>Cg zB!d$qJ>1{?^6re2S&JsaxD>AyyQr}4)m9X zlX+)FcS22WC?*%STCEzJ?Vmon0ttbFHO~Ogh0WYRikbZjwJFx5`Sdcnf+|2DkvSqT zD#T^4p@(t7Mop2}liU6ZO}!N2cbbz7`8CSq`zmmPybBsi9HWdNc}3NyL+_|{;<;8X zMso!fodK0Bf6sd(YEv59yFjA1%!Q5JIP(sh0bNB2o*76C+7-rzy+jnK_p~c@od*&+ zIA=xJ@dvUR7NTwfkxui2XqZun&BIJ~luLwyqUFT|GW)NZ0nf)KPQq<45X7EqZEr{hd;&j_acP6~Ga|DcO+oPzX!!E9v$OQ1ReJiIv|z`R0NcsR`PXu z870hz62LjD|2+jHjQ*u<(RryeWlo-SXz`9hufQP|f8tIDK>FpEUotWg^AznX)>9R& z6!np8)%wG6@C4a1;`2{?PJR0l%khb0-paQVW8Zn#B}4SRe5RH8L612%o9ABa$4%qh z=pOg9)1Pi2F)fO-@2DkW9&$wdDd#deOouKS?%v*f`0yd=(TIAYgMCI!|NbBU89-vM zyYUj{mm%pwth~IdLMQcLbyp5Ao4Yj}5lJfA`-kk?K}v(xB1c+ybos>s5|C_Ny@J0N zc&hhE2%5kd5s9oQ#GCm9x4U(rXx=r4mh;nK|%TP2M0XYvMSC)LqqyCD+J2Z2OT%Wg2%O15TWyzF+UbCAXZ zN+>3fASKHcf#0B^b?`+UpKl6FO(loC#lNDXcXyxXyKX@S3}w;c?|>WW_AB zf=3k?0zg${q5&YlRcoE4ZLKNR_wP4HK%(q*Uf%V}I|$7STv000!AcQd2P8fOwJAc9 z1Xft%eLBM*3P_OJA#b)CFy{FoIB&Vq#`u~WkXM5AJQ*PcE{-Iw8|Ss@dkSin3O%xa z$7=?qW~C^Y^Q1jGCavaxFM8jBX2W-TPDSZaR3W_bCUYV4TVClN`G`c1k};_s7#V4$ z5e=_7`!?8@>z-6+>x0eNo%9-wT_`+dCFv4sQ3#UESe8@4ohb2j$znw-0B(_ICOK5} zv6O$eXvju-6CxPsP#r)*QHcg(7+WP@KSasYhwhL*`UaWf&H#$I&1-H16yn@#k929j za96Nc16%N{Y=J~88JCS(57`Wo*{ZmwDo!~+QojHs)X$@-hSDALG+b}4J-eBC$xxpA zrKjHc0wj*4`tS1dOOC^H4P+lk%)7q(F0)1Ao~K+&2Po_z{gM5Z4hqsIRVgvS{r~zO z|KINg5X4z!g$M}&=d7l|T}hviGBS9iJUZaeMoL8%2rw#ay{g6~ccOLZ+?Le{gI5T= zP&n6Ej+4*d0*Rd6;Xc+}7^;Obkw*$fo|J`hCeoQK{?!(6qDbSN&n}&2$@j!Dr>u?pXlLl-0I^Wh%Wrm)4>QW<~!dJ`QKBQ#Is0&hQ)hW&5%UX^m< zI#iUxBWbzbQ1pIgbDUN~URqNCE9Xi87mrK8Wd@Aa!p}njiKw9B)F$_gyMkVf$?}s5 zoEW7?^VFezEVU`T38>oS6dk()W&sFDi0UQIxxBAyMB-3CUS#1Oi_=cFW?mF!lOlRE z!fE*pihPcU1Qr_}W~ctSX~mh0zh-X4@o3llhzrz&FWdqcAT#xhW6u9YON=XNaa$|h zswhcC24tMFBe$q|918A)@+lY*f|b`3=DIhKKw%Am!J=%|o#fT5CoqbUVDZE{)`eL< zSOw^`zE)O~kX3(3IUlwa1AW_kSd=<|d zqYYtXXO6}F1A0-=#)mw>vg^Len~!{n=tdhkMXU_9fP%z{jG&iO=S)PR?+=_16_GG6 z$sUl#yaL05%x+BZ(Z&H2eyNsm+MTn=eFrjo>QH<=YHuWcf-#6 zV^-?9hkAiDeB?*Y&F1IM;N0jQIoXpRKL!$#7CT?Be>&Qgp9$;=@Cdb|)%&q8yd%xo2sxZ_%_HPBIAL^D|%(y5VeCH&DMl3`S=T^Tmw{eElSF!qr~Kj}yU5<gkSNXkOg&QH&pant=?mvOhf zFA)wC%wbP)F*4>x9(iKreID0%W`B_e#0rCyBX$T1D2zafB1h$h3ye^&1&yyAX-2t^&%M!UK)Xf>Gj$%kTB{_-1d)@rgBFd z$K_RcoSLL((HKT&QW?ALHCyMT3MHFf0wyH2z#8J}5mvd_N=#)ZV3m^fcg8TaR!+ZR zwqE6P$dHdYM0htgDn1|GKxNEA-*?GY^jrYJve!iPk%(wXpW{7JJw_th+?q3@?^c<~bAoFl zAUD4N03ZNKL_t&!NNl+hHhs7B2xvrU%SvX71D;SwcTQaYqO4TsX$1h?Tika-Pn!V;%S~~*y2)@~s+50`@A5ht zNPbTx6nCjA7LA8%PV40gJtoZ_J!K@sA^SJoEUwNbr@BgiZLozr^-m9Zak+t1j{a=u z6q_W-ZD@S+ETb(IaFOt`h=jt)Gk>5x*Y$h2WQ1$VDA^T)P7C0_E8-w}5sYYfipo>I z7#`TLUaK--X`WQy2+k)O7ljfDj%_M0qZ}cb_Zv4E?@ptW23B<-rvUSG^!B!)+K9sQ zYJSv!m0qSwwpJLu50jFiJBOjuy>E>YmFwaOpGFr`)ss-DaX3p^nPC$9nLxs*R0y@n zd)YHoxL?(l=6)E>gL~-|rOIIus4T~H^Pp?4>Qr1H>n0-upf<7Ll%4f)9LjUKwRamx zFxi?0bQ#P6lmbXZ0J}g$ziC%CuZp#ch(ts}vX2CTT{eGWXX`X7dES&RvpVSDJKz)qc z>It<(hf#@xmz{gI9=w^0Z_12V&^uIeeLXG>yyr78!j>DLG{MObcQ^J(AUp0zM;JdBYPlRX#AJ01#0 zC3J^}9Sb~F@`y+;^Q(3g~-d-s;ZRLb(p7+)2s&w#C78(45U3y?db-P zsB(%n?utr~S1V&)GjslJK3>YJaz?oJirmOJ4`YSKz7i>OJft@Xo+t_wb4z1_iSGG+ z>p>C5dI1TRU>tYcy|#M>VAg-{#C7edsB~IZ0EssQ60g%3dH>-(scnZkr{Ovk9(rA!(nTHy=2Th=ezPm_iy~t zVfGqySQcsphUWzLZYkO0FHHp$f-2sx9EnTRQ%TE%m+Ya6RSPYMBcpnrW3jKbwnqwM zPbUD4#rS5(&H%gtB$6&@xe`&GC?b7XxyQWd`;)QtxBy7(Fn3BU*6)mR2|%Gg$_=4( ztLU}%r|Gg1TX0(4q{kf*36y{pkO*qiCjp7P_jzrzBoq?gi&`_P$>EflG$)b8Xv;(v7a1{ZIJXxds2Zi+yf%&$(bV z({nG~ED3&)^7zZ=v_&PO?(S}H-oO8N^V@H~g6c$B9d}pGV-$h7ySe?_KmXGfNYn*| zm!Z53R@o_x)dCVgd2=tRO?VhA_13TSETnH3CJ=`fuf|80miCF0fA10r4uC3)1+>ox#8+8 z9XvHAD3>=~&nn~Fs5&c<;JyNUg@-V_=d9f1VRg#t3P-EHdgVwokjR8`C0r|wPm95` z10C7(ua4pj=PM#Hfdtk&lcebpL}a2VU5eI->&tIgWP^>aEO9z@*uu3}HJTMfND-1xL6I*Ba<9&?02458s{_sXD~i?>N`8Yh=;Dn+#aSLpZ%8WurUHRlbPdy zS*>M+#~DE4HF^eAFA0<=tuo1cZZ>y}&#=q=q>`Ng4(qry5Z+Vm$GL!1d)${OIV|G3 z_jXL`=Nq6xW4ozM>Ln5MuCJLRfrRT%R+s{Yx6XR?R#NiyJpf5iJR`p#sZxyKs8ENN z0*)y(`V?@>^`?vmH52zodc=2AKOalG0LnEQQCEoaB)7ry$cC)JlT(krLM~uL-y`{2 z&Kivm*ZAnnpT9qv!(%1Z`Mb+cTrz~GynKEBxo3@yq-}FBnRAaiy9TF4(b=zG_knW@ z{^VI*H>^h-hbO(jzI-i^&0tay)!)EyHx8KUK8-OD;3;H{Oa+!DgZ~py% z1+{6V8Wp{?%Vo;QR|O=6N#Xf6bu9y$obwI?gGNJ}ivrm~|CB)D@`9-#Z6-itD$0Jp z`XylWLm?p|QR1zD2Lv??={Ek&tK^XsYs3b@rs#$VV3wPeK~^<*v&X=!Dy4VIP{a6` zD93&Z8TL)DGI}Ybz%?LIoPQ2JH<#U`HC+gCE@Lh{1GS8CDDfHw%J(Q` z%V@$DNOVFyrn?o$S<==bOgcCnITDcY4XPDfUHT%Kv!K+k4xoorUufFgA) zbHgy^o@abD`&N8Kr4{w?NOh318n;G~?z2E*0Rk&Xs8h8QndcUlF2Grc@kPmRl-5@*gzdvRHYHZaeT@4jM`<*l3wo38c+>f ztvdT!2Wv%%5FQ2{D*oMh`=CK_d?FdGK*GxGiL+c~HSGv10;51h)&L(>n-CpnFSY{- ztdHiOGzXRtD==nt(NzvnYrDBg1h{c#;o*dbPjmsTi7R`LF2q<8MVA6aR6-!7z_LXu z{5vbXXzV}1_>Te-b$+-g9+3#nba*x2fB1k9WK>d6j>Ma{q&BIuHP0b$dEI%t^dmPR z&tC6gj6+FQ1E8M~?9%{W3_3IV`n=)nDAG6bkJjh|Hf|%k>Q2+RYTR;}cJohNuNb<5 z(a~Gyv$t=$B=RG0VM~GOPt>uyOUEn672F&6f~fG3Id;HHN4un%_B^SXur!sqdQ=GXc1jA%Et0p%5{60wYH zmN<>(aeEO7oMU%xbu^gU8Tlqj@5J-s*{MTFaf1F)!4X8fGkG$AOGH0DMK|p)sUOsx zTb{Iws7(uyP_rthfa*5Z3R|MID6R3CbbPVXckXvoC}iX+z*l)kNe6R>iu7@B(PcOE zvYWrrJm-IK$?Ko;a$?nb#JOj2JU<;sv}iuRhL8HhxdlJBK#zLaqd$CZbdP@Ei7(_# zOU@t6n?GLEK|VEm`$UnO>}lqe-@?)J83k_c?y3^ydiQSsr~myweGd<^yxAF6E`=b0 z)Xj%nXjJWNM#$v>mJqA{3f6N0f&dj)a?lB0tYQwmiz!G|g0tlI?B5_-4zWfh8@s`e zP_MSMx7LmNO;n<_MXp47r>qoc8pqn0ipa1WU-nOcAdgT{7<{p)m=n5^sv1R8n_AHY zWhso&cm@n~tH|V+k{S_>L84d1UFA#U`>OhqAL&*yseid26G*V+qLd`(S&bk83JBzD*nnc!&Aw2Y99JR``A7*i-)cKDEwZHh(t%`6p`q;wdZow&c~*3>Mc367G?Vlsk%mF{QER%X$|ZC zmJ@+!R09)ex+mK?d{=awGbY z>Vn;Kk7vi28%W%yG72CervuLPw>-D%@LU~@=_SWK+eI;W+1|eHT3R#5q`<)5c2!>7 zEKi~D?0whg>U$|an}7ror9)Ol2}Kz8>N^vl2{hOlCD-%1NW$&S?cJ*^1)GtMH*bpK zl)5G92apl!J(LACBGR4F59Xnso+kZ@o_Tq~a#<|g5^pFcbBp@NVyOEg`2%9l+Z*-@!k{%m|%8rQN zsdTlds2d>hKmKq3*LTr?#Cs}EvZzT#eG()#0c&)U&Qa)-v%YWz2qR)(ix%IT#=gp@ z!rL8hkOxa1dU-CJdjR36%1lkAm{oq{{T99E)ZV#a<7$&uXeFacfgou$6o-R|_OdA= zQ3h%#7#h@J#ATR?!gjHvE7u}8uvvo3atN~V)1Yio>u!WRykFjYB$Wr(tw7XfQJ@eI z3F)SBYSxs>Hh_eZC}nCAIKuqI_Z6M__Vs%u9`<^eN$LWL<#f^YS`iUYyOeaVF4ej` zMGfNSRMe`dZ+sVNYfdHV{Fkj%EU!5Yrvwt&Mn0-)ouW2j4a>RS|1$ftEO#MyGWPoJ zF1>f@Ex3Q3dl*$<#5otRL@vpz^h8D#FabPyk2#7q*b+P~4ac~Mx+9s}vQVw&eVFUy zJZc%RZFudxKPdxi}Nu8emQcNzwYpp=iXk>Yx9IQ@@=K_aqBbZ z+V9%ct2MC$XbWfW7y`$(fvgt+PhI?*^k{*OgT4qT!F`+OR-Kp;nNah{4 zGs=KcwA$t^*sF7hdnMW`-)#~1)@3~q97F0ues%&hcD8;%LplHn&{P9Rgsg}=8x#U? zk2`X`>K8cfw4QMODSr;p4y)|PB<1|HIZQHVBFn;}%yv-9R4AgN=Spy<i{+Q8;j9M}eIP8ol?vhRlCR@waitpb34*?{+v>h9#RT70f37%xO zoGy<mj=3Y^kI56gutDH?pBD#Uxj2PneKWTX{cN7A70o6eTATXJapyuhZn zTmmHvYVQcL^AcHwl##7L;e{*J|z&>4z|H2@?i7)GnUJqajviQ@20gN`L^93T@Yc_W7Gc<|y&4>WHfyvd;S;+|@}fga_BC_6N%w1a-v};r&v7Rg zAW^>krq=p}&YMKJB5gh1MUTE3u0=JX1QOxA34@-p;=_mcIp3(1qB}m`L*w2ZPLQQ= zR3Sn6UG)>vxD@#=5JWJZK;qNqn~$I1c!=dy6H07xGY1MtaJyZ<>9bI?*rcId{4N{y z7`=`_t=c#Zc_0C7Uf;ZVi@5~=4dB$Jr+4zZ?93e*!I#L1t8U9B4?cC-&H;(BxU?aL z@wii*21s`!DW}|MnZD+L{ULzFB1cZjSf6Q5@~WM@`fHolUm{$e;WIhQl4pA0JP#gG zZCW`B2F33}mV`Wt@>0#8Ijg11xG$ z=@awRkiMiTrH~;+E}+41YN;mN4JJsdBq~chS_kPg%8MSwB(ZG96BM9UoG_U5Owghx zUzjhfb%%mHicrkxio(Bc+T-~{cG7TGuLdas<)xt8wUjC51&`5}oKFZ*)g7mNuQ_P7 zRW4R*r(B8VnsXTz7h@YKib$YxlcF05B(#Qg*e?YV$*lqa%D;OI0x6h}q7rC|hnnh< zcsH9NwsP%T2dKl&-q|b)K%#bp^PTd&lWr?QWoJgl1kUS>iV4icXG8&XLn0OX?X3Zc zh!iOz!IyCOZd7ZZnjyqyQ5H?ZIyC?mAnSzaxYX!2xh6yb*dZCSlIa!wsKu#8umzU+ zX!n|?LXFwa#f6GgPdx-7tM*zIiF=992;qwj|4W7Wj%K}5Rn0dpHUPzzE)751E7nUr zb4`vE|6>4O3C)UixY2^&`g_`NuS*U`$&k09tU!JA4)qbG&|S-BlwUx*iQI`wwwAH9 zL=_xJ?9+|p2%s}*(efj5kY_4K-POz7$wWuOR%Td4LU(&{>Be^=TA+wTc=uwZQqCKY z2$_de2k5-%fv_r0<_J(hg^2WIDQH%5(wgedYd`dJl!ImG+FWlYJD1*PffC#3&0Vtf z*#cUflX*Kzt{wmhovqwk>dt7uhceelF5f!U_^w?$#EdE$1F{iLUHPl-^o8>8@V#e% zgmlIlt(VTqwX6TZzxaRq9Wnf2_xTbeQwr=-iFx{Smn`%Pkho~A$5Kvn11EoMIvcyP z9CVzakj+v2;n!dPdmf~)8{lC6QvIaj7x=8RKfd4G{+oaIpOe~Dxe9B}f?du^dQ55& zyvSuFnzsSM03i^0cBc_81Cpn{Je%EZv%DJ;WSkhh_wcI1Zi*=p7(}hjs-U4yJUUyx#=)(JX+_4@7xl14RI7t#MW=MoTT% zjQ;Ot^{&dZ(doYMJ5mb%=?#$3EuI$aB_N??=N$jf@U%_vwJzM&Yp5mJDE(n#o&pkW zj9v~T9HJ~IVI4^M`#QI##!Mi-Mxm5*18*~^c>)&7(^8qzpy6dT9}|4;kaCe!@3Cd< zh+=!|dVDxjbuY}Rh0pYy^hg=Y+uV}YW80(+b#C6FHthn5cnftW)IY@s9aofMJj87(~u_G>7=m5 zQ>Nd`>#4A(RUIghG3YlPK2C*U)Ctc`C@%~3q(@UKshQk+At(nj`88Wr8RYs~i{pQ{ zfF)(f8q&!@DsbT4spW&s-#K*D`y5d$|B$nCD=kpmF!~e(LyDiz3CCOo#1t5V$ z_4kmJ9w>1*{11`R10@Y-ewd`mjN)*l_bw#vG7oo;@U`|n=VSuaO&d+arU!-0bM{`> zh;WY^F5@vr;<)y+#sloyNLk#JVfeRgDCN;1YgEPts;gU!mwy3gr$Az5ur@QYJ&KFC z`dQ_2Fix*f^JfZYiG2Fm!8}J^uY>qq0m)*qjuAPcDp6V({Aom7P|9N>+?pdFwkn-9 z*UV1{TO~ZXTPUfF;j{M}NI+qsqLc4x0g9^T^l9<1*{&|4VELmt?$J|>ttj?4P8MWRW z?~2K-z>2N+n6Oym(nP4dAc+U+8eR%D?C7vbuw*&cW(&Fa6o?WA#6+btCM8C3g z(|lJil{DUUj&y*lz%Q~lW&a4Gwux?^^jm`E^6zgg_FsU+v(|Q5#*_S+Rga84Q=#k% zZ9-@%8qk55z+D5W10X^2U{VAakrDU!fB0Yj^Y>zhzzn%7ag=IHroaaKD#O<*Ocu6z zr|hQOzgJAOJr^?KC|K4SwL{AAcMfYB#WFo3Bx}bbqL=!)rKCTGG3|c-nMT zLm#iX68ycxwSQKgCh)PCx>6gG!yV0AgC+&h>a_@8zEa2BX3niFp z)OJ^=+q#8%=x!U$W~wZJELf7|9f2}So#3Yp#+Z8>nF@PhA{r9}oz-4SzzMKQptb|R z;KhtcF*IHBcFO1BnM^kRTBiZ15G)KnJF)G<_?Z`@;^ml132YU2()+^A@Zve{o_QJm zpYtM`CF&hCugzz8KJIAkGOUit2Z#X6)-kPZpGxeDFgSQCc5luA30*?j=(Uy#!ziOe<$L>?(WubRJOvUpoO*?=001BW zNkl2Bj55zllu_+)Rv&E| zhBiQGq>qM6xr~O1^(+{_D(_hy#pv+@4`o$0f@cC%MDU%iD0ZHN-@u_?>yXOLaE!5c z_-zna8BV!|h2s5~%QoP{^mdyL(o^E02V{oLu`b)PulSz=ljk zdS%%`9G(eQYnn1#K zkLF;{DdtX{Mvdk0rnm3jb%*psA(rv>PEgPCjG6RFOX}K9ymeDfr~90%eNEon0uphV z;-=+E*9xwc2e=NA48JJ$^*-B3xss3iz!+mE4<*&Q z^ef~LWQXmubpR}IQ$WIYnt=o^DU+<3n7M>Dxh$I!u{xwg7xXOgxsCr5gM5)o(fG>> zh;oHvV9voFBnqoq#=bl3(R;gnAy@b;&WU!uz&>e6e@vylCAIW9sfEjZr8JwVTUy+SAx|7#@o}}N*d$s;^p(J zK!DufEDQUZ6|eFPs3vKTRkH2M1#+VtsDc~%(CW=r@A zkXRB)&o#=Z)J?9Wpw0Dh?5rM_`Am7&4D?Q=)iRVzn(~$g^pme?kNw%#z{w3Q^b#d? zOGLlaIC$>6`?;51ursv@;yLJ-0*So!=hHq15*b3MH+O=xCu;DEeIMODQ&Ww=`AC&yCcUUhlYu99gLRhk^+6++3X)3*9d6l|0&P$XUFJ6r%~7w*z{3f9o3qeo(6 zQ8h>Fi0W1JniZmtvyuUrC&eed&k9p-6#b29GdUgPDfFO?PhdtW3*ugJ$umy8Xw z&~i?18FIkowPoLU|0}2FPZiqqoQ3`ikhrC#=J!Sllz#rdkVpd@`=hoGV)OY#Qk0~B7R=7 z@)e&I8`q?uTOIy}=%VU<{=|D8YzO{R1g*hk`1*I~X1Br0nrb|i!= zN#IccM`kFQS*?%1FCdh{@dSmB!Jr2TpM&vTU1 zrEmX?G4LbrJ-lyzU|G3Isb%E*-5O8fHo?_K3$tKd%u70Zy}=P0lVPyQP+P_uNQ76g zWL1}jR<$JDF@b;HTZGz@1Ypkt{?ENx5+Jw}Hp5=^Y)@Zfa)^c}z8}3>1+%t74kTGd zkE~}dH*N(JizoUFNQmiU)h3o;g+~J41Jg%Y&a#Y_vDPgiCUljf471aVzEjadcYwWj zUIx6i?%87v0K$v%1qC+@CNQ3l4QA{q;!3DdY=m<1Svp6X*R_5VKQr(%2+F8~c@9sT z|4r{d`y>^?rsV7Q@86ewxtHU*blrdCDqodJ*W_8B)%eiK zz^o%o{td2W$akNOC0L2`ZZI6WGC1{7uJWB07QFBSqP9`wQ6!J1KJk3>`uqPDoTU}tsp9cHW z@F=XDJjaVtzG_SdV<;nGXA}%JZ33)R1!~HsELTq#Cq*t#La`~m=chN8je|L2<#m}dKx_T01GShVu4BfW)U9pWHvJrb? z7we1L!3HdTA5xMRpjlQ*Y8qM1RLuT5XiY9+4T;VCX*G6j8zIzd^aREts1 zL|zA17KHqIdiq#vjZjm{^H;%6(r`DiXdB>?&{)V1c}clPI(myo)$<#I#6ZF_$=>G2 z_wNfR(b$nN(6$&T9IjaAa{MFqNRSXqTP;eJi-~q#P^q5Ybmyt8$<@9;4)ZhkFnIZC zkhFuF7m3*maPO9Ut*_ns(1n5g;MdOd=!>TMlOH}a3-+mODyFk3OtO+N1*tqujvH9m zmhpMg-M#-84I~~a*@Ak27qf6~CN6dJI3_u{)G1#=Bg)2{k&M|V8;u-?N|aX9G$ocb zJ3XcEEHK;*Ba@03mg7QB#VB5~C|HYRUv%y?+mFf^m&xGPuC;t`Uk;sppK6ZLdUx+!#z84tNV(vR@03sPHDT z+gwBbFO8Z})-Jz_M89VM2?=t$tK9>mje1GF>L*b>5!^s+ybv8~Vf&_HiUCGw+}N0L z6DY8o*+;=~w@mJ2&lC$#g2ageBj|I2yU(~n?&5Q4nUzNZp-t8N?GljCdM;Ga7%?L{ zC&b0Tb;-3jWory1q+F#~ta$qFgw$C@^%i5h2seqPu$O;W_MHKS{@G8w;DX-y;c>qB zi?OgjqL6z0n>;$~b^cyb=F~|ijaD1M_C%pvi1rE<>%2|KT>~U2$Ll_Uj{5oVZ zWMPLdR%~MFAa=h7o6hP(CQ{h_n&CIqF9luWH_vO!rDkChNVxaUzM%=c<0fB55l5HU z1|%A|OU5^lc>9)xAi5!)JQ7b&n0|RA>{V)AmEl_2$MVQ)eEgfbdZ}o5cVBwM3Cakq zvQDy2!Jbsm6IyDA?5*T$>7X!3u|{X{x(3#gjWm9@))!W{Cl~!s~&cR2~FA6M$ISszz5zS$cMjNx=xghe1fW% z-624kKW48?)VSVqMHpT+7uYfAu66-HA@#1mWhhz!)Dn%y0Gk6Q8|(4#_8k?DCP25- z2y+{|y)WfC(j1)tQ*K-}7~J90-at)vp~ej4GN*LWnB)#{=Rmap^Mg-JhbQ)uWVCY|pZ zu+G972_&4v$V76Me|2aRbaBc$in|HNwSJR0(WN$imTiZhuWe*-PYfba9kE&d_N_A+bvc=4YJBwB9T9#EJTJAPA-vn%{~ z2AywOozUxy>68harM*NQ@h8iQI2CxurSmPgr9-a#{+}R_xGbhN`QMi_)d3YMY~tyS z#aw0EgYF-}Gd95D{-6EZ|M(rTsSq@URHG@Ea}yjgW9I1;NNhF!li6KDZglv~28X{? zm5|13ki8Z-wsYpA`Ho<2$fD3FHTWrkBth#$UUvp{a-fAC?b@iht+JnKxLXj}+rrE1 zGO=a?rndje+$pYB@4&`E5D-Y*71IJGK!vDX?~pTo*R0aw{c*knHd*};z}{5MX+OwD zxN;II#E1rcxwk8XOpW+jN!pkhRxg<;R{lCBTdT;b(inz0vjUv1+!T6^c+r%vz{KZT zmsXtJlOifnsMC3>CCnG=2QNv*T)%!@`-!u{un6idvu$>t`^@?LI-$PVFgK)&^0Ku@ z4z0SoD{sW=kw_zEv;_f7twirJ&z;4pfF~DgoV0B~r{|%}r3s;ucQE5Q`aU-pOR;kS zKx~q!N3Z|rp}s`%9Kh4+0oe^bg5K~HZE@FERLSLE{g9>bbFAFU#_9XUeNCfn9Axx@0_Bh?yR&(^W>{WEhlV=`eBuu!toBn^I3vL)_rdk*?yk9&`D;8h!mC~4|) z&bW^bdo1~&YIA;`0gUsN8sJ1o3w6%Sk4Dp=Ql9B7qkD!dSA^R!>id0>9Ig|B zZ5|1SK^}obri*T%owE;;eyEFiN(n}!fcBhs2_^+<3nx=NMgK{Y-_iFDQul1#D3i|0|^oF z1QIMWY9O(DBrKTB>JXin0d{y$3^xpgNq(bXwxLK_FswffVcO&9$F9|Zovv)Ff z2u1^n{EXxBji@LPUB7naE5`>{tl7>Uu0VoaMj^aE)hjLm z34^0jbpl3S(-Iv30>%D)i>7zXuy^Udj2j%K<4Q!)7epW?R4k3$OUc%i9L}Wu!Y=Yi ztcop?;o!|FFNhN90!T0v?W?LEeUZ80^8t?-8JF6(29S>XRQ$HW%iczX5ALymglr%( zRZN;UuxudVXY23ss%ei02(%il|F{Vx3}S|R43f!4<6LqBwgx|X9k1EaU8r$Gh8fbx zQdO&9n|x!h%j3A$C#1&W5P2?`xCSIbaU_7a1|$xT(`h;Apq%K@dU>9z?C;I3c-|L( zP>FF&XVGpMm&;s)s8LqHd zd=n>_ACwm43B2Wo{=2^_Y@~O~}uDmh!NLU}*%WUx9QI@NRWyZROBl~N3E{sU% z6((N`oF)5=HIHV0SlccO`|*=JBhcaUj5nDu>yloa^voDcB>1{byyN>A z;lQ;8P%E8@s#hV0(so&NxfJ;&TlSWXdbm_S3nF;*E+4fMxk$Z-WAD=KYIfDBa!3BZ0c~G{K19N3Xz?%`<=~mtKUb_%kT6x&jF*X(u(G0tvgwdxIKDbkzvX zag8T+w@_}vdQ%)m!%~1>8b~}ozGqUNJ6hL5jF-h8hH}%Y+LnbYT;>oUo&(vZNyJ+u zme{x*#1%+UwG7&-8n}SOD9Ww;Yd1DL0tqHn&)VP_UFKDch{M<_)JXNskt;!=DQ{K9 z=M9js^6JC=ea4Et&jwA-mFSD2b#-zPy*RF9vU>tlIyiGjY)gc9;n|^0%ElN&Sp7v5 zg2ZqRS4&VurijH}ozI)sL$r0>-$=gmeMz?Jn2?rI=enoDfNKwJNf|c33+cZrf)hb! zce@FUG+1pQta?mb%c=5OBdMsK}eMAz%5rw`ppy7jMFf4UDQQz8I{?|$djNdBALxOxxANi{hb!Cb%_g^4-` zP8G#JU3$zWX(&3Gsr&T(L`W3YWtH&2EYl`qAVN*#ACLD1w`xa)9-HYwl3v0oNO zE{}(Cd5jxvw=L-!d6|sJ5__+C5#-$8eO5IRxRLR02t_v%YT*}}KJA7X7e8r_gvX5M z5O`#=xo0tna2D=fXL|)E5{9R94iNwG3Ia$COb|*$V_YLN0LXpp9E&h8q?D`FV25IT zo3f8zzObBZd#+rEUY@N|3{KQ{$PhI$luIRVI;=o!R)@E_ah8qm1#}5mD^G-qF%G!r z6;)r*)QRO^5wFVTg3tXkUOJ9_xet16K8t%##bQ8`28S!F;B#Pc$Biv(MGtGENrtP( zv7GfZfc-LWvrYw#|M9-r5b|2D0OlZ$#-kGV!$xV|-|StpNHm)>KVl`EtnadKw|>75 zq`!P=|8JZNotre}J4v(_IY<^=N^VOu06RH&WAqmfo z4l|;)OM~<)sbicSVJq==2qFVpXG9#{^KJJcz_A$+X~S_j)cO88c0;gWa$Q??zr%jtdW1prt`xJ+93+g}1e9?|Ec2Nns%9Zf%nc&F-ZNoM% zgActo-v-U;B@dTnJwKRu+^zCTD9+ykbUJuW^#Y6^ZgE^Nvnyup$^Nh^6~=4l`v#v3O1?eTBx<9!7&ChXI&Tgn+7sbj6Cve%=%r=D=|nL^u|h6SdLcaanmm z;Zn&dl*x7IqvLwlruUlZHX%d;V}l}h=+&^Ivj#R!CZ>DB90~v@>z2nsz^DKe_7W^3 zI>aJgRh4D<@yl8#_tO7e=lhVGgrQohvD$hPsm}P zjTyI<#0V89d)g4A*DO1t!e|70SZAk8K%a=SP0`>J96t&!uo9X*oEe_Dp<5XvtCg^v zbFJgSj<^XFu1WuER>?JM(YVJ#_(z23!9A@_|(saFzCb9M%|fGmv@n(mnP+p|xnd7wHD2DN#Wx62?A0Hp@-aS6DL0%QUkWLhMGg!gePKc8_ zUn7w_$J&OW)@Ct8qw1Y?PV7sKF?5V&9ApRpDbI{g?bNgP*)O}I`j9Y08(xdZctle&p5K=C&<{lsvm1-e;X*-D6g5LbA2o zT?P^s?&B$Fkt8HPLrx>eAx37D%s5$an-OaHY-QOc+D4M|@`u)!VPoTJPuSkwz%t=m zQE@B`TbVopdMZ3`yMpnoCGmENr4=t23U~f94!40%gqc`q8u1xO&|v;j!hC=PJD~E9 z(w4(Bav4aFou>e0+-oY6615Dl$-R#zY~aRzu61ZBkrt6z#0a4mxp08NL}-c@I9 ztrO4f(O9sYB=g9yHh3c-*emhv7LeE;$#;yQI6%VpPsc$QmT@)W@k z2YXxKG7}zy{cNvWhfZ*CyKqXuGai}=i>Q01YCZVAJu|*@io-aH%9Tp0H#d-g%l%a} z1dK4o=K~4NWc_Q#F<0$J#P|hzKQ7wx)MtQ;yrj!c=zJ8x5whr+T4ep$wiu@%f^%5O z9!aHBAmI|&ViVdZ;JXOo8Ll{?jw>Kt3_OKW6(InFM>$Un1ENvlTnWff{5K8LXcVyB zaW3c4%or0S^iJM@jl3C|Ag^FAt`#jk+3+v}MBs0fcqNdafes*%9*HIrL}1yFo+Mh! zEZxrtG1}ST*4jO_0PsQY_Xz(OvP!Uy{p zOGg)w+dUE@b94V{PqrlO#cmL3V36v2xO(ACHcr2*FoTYI_!<_gEAmXi_@ifG``$k` zAko9ug>J%BKzmWkgCkn@mb~~E|L#Ap4e8=rr*W>~3U;L$mdupr!R0k2q!UQgfF1U* z9X7HHPQD%%#U)i`H}&A#yAcMSS%)>QT+1X4;T{iWzv@6|j={ooi|y^OsOfQ$&SzWY z)cZGpL?kL>pB#^0im-AUz`DO;7*17fTJ4-R_7-nKo@APNPO>uT(h4RXxadTC4sCZ(0TNQ`X0d8)0L!dPPcM^`_3V*YlN1|J`uHs22IHnxtW_&jtmzK{iN2sbKNhqN zBw8NEfeOzHTZ?(~~)pCp|*cG?gN?R!Fo%2pDW}v-k&jJz%ZDQ;?2#3o+V!S== z$%$$_);F{EqFH+HHTg0IlNh=0Ffka9$lE}u(b!4=fk#vh}j9@b<|aWnY-a=po03bS6r(ez2|OLM0}LT#3!( z;E1kiP@K^q(u~_`4)i~bV)+Y@xOEzLb6_Gb7SO`Ker;+38`o?rivBzOtdlxkg~Ay9eY1}C8#@wHsNu_ii`En&?YK4CfYYk?dRI%Zucr!$^a70 zSjgp$>L$g4DS5w)ghg^p7uYs}L+Lu{+I7@3gwOB7&{$3VHoXUHGSTa zfh@La4U5V>#5?JcV4d?)F0DDj>RpfuSw@B8|YxS|C`pjX}ycTcn*|?6z+OrL&cpO1N5PXrNv9QXh zK2!$&gkP2+qBG*K!f7^{hPps>cwpzH%BjGah5?LHrpkXZuymn=PoLOpqW^T#daln3 zC3cWJ^5qC5RxUYYabqLNPlav3P=_~y;gu+&@vZLZ0ErJJBg>;}%)60poZ~SZ%bwI# z(KmwP&ECH2kVoXtVNAdN;SaTz$tb&rj(h7kXO79&Ppqi-?OVzIv+y>C;n?%Tg&}b# z0F*#$zwd7JeBe=EfzK`j?G<)7opW&5HJu^2(5J|wDTZAh=q@%Q1DNC*-W5B(+wPaH zw}1Y#Kq8-iq65xe-_^|&rqyA;A3qj&Zi!M;%M-eK{_sJEhVnfk0bemcf;JNW=6O`u z;aEDODf+Mu0YJ|gBN>_`RM;FwRefTxM{kgyGoHJWAu;YbJ8_LQ-u)*$X1R%J1^8&#ns|?#OXdOR1)EJ@EkeKqZLqf3qr(8^wk2lEBMa)t*zve2=h>uqz#I zetwLE1|BYN>JF0~_da;9tkvkYmbD01d@bh6xncg_+<7gT95oFbf4(f$NB+1 z8oo2Mp{>_YQR)xB{;IODG#pDd*FG^Xjl>Jr1`K$4B|d&EFZ$t%I7%Rz{aKFrK?D!9Az&Id*9qwWzBsH@<4zz0hRZ*?II90?fGRH_tKXNc~A1`bgT`|CX_V` zVt_n??lF)+I32?4Oe%X1=X@Y1@mf&Q9u~IdX)OW&e+g~6cDxpS>&Sxf>aT?LnMb1T zE~+-+fVrYg3(_Skf4x#cQ$8AlRr#SD2Mf zE3^!qYEMO0aS8=(c6?84jSv$HUHr}D<6*69xOG`aan=mPo--Ma%qr~#RYR*oKp)vAoM7j-7hYoq|EUazh_2<+TbHc&|vVys(&$=9~^DHz6D4R;Q zeoc=LzQ(XLCRW#xkuu_XNm=bc!c`;mrBYxO1I@}5aOZaQq2`nZ)HN$X_IF4Qk@d5pu1v6L}b!3!& zdmwj4_Fl7xHpw67#4=vG;1-Zj#Wf_r;=sW`MV>_EaoM|=1K9{H#YxN&sdG;PjC~PQ zZARwD)6+-gDe)b6pW`tWgEiL09+buNoH8WA(=1<0p}ERt+<9;DJ|s08Okms3;psz>b}s*lG5D_eZ_D2@x`^;~2G(uy`I@`B7HuF<;+HW}$Oa@{yRlo5L9bqw zvFg&PB}-I=i}@(*$lU~(a~Pxt(;%4=<|=R9gxhrD=9Q2KtBrm6S}e<3-b68nkc~|s zsz`&u1kOjX?3h!@4$gdCyk$crsg6H8+4dVB+J9{?-Io7(;VHfb6vfoP6~>1uj|$`K zBD&lhq}w!V}N~l3lIv7u(wLaw>nKrG7{_^zKp-?zExv9dY$oZ z{5Qsn=YSZhd;9QEvo5_QS+Ez!X`AXQsymZll9KhSn~?B@dwBih|M)!;V-qDYsH;}% z*&$~pw(OC>p-GQK8G&)J4@)Pzi27p;HtUmdKT=pVvuby3xXH%Dczz)2@ey-ZhHAvy z4~Q66`VjwWVmfjnR^~NQ!QADsDpA_)MPfmfv#bqp`R)j8L4_)D9S?>a`WY-qMD3-N6NA^e* zh?mP;4RX?Bv#cqFhJLh%0s5T8H_miT9)eSFaJGwE7}3$n=a*grB;xbyv0KR+4v`n9 z$sF(3!E3`|ETH6MIzI#?%JZObv|zXKpNywxr)wJcyvuu-q86#Wu1OH}`7FbmrJd1a z3uhd60q4bGA24_+J4itIPo7s_c-}dLu)3Pe(YtN~d0nbqS{#7{D?SRRavmfvegqlV+(I%ZMOBo=m`AS{RLof1Ms-V1U~QB zc$@>4du0KRA}mzR34J^&UqT|0L?hS0d5d${tS33j4An}RSK!hc)0H4y!OKa+KEWf4 zt#|El0i#~MJ5)M&q9Y98Z@U#O3ZUmKB4wy7cB)qU93bEwQ$~{e;9GW=m2=p zxnHbchBM^yye>zJyUe?4LS)9@ce&5WrG@`VAaVPM%0H(kvIVo|KtDme?_vj%g2%NGehGG-b{v!`b?^|k>i*+3>4pUgRhRWzPKr&6vIGk zmM4Hj8bB6M7FZVz3yUQwi+)BtmyAZT+lxqUgC^g(3hkK#U8pQai%aErbzces9kUZC z87en%U1U|!l1HKiYF%c6lo7HMqT(yI#QFDprV`M^vQKp)C+ITlWS-B9td6?&q$Eox z!2n~?@yhsbIud9gw3lEfM=NZJEXx8UD#@HnG+(bDo#}+yYI>@4I~tj zSn;q`(d!f@MZENW#^&_d$oD#83~qvCgDjOo-8&huRyf)BWEqN-nsX%Rkzit_V{rM7 zF(^`AjLJF5C$fjfn|i(kv*phP61!IYy?{gsRQ|sP32`7TUwfEc9cAwB+4;RSt)pHX z-aT_Oau4vH9Z0Ym9diKa&7Sb4ZdzK~C;(XEk(QK6#U9H>4j`V}Mvt3MGL+{VS@Wu* z#vH5ie(gkoL7fPr@kks!TjxMxeInVq0pc+5=#8LPqCFB7+QfW=4`Sf=jXzKsq;J_mog4M8$x?i2O~Ygd3rP3x>9DWl<4=e(%@=v6}a*l&OQt^O{( z5sdXp)bWm*$+V_)uA<%6EbmQ#QLEao)4!`|M*zN%*BCDuaRNa+8|zu2oyeI$D2?>L zs|FtL#0{%4`t=+S(lrgST-MXqhV`(DL4DeuSa|1gu1g=P*&J`B?H8|I=ACjq7TFPG z#z=J9ZPjl=ARYfr`L1*6gl*d*ZGiH8OdjKSzMzjjR(Es*34~5PsI;$u#MdthVWs!T zdZRaBM>23*yp5(7{j|6i=yxw@bjnk@BQB{dl;?ajhV=htZ@#pXK-^GR~Zq_A_4J7t>-90>S zQ5+YDXH5GvN8+b}gcOC&He-Rw^aDf`%V{7{>!Z*n^(4WZJ3K6a#IEee?hRH|6Hjux zLNB1`l}9z<7cvmx+7`2Gk5vPLjD_wb?CDCMwz%imp-t)WP+aY^c+ZJXp=k=721TVO&{)_K76RVgxrtTJAn#` zsmP)`p1kFiKo>g_??>>sqv^4peM7}O8r=mX9v_)cCW0afIwv_7aq;=f-ESX$tMw(p zqp+(CRcbjr2yOuqx{D?r@$o4)>d?#7!_;8|`1k_qOXgiz_uAWHAmL=?+Djp^38bv=iGe1;~nhWlS7dPS)$4_ zp>Cn)J`?I;L%4+OB31pa2CF;^_BhZZ!7y)zC9*MIpJ(Lbpt+zxgu85~hs$EP?Yr6t z-{JF3c<$D08sZ24d0ATi-~*rkwI2i$r!v2$F?mUSg+=sqXp=VN{;&S#zkMHZWYYko!-U?E#f!4A5Cj}$?41CK@71N2f=%bL zL%tj?W?*5DM6v5)ElW8lF4yCPAwU7j3Qirq5}pqm89wX@EGk!}O2IM))S$;PqXf%} zPfnwO61YR2IG@!wWJCLR0}?XA^eO>)2PGOvFq{kuAA4UNew9m-ITDz!ldaw9G(!ZJ z(2>q}O7?q=g>Uvz9D>We7Lau!Z39wyCRH)b#Dv4%2=ElWo8s_6_qTO!jt?`{erBayd$r`~#tu)&hQ<>eqa&7LdGPN6 zBuKv7s2c{^)$tsT7(J~F?qJrSM%!@I}*w?SlHR$CJ^8iNU#myry>cYjM?#&g#Vi9zAV&i0 zXduy^XUSn3gk^XInD$+vY*$&+WtZoC$@xloeBzlXCK~yYDhF%NgddmhGMK3T5+9Lx zO|MUum~MUJB>fmy0txF{{LI9fldZGZi}mmtl1a}$)*ok1bY~avsHS#RC5R*!|Ho3< zX?k#I&jS%7kGFgJ9E}v zP_J>>D$?upc)#v`R28bKf3HN8NgR%y=al&pmD8c_+xQOhaEeq25(4kW&kgqKEJ#Sv z&Qi#sWEhYa zCXD&K1Pcog24c>Y28vkN@-D2&)qUc&aH+YR6Fb_U)n#V|40hU{Dq0(m&|FtwGeDxo z8r>>Qk>x%z)NJ;Q#v8lCR-EF}h)rFJHO5k|X2dP%_RuB>7>72=AZR&Nm86`A>o`m5 zYK#N#HUqMFe8e-egrPgxq9O}C9@Yq3^1EU=`CB8&sUGE$sb=VLn*DE+Z_D1oj>VK>-Q5!r`r`Qi<-LlAb0_hIT5w z63Gaa7^$*;>gCZ!x(p`)v5tFhn%1O*J6}&(*9lYNbKL~7@?Z`?B0U$lkJ;O$1=N8d zPlwQcPv_s~w#2GQE{Wd|R0$?dU!2J1!t*Zaq6D;YMjJ>38p=J)kdzRW1H{8**++C$ zEiU0e69QMvqDUw_nm__Zos3<{{{rosUZFuW-poB*hQvsC$JMbJI?Nqn`NVdp{zL$dVRDqo_) z$OI-Fva}O+UbB)ZsShM4TIOkQs^~v;c4D4l9n7B^|4DwivShCv{$-`P1z#e zi#X}aM5mm^p9@mlIz6|}#}EEq(|gX_FRz5o=CgoAkQD#&-~Zp=Tj5A4Oehm4#Dg-- z^2+dzQA)#P7NHMVhn;*cmK_4$HHL>#KHRG9FdS(`1A*lLooK;{AKn_`9F+VdS@+Ag zkSUDYjlLEkx#1x#oJtAmrpPc$Z;RPHFgh^gt9G+Wui-*jwV9hZiXbW~y4I&|vm5yp zE3IA?^{FyIF93;lO|y$=3GEW(a}^gLAvc!=Ts4X+AVDzbs!bgZBE`Yvb2q3Pcl`i~ z@PgQtCOWN>&8qR#$1Xo?YAMgDH9;$(I>=%I+-5<#tm`kNW`mHaCg)Oka$ZV(Rn5cJK~&iZe)z7 zM0PHbWr7%RgNOnO=@B~2;UxA;9=u{IHTJGd)>w}rFHXWXGsZK9umvZ8lBrIhzj&v( zXg#WPAQ2$*rtJ33JLX%=Yc?=(Caq5gl02I4niu54zz*KBBg1OrWHshyUuZbQm<3Ym z-p6Zq#k8E<4M;eLV1NXTkMT$#d1^Y>+K8|mWP-2D1IshfV^p%ObGCw6=Wxe^ZZ@3_ zwjA<;gim@Uss}=qpN-PPnzQHIgpJ>?^*P(Z`N-tGQO>hc5r9NjZF=*XeI($KsPeB! zww6ai1t8kXW7=HhTFv0Pr-Q>nI>hyGTqMV1Z}THm&F&#&X8)IBhLJDv`1rmO*&$yp zTG#jY#X476SmmU!vYuAbGNiU>F%a&UR$(tNOScxA4Lxg6=CSK@);E&?Y%)R54q06= z&|aqR-wRw;e+hJORv208djI!zV@$f@mdrT0|GtYW8OR$ox;^p=3t;iL0O9x_05Nn7 z)*Ant{UhkLT{N;WXJd=PXOlYMcx-4lP)@%oGRjpa8E*PoVXdslR8`2jggws`b5%eF zDG#wjQRi*5_gT<}HV2~?7*SE-RrXfMp0Qp$3ESY5gpAhNoeAYz8~M`TKgX1R=`)}4 zc}?v(Z$Dp!^={hpu=IUf$c@ok_sEgp{hp2VhFQ_@pdd`8wob+|_lj)ge1Ft!Ox&() z_mQZ!_B`~*3pC&Jn5+{>F{Q<@#2f}A&C6@SI)A6jxBZV~C=9)hc}K2+@+bNo5$~AC%0QySngaL{{g3B_?&jIACA3Ku zR3_1lNo{t0cGy@N!)ize;Zl7hy0f(ncQ+*z(6J#H`6k$sull*GHaQ%NAqZm6wU_Xo zplqW1nD|_{qR;rOInWlY(Vz}t5G+?Kw{0{$vw&LWt2HYF-&M%O&THFS9KRe$96`nN zfdrI1!9)Rx66R?7_JwD?JQ8f&+kFoA}2mw-ey24ew)ju2??IGe2%z$nq`9Fyr-ogVhpm^hjZ%V(u8 ziim;%FXIi}q06&_oC$P^_PD&@UKW-2bTdH4@5}3>&$y|bb$NPMCmflLP4N{n*CV^} z59`wg5^XDz0VhGt7t+`z5m)w$!Yw-~U*t-vvb+ap#+ZL5%YnN8?4Dox*##TcYeL&; z$dMszXHEd+JfWA{{*=vOO=Qvul?jy#SmD<00k!0loGfs7Jo(5!2atI2 z$#}^ry8PLn1`_jV+q9>lO&$6@E80N9u0b4B#Hb_D%0R-Gur7axw1EuFO?EB#`7tJCy8*7!scw3UzxV;CbMh6$4!{lCLY) zc?=MSFEO5<>bdH#KYi@PNsDuaJ}GZPAg-P+p_ARP@2i$Ifdujkeo_AmD}Q@;SOa}Z z-jzF6Xqlg(_r_-!HKeIfPx?qKA|S!Tj{*rcUMlc~90`XubyX{#7Z?NuBr1GOjStPl zE~qyKC^pJU+jq)f)ogBk-S@JsDSN!Qw+l1ose)x%njo>vD?V?`DCczqs|op6!-a}&WGNYwqQZuOJjw1N@kPSo$GEbPIsuXAKFNOw}3U}Fb{ z4_Woc?vqq8{hvOS2f&7}ldoCL4nW6b*?NZTSv><1)@#kAN*|gb_Ba42pj+#%exWhw zWNVy#1Bpr|mOWy+xau$A9tUEfD~H8|Ru^^gUFEZ|t}d@`Be(C`36OB4fzN@9J76%7C6IXp zN2o5v^5M{{6}I&rXX2eu>`^ofz_59~9Qpu?F8~wP8?>Snd2H4_LFpP6WI*A@fX@4I zD49oKdu8#|qU5ro9N<}k4OSt{Uy(Z$L{Lx9cPfcxhc@wUP##adr{%TRxc4K9DR6J6 zcuRr4PKqB}vSoqfGX4z!lsPUAf9fGO-<|S!DF6T<07*naRC1CbA&*Xdb~Tz#q}%Ta zGF}8R&lJzge|7^%ykvH^l~-?edJp4iP(etx_GP0kBNJ&iR4rn5a>;gR6tb6d+@IwfmqjHC3T!NCZg42{#5SDUYszPM7=D9E7` zXoMxOv`U6sXK=#LytldjcxJhs3k=aK!E%gjM#u8F+-!R!ih-@lHEIHuhHDz9`W{`% zH1Ll75t4qq~`r_*`X4)2OEDhb?c7GOE^F9xLabalrRvLX=Qp(4@m zqYw5;0o+T>)e%Irl!z#yU5QLG;88p5hMn%RgjJg{%Omq2x?LB~*m!`>6v^TFdQN`! z2qacnmvWLGYBI~&J)Yhre$SQSbj*r~Fw;I>Z-?8-BjFI31vKi-TRv0S4tgewDzF|t zJriJ6r}7O5iE7~3pj9$jhTgfEsQKF)BqO)NUOTUFWHRL88IW*8x(`oJtlD%>65^pc^jA$ z8yO$qnfwye_b z2q$LQ+4XKX7nghJ$d*}GTa)d*b~)Myg(F9&^|ZSz)5ptbJ;O6+Ak?<3Z32aWClNmS z!DdP$L7kDfK&j3%H+Q>Z$7jv~I?)>ELx>=_#W**al`3IVIE#utDx>*{L%OehCVqGS zZ~pH8{muh0O`(#}FC@7&7hiFLE1*GvP5mE8N z1th+H?KnWNDaG^{ZPzo%%-YDAgU2^|EzMx9`zX~UCFOmpa=lf?k4!bjFv8#jNVvYY z&;NJiy+COHa_5G0Gz`c%6szbz5H9e3bdLj8aKYZV5($`fguJ-nV1+MrwJj-UH8FD; zJnEWZva3-Y7rrn2YA}r}wQ6NQOhu16*NE$s67O>$ppyzN(Rx;pA&~gYJ9QCAT)&}y zuir7}P?A@yTLB4GBl!X#0RU6VhX9K}f)#84GOBV$3)ET9!)Rm>Im}VZsbyuqim94) zBLwGQ!LG({okizNltLAF?Z;~Ol$7sI*aNKMCWw{qig1=k6_!PXchK=VFRLIwGrPw? zwE$n~lgzOSsde(G%sZ-Wau`P&Wl7S=+}Oe1wIg&Q3mt3ib0ML)h%g)b9+OU+Z+o-k z4vWjhwC9yTLJjG(m#r@xx>PwltmZXxYI|!LHDe?lWbyIPj_s}GcP>tsHC3!Pp4Fa- zOj-@O(eC{|Fi~J(3Fn=#O%pdBn#)}lt6vT2SXLEh7&5nVB#>4=0BWbOCzRsjr? zXna+bvKZp4&~tk^42L)nRWo~2o@t!B%A)mG$$++{G90iC2I_wIwNMkg%4<}Z7V~hjAP8*d13VHmLj9FmM6t?vligSh>mZ|KFNO_K z_AM9|p)R`)VI82;6&WE&gWeT|Y%p_3Eil@ZZN@voZ8X7l@3m}M(et`N*%u=&`{pfZ zfflvX1*5-w4mRdZN85^A`|v1?rr3t1OmMy}3H zueZYv6dHhh1fHE>L=3e$L?O(fwD0bj*Krj{2vGRElMNSH*d-Tzp?O$QNdsV_6#OZW zxWNmA66$34PKeZ80!SeIz{%EC&;0~Qz!-20D}jW-k`0tyq+A6OaF5HY(Uiz0@y?9A z(Dy0O>R5JlCYJwOtbMsfA-sA`GugepOmpwrYq2n4=i!OFH}zDy<{bzLIY(Z}f|q)#NHPIkd^j`uXCKASg5& zIQNKEoantA89k3v4ooe?npAJ&YjJ^xY^&u9xxogX2x)<5f}utDnL_~`;^dGIv)XwM zIN!Ze+tF)iuX^tx43|u{eh)(&4L1?mG<_tdAsuV$3rVagxE<~hWiS;gTI3$`mf}1a zRke|xVTK*n#NEyL8AvdtjQMFW-kdM-w)*g(iVw#zJs(T}$m4@J{wJ{JPhG9A^E}!f z7&%Y-duX^k7c~@-mu`Z&+>8`Bxdx!DQBTEZM4@5rxE&Fw@@0 zL2qML`%rsq&sZ3@2K6K_B{5_-)?7kw`tC1zTE0trj@ObeM!ON?#~vY11N-Gp+eJoq zc-DXkpNr~IgT~78sMlCUN>0V80f%P|9aE09f!%U)v-5QKR&r^JSl!M}l3HmZ4`5ge z0P!x5h&Y=0^ZRou>`c3jZ1eLoNUTE$7lF9yl>5K>o4>EM8W51Z4o1ji(&e5gL&2*g zNU12s^Dzd#(7c7C1U?&_$i><1)Q9miBb`c460cpqX5PKoHkkb#Bh3UCJEGR)4>~EI zVIbig1oy&lv%NBMDXE%S$u+lPVuC6eh>RJ<&zx*+!@ue@capT9?aLCUDS?FR>lcdV z0bb%6&9WzuC{~F|4PinP`(6@g@(YCWTWHuRTZ)FE49q!T1tele7~RN+nDMe{nnIfj zNJO6e8P5lWSRp}k0@u>WZaD^LatXGI@>Bcx!7Vr)849sY?BCENK zi@b%4a!BTk)*&y(XF{96yvBZ6%AMWkrV@CL#^d42N;Z%vjTi^~aQC`ADi6i*IoIZ! zI-ZtC0>;zB1|*8L6Cgihx-S9=u0sQfn%fP{s`Iu_xs?{ByJBboB-Bm4*=mQ^5lA@P zt==5H1n5zm3L#actDa5fyA8qIgY;A;4mg#<&VQ2ev+d<-gq%EV2+o%FY53U)UkxO! zT6$-mh1mombo2(ev`G}_%ZkZBVJgMoAkOjNi^r&1&$Z>Pfdtu3?p=CII|M=il4sqg z!{a77&>;{Sgzq885$A6EeiBz$S2p=XtT#iP#^Xz)*L^0cLvuA%)7im0nk-6yH(t%u zDV)U+U6e;kwtjr9e1lH5-Wt+D-cLh1uSpoQLf;PmE5k+}0EWUStdmDwL-Ef0%yP}v zWL0_TbQkQ2@LF3AIZVueqH@cSJl|cYeZU!#3SjmTVOvi~Y-fI!?#$(o&ID(^zX{G4N!6iw9W2n{?v$+# zp>`jbfK5SKcGN^wZ(?|ISO3Y-oL!AfU%^_9|rUyF#2R#I}*lfFAvx z`Ix$svWH3@IDB88t{Fz&-H|a_t+7d-rKG~SP)?x0vw41Q_RozB*}dGmV(N=N4_@$V zpvu!%d%i=mrQPELy@QD%k~q>6AhEJ6wFOq_DjV7l7ZW^!hltOjG`$+FCd61-P%Pm% zUEs$C`KDaLBT<_YwaD>rmzK=~ufd$6Y73o%fuTv%g|5l*KsgrB0K&r1U@1KXDa-4U z%VWdGu?(&~JUCrYU~G5K^>^9A5r)*ZT(=R}$!u1fVuS*;SHb(I?^e2eNCL) zE)oq4R&TPBbVt-a!^(5yJG>d&={IoSGBP!0hjT9?&8&()k z86Iy?7oBc;7!q)qLur45($+@VeZP1l1SIM+E!{%ODFopd+C+f^MaV?+RvEpz3$wCb z;e{_<4ezol$xzz>-SV~YrUnwO(y}zAo3qj$iPA&{5;ND;H9JiELDp_^o3;8ANYnyq z8FwwQ3HjEQYjq~?({i^H;CN6AUb_O`tT;#L@;)5cunFb#IXJ+dlkd%Ojm7ElDoImS zo6dj)L(Ie)$NjSM7*bkbqV>$W&ZkV-VFP^)$jZXg>zoMy3&?6I7cFZ1al;&{44G=LJ&tUg{*f`fUbjKnL|%B?qlUG<>iam^CZmb zo6_Yw$446PC?g1$_LW(>?lJloecTXx)in%)6v~sVi3Y){D_!JwP zN!D1%xb!sjJbQ`Qu&q$04x?jeN>vCGh~=V=_^Dns(l^jqs7eJ{YHz5EzAP>t$@#Vm z!ZR6Hbk{O=4Asv|XTf9K;o;QTUEyd0%=R|$nhcSMe;ZhNFH0tWL+H-YhU0!r@rq`( z%P!$PqqSUfUKrN?GG;?$rr)r48cJQ&{pMsq#iAt}$WS0-^=Q;*o$S2_2DF zj|7#clC+~@#vEw=5Nl+nov71&nR{Z(P1psfi@nfUa(;XT20a&3g$2T2-)|^!z6Q60Zaz zm{5uw2{tzTeD_Ud_%KJ5Z)9g{Hsb;-<|bBi={6%+`~Q3(VNJaXxzjIZ1Bs8!k+4@6>%s)p-b~4OSNd7Q;0oBQ@?IOjIv4hGr9p>Z z+1tGXiD6rZJW9_5lds zHtsUnx=KZJlGf8aYp6uXH7`)0lD3=!Lz?ir3X4%cBYdtxXR5j#L$(}!V0~;o%4?aH zPhaZgl8iJ>uuk0vFM`3ei4o|r_CCm4;&)MR=fxayvvip9N}ZV9q0HfNc9ky%PB0{G zk(DdX>X*?=0y!N0q&n14MzzdOp0)AX(Ni!0#Sd))z~D##(Bp{<+uk#Hzg$=(L%uCD z3NV(pddNeEWzkdj{q9XQ)uYXUJ;ym_UPOe*p8zSY{{Z)W{JBroF+4XjlNAVL{==H* zu*=bS!XlX$vQF!`+BautMUU82{p?v%;hqWanC<5z3Y>FTHrZeQ?LP=eTt=n6kh#b) z&c$usN_j?0WyqDa+s*N7M$>KR$EJ4DOfs}~hgae*j0)DYFX3nwOb0XEBN4N=?8jV~ zU;>T@BM*cZ)u?}jJ>{B(j4%6on0(pnp7gugBcT(RirC74PqN^On80*5Y94j)1yqDi z_-zT779?V33?$ZMYXK3ru@|6fvqXj(o(V8fiOWkvI=M7$tf-QM*+>X=CRxkaFT-9X z2Avb4>GD-l8kSd54i%Qrxf0**P=b{!Wdkq4MAEW|pQNE`Ad!1tLNtt8|IQaEfx#`!Q#` zJrYW4G%V2ZkLMgGx(HXwsQI&KOFp%LOo#cQ`H`E5>8(p%P{Kn|3T1{r&s@lrUDVtH5(hu{1zANw6CQ?LGpsUch?w=~Z6NB$J5iLh*V!9VQ{Dm+ zHsp%Ubaj^o5_A761fo5f27{CHuzHgA1C(cJjp1!lNXeJ(-prV5GTbIPo)FhxMlbb? z6OWrv^RW#8+9$n1>zvO467QDKrV9O0LpmfT(<1?3vyx7pl?~X1Sko^HNVuV>yghB$ z+4zl3bZ*LOd~D}UqB8dmpRfnl-NVZulhNL~Uh=yP=dTR8ERv%_oW4kwk5OJa#N?8@ zB1_);ci#J@&ql8mja~eKJ%H~ZY_-{Q=T{&S;1!#wxk!sa2W08HcaPtpXq|^QD2S5C-QY9Xf2YEb98wGqSXEMDs8iokvn6?L?F|dh6q$DRm%usj-ZGLP zy#gbTGl~NLou3;o19!8D<&=es$8?R9XwVuZ#*;B$jbQb;syRCU#A{&B*@W9$MsZB6 z4Cg<-ujG#IyGk2Ejj@l;-^Ax&XP^=p$mb>rJ+QbZedhv57(OlJ^rFWmENr4(yp|#X z6qb0r>m~~}Z?R>*CVSZ==IJTRSH#ZoI#?V~*jHZlcD$w;w8WUi?%({k>eE1{|; zM(cA%=v_iZjTK0oUGM{v;D;LQncbZ3(_^qPc9cNk?cKvWhBmsU!L>wIfKDSF2vn7qls`O>e(%KB@}J4VMSmh$nT>R zZ1)^5?L*w#9l)ou@qEw1krqMX$8N6S0NQ73utZQSIB524HS~A0pGv7iBXo^x?ONF* z0?fTyYy|TL)H+-Awa_0!-6GZOCEmr-udX-0hISH2(5qybTn3iFQ5!BD7Ln%e8KgN0 z^J>0j=3>{atIvl>rE{{i zfy762wtjjlGU5>06q`Q=o@7LXR8@ErfDb~PzI>q^Gof~(msfJ?6ec!lHAW`&OO+vg z&E5i7KU8zVTBhu>2aacqc_>w7?-L7AxN6XFpfnoI5Hm!VGN)y-<$5;kbH$(tZNfSb zNU#@H=No+crn1BesT$N%q5^sVRjH7eUmg>CH|}^Z+CH$HSk71g3E39huk=vSE8_Fd zQn@5|oao=oip69TgBHOxqgLq#L9mGy5-`CojVj;d{x60Xb9|l~30_xPWTnW7C^(2k zJCE{y*idZm607=STHB-9R1O?^JtMZ!R3^-r0^cYG% zfBD?MXHSZ{)lzZPCryq^XV`8^6_K)FG3*cC9?Q|3t96&`#Yj3IIl3XYP!7GN-hssy z-SqkeHGfb|nfTs1oDa5rQ&>U$syb8}vK&ByawZLaDv3eh6x6-xslBvZApmGdUJ4fX!c+&Xx(1Oq^ z20mO*eK2wiFm}g>QaJJ8y31;>SDYc&#O7w|Fm`jF=olRg4n8|M7y%A1c_h@A!AcYF zp<<=Gcn65j0}_*LO~u7#RIC;uAfbK%C3nm~3rM&*RG!bgS{6sf`K>Q&x3>GDOYosx{wU5`{`dcW}?adz=Ou#%dr@3?ZsYoZ8OTLdnX{x>!hg z&mAkf1Bn_pN*KQV86dG(r!6>eJ{j5sg**&6fdrX|^FNmilM5f$S;+me9J@D=kWtEB zAxvN$@a6_iRMfmvQ(Y??c_rgFUWg4$#4sgB=UPfmg%4jtm9aY#ew}Qbfdi8jKw`Jo z=OLR?xd>zyVbq%6XEXt?V~YKaE(O`l&=vnm8?n5%yuS_y6p(!?g$WrOSJ%N(s`yy7g^UP2C(i`JB@laE;eQ}P9v-?;T@_7G*krQBeV&p*RqVJ8 z^sxh($UJ={SpLVLpc-Y!e4gjwpWp73&q zs9Q-GGSnzfgsU_$f6FC9tvedLN{(3X5-{8qiH1M+Ogm)DddaH1Z&&NEonaO@4x4J^ z8oVV;I%kzF0SV_!I7!@$ut^cwF6(>+CP1LdBQa4PA|2D_l3=Mdba_`-O;f%}8Hs8l z$9X1@(9GlBFPn4XP4#}+v$+RY4q&JgCB4J{HV|g$xQPgUqim?|Q$tWVRpIWW%OBW{ z`}M0L8Vg)j<6C;i@O=EfO34b4RM?X|Rb@XZhsR(x=j*YzevSh|`Q@Aq0YB{_<%8~F zl93(lV-3(@7j3HW-g&K7on<{Wzdx6U-quw)NzyC;*djw=SbCg8@hT5A0B{3|esChA zaEqmqaMg&JAt#?kj#{Q6y93RX9L*)JfuFN_CHT7r5=tm_EGC;GvBE$Kp2o5fR#rw-vwdLo`A#$L20xA& z^$n#lF^9%rpsF@49*HTRcMC{Vc{PVNwMPPs00;>rEGiaSh98ZNF_^2&UBxwWT-~!o z$|4PaUlN_RW;C56K~@LK39-;(tb>vA`s^Ujdt#QYsy9^?vNiU8m@&^`WrpgF)!7=# zQe{|Afy97_1>CmhNDOiamop&2gfWCQJq(ce_{1I-S3{e2kHjq?@v5&n_m9b)mx06; zA+}3nOUF3hO=?tSDgrwT`(cN(x|~7=Tx_5#cyV3?)mrl)OwNGBQNS(;Kp~P0q2Ql2 z#AuO$`LIhsf+Os4o(g!gWrts`Onid9gO_Lv(c{n~q)0NAvU2Xu*?2~t^a@-C67r-@ zBBYwAxhbVWLU@)$SXFZTbeLY&`gA}MPP+Y`>P4(@~t=# zSP+T{Wi5}X`_@jm*3m_Be5FT*Axb2{+^p0<$E8nUXyUVwnb3pmeEraDcIiJQ^3uTd zT*5mqM!QK0RjJHsLcVV-*@{YojL2~Eb$Uu2!J;+%Oe z8D=wu27HfECKjKCec`(cz=)E>SQ{kSvnR)EhGn}Gy1hUmNGL+&xe1x?^B^rS&LqqO zByqGv@G~-eYtDysl&g*tlN)7Uj^%8$Nhj=R^x7*&j_{NjY(xW3(;{-DfNq`&p$3%Lzk4$lO&5Y!Ier!v4C| zeLtrD!UFby8j&;*N`aXN$ca0aBs)9QQxAhay*&PJJf~2wT+e38?UwYMaBypd)HSlY zm)6ZwENPKYOAg7Oq4*5wcrLYG7AODo0H42Epjo^=EzS(=ojCO^jc6a+>(}hOV#U4O{_itP5?ccqV8$&%G zYp=40o1wf2$#f+rm6)uGd9Pkq$O+hegbRYjtdPO(7*C^j0bM8CZXXBNS-d};w6-dbN zS4fdPM$UUF;D)du>}^#%Qe`iYGwRRd@K}4%mwkv*x|}a`iFLPVKx4`(4Nl$Q4KScE zfmq+I(xptk&JwW;Arb_cJ$R15aH&$PE&f0s^HG1S=nG-=cLY2fVqmmD6nV!WU{BZrUr$6SCgVA zQt|vpyI<(?7k!8E35VXfU`zJgDH-?IfAV@6dQ0K71$BSK9m$yJl<>X+E(YG{O41=k6x=}DmDD0vn9E~!ckI51!E7$BvSH<#FEg@L7zhpV zy|cCBY!(0c3?PB<00IdxBuKU-Kw>wl7Xho=-3Hc)rL|bt zBSXBpzes5mkU)~83=iKc0#AO=?3aOrl>uJiW<#}}OCE*K!t7@p*n^OutV@qXGR2{Y z_iu)7y%^fmcVzvtMZdk1=b}G6BZv7VVKUdx-Ulz?0Qv~Lf(-) z5@@VeRnO!-N$<^t_{Gjy+dEsEIq%S>r>Bx-r5kF%=TlleUY7TiCz#t9RVP4lmp7sJ zlT_)KZ&3tZ_|9nqP_Ga%=1VNe*9Q2$m;$l|92C+6AW@!M^e?hUB11?e7kyt^&!-*; zkYvLrb0qlsOgQFUumM&ca1mM+GO06bZ?F4HnAmG6;pL4IyVaNvcR;x*jO*7u(w$_J zxzA%RIh1C$P&%KVb24igYkembKBb(Jb85{of)(>#Oprb?%jNSnxaN1^IjMDq`Pkb2*{9JQo77 z)!Raa190DqKz#d7qEIFgD`*}4%U=TYVp8?I|fpRWvN|r=@ zp<5Sw{e-kzz~T`|w8h?MS$II;i=GJDhw$k5Ogg2Y&L+yg8Wkm&urMQ<6GBx8jTbUm zb{{a39l`uMSw%|nzz*qllqHDLLs}|UEqeRIr**d4E z6SUh~VTQ^=mZ43zfrJ45vGRR;O)O^+MhR+{obqw7jx1$$fhN>-%!mQ%;Zpqi1E<17EYo$6^(H zMd6Wv@xcavjJ-YnNr5i=NbI>;&SBbEuF#B^1yCtFC0irBsgkY5^j#|d>M=2)ZnIWW zpJ=T+XXFe>$SdTzE%NFx;VtyhN^z+WaRwypkx;c2RXg#1wg)SwQlVG1@A#YRpTMm4 zyU#-wbGQL?+Gug-~IdDFg*!%8U+{f z_v~EiT8s8IeQA-X(`W%!yPnMC$5CHg;0$==_KpkT?=%8@{q_6lvH#{(=W z#>-O2WKsEN2jiOUa&}Avs;p^+c(SjAy(WD}!^rWyIGhpRmgI2z#3#udOm*7UdEK9tN_fJBSKNqnun^nGZSc|zeVE3JR=Zcm_XeqJw&*y!i5}7*u;*xVAKSX|&M`mJJep zZ#*LdZ+kUtHz0JZN@dqwcTQP?RDpEswm1-$k(^Tk34Z8|Kl1+YyF9yfpNn`=qfqNo zt;-ZA;J9)f_?~277>&^chhAto;WI!x1PxlLGqHErX8;bYX;n3p&4JH8A~a84H4Gik z`|$LkLZCYA8O?U#EmVGRjnf;DHg3;rY|N!HX?cc@p${j-b9GX))=sgNd-JD!?DnS35`HW`YpRs$N({lEG@|LgbK02yD-e-PI(0&zoN zI3$h0GqYbzuTi9r6Xh4hV;h9B=$Z-J1lQ;=iPi1&l3l#34an}APS|P#v1ox2ws`I# zUVitL*r?kWk4^xNu{Mx)SW}mlQ}@$W2?7$T4pPtBJQ8pV6G%{@&?r*c_9e;9PdfNW+34bYHh?uXj2P_1xQREiMN%khzlo=fPjP>m(?LR z<1XRm&?Yw1v%n(D<>o-OzTuUyf~B6NvMFJruE&7B_#YJYlyFqsUz{O_3z^-<;{YO{ z>@C11q$t>>&`HHWNwIm&P(h0Q91z-c2}m5&xCHMA&lN~0k$B`Yo9O{asPfG7fCLlI z4nSfPI)1l-gs(sEYBr?XB*kKQZmdlh?-U2)b~an%=?zH%ATbqyC~&8V)hN+1=m-E^ z#l|HSGfq4}O)zE4wx0gOEYW3;#7!X4ie@9%uK@|kxrLZG)#Ne^GGDE&ul;>y7n5+% z>PucWFSWmG0TN=puiu+P$JfkJ8F8_{-y`o<9vpX#|b&A8Xn`f*^vu7m#dif(Q-U zo(fFhk3AACe_F;J4`gnwjV=;0VpKnUYKGlLZ+AW3b?p(u*9%*>_3LB5O>U@?BJw5N zW1^a1stR7p>9D;D==}EEZ)LEN?5j zIgcMznb%^uzjReR03^(3JQ)TCL#%O|s3RN(-3>dd$VgdCA~2X&2%F1>T9>s}M1#Yc zEURg+tf88oiz66l1k$K1onAnKrEqoIkH)X|y#q>o-Uyq*a>?`O^WKZNQc_w6+Y9yv zH%Mqb5S6<8ruKsPeU!Q0bLV~fS$>q)oxNBdijZZv`1i6UFu=BPRMHvKgEs=j0swsR zIfQmso>7qopSsT!00;7Csu`lanqd=%$ZVjs=d4mbxI(HtRkEW=79)3tWHH84V^Z-K z%Pc18D@+uL_F5Zz)|MN4iFb*uw8rpMxYiix#ezP6ENRM!Zxh2Gf=WN=W^v?1HfZ=Ks?SX2TK!{7!YHIeVEpDovDF%jNu zUxWY>{_YY39}PEJQ?*e`acZQNm6mqVPWD>O{fttBMaLscxhiyt;Xg!nRRu>LiSkMW zkRYbHuZuy?1lcA|Pqmioxk^e^>@EeHjUTPK*aWYG4dshKBA!K~-4|etcz3q0?$EA$ z^b6QAc_g|~9#@ROm0lS)QkpWb)LvWz#;+PknB8kzRUo2;xD67Ou%l}j-j1~_t`(b; z(}r=G#!(&0W}tH7(a10hpAYOQDv~g?iLUAXlh@+F^p08J`;?%2O5{$s9QK<%B-lry z%1PevNHiPs9FIg-ZDKw4TIXv(A`H$nPiN^?uY?;T`F^GGWJN)sumTASTi>T7L0Chb zO5L@t>CHjXznHX*v2S6@3APCE91@U^>{%_ZHsQ&j?4n`)w?O>zu@?gg-u>l|7JBvW z?jbJw&`i=umK>Cf3DtR*_bF+~F3+g@y#R^Y50|}UJUkR4tI?56DMng``Mts#GqkCP zwM}`wM%o4M!GR1~*UZ3d0cdxuKaWaI@8AD=_wMmsH#Renz~5$jGl!$sCHAEZ-%7S7 zka%Bt1OyWBmQ{EUsx~RK$>k_J5+FTMxi|X}Th7mYmBU6ETjr^}>YOhc0<3sMvRPzT z-CdJ|>5C zOH-*$GjZa&p5487WL4MfcKJBrVe%8(HoKWaxdN^#mw8ut-Vdz>O7!neeDfAi; zBw#)UPn8>qP*`=WcgP&p1oyObGCb5J<9S|jPXF+SKhzz;kJ)J+A&iXB0C<2wU!Bh% z*!kRrAUN0bzJv!QDoyct7)H=$tuvr1Q8;@z2k>}0T*xxW-mp5?A|En80b{|KNVa7u z+X!{Nq>Wl%NDj1ZM(+*mmk)J6Kd5lRU6BI?s_;HkwK9jt*1i3F3>F1xy4WFUXF1PZqdbKp~W60JO*3G z!V2+cC>4ijX4L}LmwuJ@SjMhGQ?5-m*mB$`#=|NCJQNkS70rbv)W(%hMme{UoxLzahKbw z-W0|yg@(Ht$GcmUCo?9tUWQ2Z!cZyL3PET9#L08tnO{M$HOAJ%Th>Nrh#8v@O&ClE z8t6gkDKW$Q3lk^{NYEoPr@5_hYwA9AapEPU4Yuh`8a8Ll)M8(d6c{-Y6oQ}bzM>+E z{ye;UclY+;jhaDyE+J7KiKZJjt3(NeEb$mke_XKyF_ZRc*eI5A-RwMz+IDphWAA1| zygRLoqEs@^w0gs+*(BZA?%-~P#%K5(dfxU>bxFTo5%0t5p6*{CC((PjD9t`Lv#&=g zWRv2ue3w_`&vvhC8l{aqM9MT|iF1{5OoF+A(j|Pek7>)1OTf@?-hi;rr`N~LK^fjM zRcLtM*`zFuJu_Ps3oRM80Ev@5IbiYF-xVDAc5UH={``pg`iYH}Vxr$cae^6q&4zVf z0oED1SjI2zcy;L>!lrbBo^6)hxmWmmsoGTe7kn1Jv*bvG5w>jIh7I$CdHo^Js}hlo z1+pznqu#J zO!Y`r^wB1f2=a{eAIs4j?*clSW9~dh?5)CmQ5CJY&-KnIx$V6k`-2}gYu~_ZUHt%H zHgH=Jj6T!}@LZbYX@C%+zU`6s*dr&!2RH4;1PWTeBwvip3U=xrO}+}4IvR##5>AHx>H60J+-K8Qo#pDD zYaxpQ+~FBE2}eNnX~^^{$Bra*hWjB*v(_ES*5f7$?(A%a1xgnO)=YzcjwiB|oGKOt^KC^~4OrXX9>fG2uAGbS|8y%)ilAvesElr0ok=wph;)c&u<}Y zW>xOryr(36qPj*rg9a%CVE2QWj|2<{L*6`8xT@7=+&gx#sJ!@Ayhg&pHe zf{G=YD|AL=24($(gPI`5_PA?5LC4*>F9e*LxB zYm;BvmPKdrXEriby{QS20GQ|}fzYl${_*a&55JLcf;&lWO{H5u;`XGM0{ zM4cUcR!(^LgpS!G;xn)^>yiQ`RA)~sKec7=R82g1B(^wy%aoK&32+ygwGmT`t!a`t z+{WADbv zC9w9kAf_;!hF56}k-&B$ijt%InJmS|3IO4ekfDRwvSz;AXK-=K;42^@cGj!HibpIF z=XheWD8V#T7?nI63KOCNvcbT8wkr=x5%07zZ>CL)uqQtzkf@6SAR)Q#Tm=fbX&SSH zvJ}Xqo4eS%4rSsP?U|T906d4KHZniLp=| z0ai2*<1ZyZl96)#^8pf`Q-;ZyE|>YvLGwyRIK`omfgV+WyeoAmyeXT1Y8LxjH|h^VI_Ul>#-8=r9{qQL{%vVV~UF@oLY= zMb1c1EpyMa=3nII#6ie2(a+FbW5@tPThL#E@&K$~h0}gv>@Z0KHNzAu$uI_<6SLt6 zX+kdvcqE|oskm8Qw!&LrMBLf8H^*OS0zj_1Tl$ zT8J2*nlz#mi|#W;K!kn_1Yt;AFHgIT9I_$}Ja9Lmf9#pb=B%uML>XnmvSQU=F+YvOZbP`#i^%N)r@6EVJ~#iDnPhWfCy2VeK)7ZW&h?^~9pEZLkY<-IqU z;ev`p8e7r2vcX~!Y#~c_5K;e@%x)sFMALK&_rCD=A-?oEcc-p9SDqWL1;;YF)BDe! zQEwIbanEo|gcuYOb)4HsJVfJO9rP6GIr3b0*Do643gm!o<-8K`c^3Svzykb zH$(MT`81vodpvO7(j(zJTXI$T!M<Ar5qLW2*Fo?K*m|+NVtiX z;z#p$cz$~%R8rL!t@dSUz@={CGRQ4-E55M0Hxf*=-rd}h<=Ie90lPy_Whw3}Z|@2u zctLAjenCBUhGlV`c&y5~tZEFM?O#8d(z2_-a5X0)W;Zx;l22`i1Vbl6YaKYw?+Vdk zUGN%T7&{Deidfyn5c<}kXG|7+SWeDjh>EH0N;e@4$0KnANXTFuMLiPo%p=j~yVih7 zskec|z2X|>kpSqdW^(j&H9KvpL(gs?p}dgf3$oUMOvE zgG7fmIm9ZH=MzjA3@i#qRk!@P4(A&ovxI(ZV&e3lX7apD{7?W9{pTq(X+XJ|@6Q4f z&2w(!GC0$Z`>^|C>+f%RFe0pJA#U0oB0yoV6QHVPL3<<=7AJ$cf&T&|_<%7!9NI+L z*dWpOH1=*5BEgUWh5*?Ko4#-C2BkV4n4R63y!lp5A1j2Ql37{nALUEIq?aLpj?x7n zCM48%B!PrGTeA!*K!ke>(BK#;U=SVve6yi^<7)ldLq2&Y<&{u{8hZ>90Q%bRYcN=L zjJd!EQb*?4z|Ekokz*$!+S^y1n0(IFmwH^I5 zcb$e$k(KFrl+9oeLVbl?Jyu4_Dpw68q%*1ux{}Dz#E`if_jjKaQ9$5AVBydZ$}1&* z%NT>@}>OhPE6PMW`9>E@`p<^$F51TK|pl2E0k@Sv{lxt40oCHo{M9Yv3 zMN@9a=^9(!3N@s$N5V;9HinX&>M~!MBXMV!7zOphG{iaa^PnJcko9S~Qk9F)U`k5hX#8V7lz{k!$C&+MU04|PeqWf%9IEo!r zu1uX*=jWI?y+^{Ea%c!|OB2-@A9=OrLriYu`@xj27{%$l)1#?twqB1Bo-1{U`}TPn^J(VQL2EBvXHi zbmk=u2HUDlZ_|V}S%#bSvrHjj!u%F|Gm|*W(5g^Ok`N04wC6}{C5F#e_XJ3^SIU-a zYnMw~J3kjoSKFWt$;H0;t`#HBQjjo0VEiI!81e3H(0BYa=g36sDF0fa7bI^CBn}>l z20;@#XQO4`zVqoi8w?Eqk8nR1<~cyZp(M3`PUMw09&?7Sa}_7bQzWjh z$=;TM7+)FR1twsKJt@ab9nWiU+-LSDc{L?bb+3AD>I_kr)RkP~`e~=wxODO?8@?h; zN)0F5m{&|Wbdi#I5m(PVI(kM}w$p?eK@mJ|$Wf_i0TGDqtAcf**9H9~lwTpzi^;Y; zGZjkY$cGRvBey0$GrgE~Htj9!J5R7s{(nV7h<9tC#eGbfIHzon9I5fO&1cqM4O}f8 zwJ$9Hs+)TWNJNB00*cnVVPB1RWbz$-7SoP&=$AvjD8CtY4Lb$$f`hva?xbC;}pz199B=8c*5YjnwRspE=j)dP*kYZCw5;4(Dhi|0N5T9dK7tQ zOSk^jfB5?v-J&@B?=w)bOR#1kBb=s*&Pcjx9W_3)GB`WjW_6wUGT8{5V1@9Sgd5%~ z+y_3D=A7boq50w+*eFUKD&G($a|p*}XyKiQZn(yoyQ>5BoR+SQ!vq-paZR|0OxBy& z?*?r$HX7->yvMx1_^Z#83~eJ+;o3x#;Q ztDSUL-UxwK3v8WNCrshjbz$DU)f!E?;5L-Pn_#7FVfJDmQD@CI=re$X4j$I(3`js2 zeW_$??xVvp3>K?GSbO?TGB+0>!L{c(PzU4a)3C7damUjT>6z^w2^l?0vq#zDR{oP4 z#QkrEZ~RP4h*5!VDawxN)tMvTAs**<0}`QZuNmjEgAV4K*w!(V`h%Cm{)xwDjN}H! zI#aVh?gzwQEJHmT_bKR^ur7!1)F5Lm4?v;}Gbw!SzeAha36_i}?qpYOQd#dHxZ(eVY{sddU4iuNIl_?2u#p30p-ueYhc(>Q3dh^h66yvZ-4xaB`1qvo}Iv& z&?E7#O3SVu2`lXhZEEb6x~NO~YWKEly8;OTT`~Rk;?12W)x)c>oS0tM=K%?OmiY`b z_yqbiF1coJD$W~;qnJC(aq2rEGs-YQ$;pqXVDmvC7D$k-rzzZ;UK@Hcj&z}oY^*u< zjJ7dDk4FEp5iI`Acy}dkm#)%zRcK7lt96B|da;U6odKP(VvW%s1Eo9>w$>qU^t@C^ zj8v!d_*h{`Rkdt*3V7h%+_PaPhCuOFg}l>c?CM53!^9*A9TwA_VaWw0gl( z7}+3hgJ1X8ULNm?Z3mWrohE?Z3lj*m7bcXxpBvxla6vU6^}Zw-WP8GL#Xw@_MlXd~ zdymOs*8tqKWu{M%J>rvSjfTR^ok|jfxn#80s+4QlAMyr95;HzlW!qJdfL;lP_Ki30 zqY_;1?tW1P&s={ynLyM)9=VE?*VSRA&Xsin`r-%QWPbH7Dbj%r=c;eS=g-}slQzTG z%87vdEANe}O;zCxG^9IY?>iL98yqomb}3mYo6T!4f!%FZSsjbKEr;tK`=DhEo<&@G zI<}FvQNWYfbmpogV|EdKa@d&h8LbLD6p<0%8Nje%Yymu%g%^{5rc#Yxl9w-mMAlv| zl-UfmFCE!=$_g?GW}WN?b17N^3cEBXj@A`CaL}s4jSfe#D@DG`P4D;UqG&3kbQT~1 zrmn6iVy_BJ%sCk#!NUM5VZ31OPnK8F|*n9FKQ`Eo85i>f|7a!5)kYaKUu>e zlMR?ws!3%6EfA>uxK{)cX3)?*+l*CI7_tzK?xc7YOFCvnmm3}l3H*iix#p3$2_#f$ zLFfG{km$1+$NqvxqL^g^Ru>4^zu&}yS?hVO748~_v^7%9&_E>=x*`Yu2Ghr+eBGzb z5I5uGJuTp>{vxe~YyxC06G*{S@nVQbF!!?M4BD zX9E&qVbfz)yo(G~hwxTS{g%(1zYR5(!bGSCblxj^mnzo-VQws5!U8l*q9>5x9dc=K z7^RpyWfa3sv5r*;1R;SU16xj&OgAAyT{H$W%^;I;%Wl=7qE0rToQRTXI_zX>+c+(r zQa}0`nXyv>9V6V;*4DCG+i>aMi>1{O=N_YPoxA!D;jJ%h? zR+WNw%_VC&w8&9n#zEO50d}333TqLZi$ER)(gL|f`jL0F%Z++kZ8 zthK;p=47~@awJ#|jPtAnkE+@<=Y$MPgk7d2E9q0pfZ~7UiG*m16OCX!bvTF6 z5%sUAr{6J@_I$=PgiH+eNoW6|C~z)Nw19dH^9+3OyQKOVMC62P-(rJ-KL#Su3x6vh z!MV~B6e8Qp`-mR3yoPo*k6+6T9b2_CxN{%-`#W1bqW{Is?!84<#aY!{B0%COnv7vz zrZy>}JZjPM#?-H>Wp!uQrkxo_*Viu1<6E&GoGI;9o>k8&stomb z#?y{m<>m2jN*~f0(7J;F7CrIf*HK^|5&SH^&aBKY=?G1V5%x1%Vwy5W{Yk8oj)m4J z?8Ka1!rDlLn%a~y=2otfPiMldiz~=QkZBgNx{j~jP-MW*BqNOXXYnn3{x%@3fa2q1x6qwn+{WhT0A07|;_g1~^= zv`=8V>Li9wGBX5pS+mGscM0-N#~=TxrK>61Ga!9}TYxfIyQ)$2y|z3PEgIQc>y=o$ z%p629aVxC`Jr$Hz_MnQ26A0QaFN^0PZl;ChbH9tGD{cetDdqBqBIDZER2`3}nVTsf zpGfWSH5)_cB#Zh@rB-Y9sF74=Bz&s$2lC&d=M~MDVa3P2H|fm8mRfvO&m1)Bz?PomWI@ze0QJ_jjr{Q;NR6XctP$>XPcp zq*({L?*bBVC&#cnt&fbec!xgxBXyR_9omuyu_(>f08od=Q3E5@eXTK=s0s(WMgqts zGY24)v7l92Vx`PTbU|*u+lCDw!2#)_T2HjLKdb4KDn`ro%gEIz0E{T!Om&-fqlk~v zi{x(Pm{?Q*5?1tN*^uvW6asncdEPfo$^Z|A#l5JgQVInHqG+IdgAXn^5?Ti8HWK&% zNR0PB1QIdeDB8dNwSmOZ{8yN}iY8qF*cP30P^r#z^ zhklu#BY1Ic*GUIm-+$6a4REHe6R1Drfg21z-1E!x7m_!b^`7~B}*L`&Cf>-pn{K*Z?U zM8E?sa{QSYiJ;n)b-?b-421dU(u=Skh)H+-gmH;Yu8Hvm? z9FJSsYG=F&c1?$!&k+0r9K_(gaIWb36F@R)O{R}#v2GUX!moetiPm3yB;lHG2VZ{H zpmo{*nuWj>oJ?nOv`}ABc=;X7-uNDw`f2|vuDPk`0x7aX3k291((9cC(7mEeO?w*( z>KEod@ zvuo4Uf-M~)WH~p7;;P;Hl9byLf|e`Ry{=t?V1*>K?qVl;j~CB>@?Pz{k_9*ly)O!I zIR7PxM|2duqLf_o_eqT*xHBEM1$k#BaLh}Qc^#NE$~`jjoFlk^0Nes%$NHoH}KE-HcFkkGmX2-vPubiOxIe`Q~6NQRek@!M4lN?vH zsuW}o@!3xJFht&yo2@9lRZ`cHh=)<`rS|H9Zy>-pd-rPiKsP^`kqn1s_8uvS+e`NHq6%<-eM+dP9iQU5j!@1(8@E+%+PYnSi=0?WO>xS&A3(y53J7dTjlYGSA1>YTLL000`+CR~ z-z8d@YDHrGkdJmCy`#@ha%eoWBi0kTD;?apuaDLtlWZvW?^?Eu&*mMzH>XsP4R z9P+0iK*EGS^NW@Q z4tc~kArr2^SnJTfUtCy&8tW+TW@gUPhS`BG+E`xKbvIrM3h5`UmcPea!Y_#*0>AQk z%r^1X&0s=C`g83(XmAye1Bx7U4cQOY#|qBb9_9FFM%(Zai8#Q|^SKk?vZ1oGTOrKqC2a zu0vozi@r|^Yo!-`@5%zX15{;F8r*@1mHlf+ES~)Y64Xg(=>QW%E~OBplzXt5CQA2x z!!INPKn;Z=2HK-4kg}50^9e}gfyW7Gi(J23W_T2ZMkIiAd``8s0=)o<38-wC-v$z- zMIIaJH-SX*irxP8B>>OIDpWjy1Y_+peePna8KJ+si+oN4v@|Av36L0Pa;Sm&I&GhM zzN7Fz_OyoOj4l*$A4J`BCWoOVQcnFsadGFszY%>Q zw}Hg<3V%6}IM=8Z+40QvC^u9$&e##pFJ0W~u=WEzK0#>J#Y8mN8HoiXh@d(!0hG8n zy2I8y+N%wU#=D4_aL=XK{g(+UE>wwwpX~Og;Xr0bqU=iaVmj)N1QNgf`Og9qU%zBs zKx8jsFkJwN*nt8PUq5HmGL|~K8WqrM>fKabHbve}?C+G5W)Wbw6tHovglpzf)&@1@ zu{J`ouXGU|VY--&5CP6yW(Ad%4;w)7wQ41_W&|+RNUK!ws$pas#j{ ztCe4jl7G$s0aMJio?09Mt2n!&Os8W#3iJz{B^XcuSD%k8Y}BEu0Zhu9>tzUimFz=7 z`}R!*{U3fQUxxdDQi* zCo&$ojqaMy|NVdb?;ol7y%8y_!2CfCG1*{LlROrJHxE6qcbUZT~v}hL# z5ViBM&~HVqHjtnfb^wkn)cZyCB#pJC!%~|py68A zp&KAd3beaaY0%)0?3MsGG9pMzMn}h!yoZ%yjbiJb(0WU4vQjD$+nQB+@U})`WF%^i z#7j-LrsK&^0g2hWd_7(7Z_8VBHqo9bqtwNl9W}e2xw@>KivAj%vH}t#_`n%PUdkyo z=RN=sZH;jlGXgoS$7-8s1K`ZtRN8gsZ!$Bj8GP4o0*RYN+&1q9V$5r|-njg2qOd=Z zkP*B83j$cRM%J8AbPP7`n0u z#~NQaE9bThFtL}SxU2n%lh#$4Z7pcnw{(ojOaxax`^>*DdSlQV;yi{9i7C2~mH7BE z^oi&!c~-5bVx1IWl+)Yt$xiy#2Hu-ycRGS?3sr22PE@N)>B;zPPlbM6eytU@(`P-_ z$)J`goI30a-=FsHox0Yox1^Wm71SW46F(YdbbY04Oh!m&M#9gk z?05r$_MGXCsJgTG!Da}oNN5O-;(S)%t_BxIbB+(%Q**~F@G&C%J#A+x%S&!z1Ef^^-?nR(olx zw%grKE`B@muLFsBz_2UzkT(H~t;bqBp1NuQi9RaQU<5>FBOrs!+Us0$`K78Wd>Ppr z9Xfz_>_=pV$g0J6WZg@wzt4p zhI&zeHIz5n6lZ;hJ1+Ja8P3MACD`;lV+=_A@gwQopFaJnT`@x?&R4X%jxJMbE&cte zfW*uolyhms$3dEWLE9)F+)jBRBt2@rDG`cvD>X)BeW|ZujBfOQ{R*R10HTCr#whO< zV>>T9g8?F6SE!7F6dKXUdzYyx6(#t#(4CoZDhv>iSr_+;#t2V$<8T^?ykF>10ECSE zXs8Ym5T<0K9Eq&M^GpRFv>hEcw$ih$QI=SaAA1$ns7dvMZCGxw8?qFPuRFI1*v~{1t!%D=|Y2eeDN8;_~LE{rsWz_Q{^0VSj$o<^Uf| zuD;QD9M0 zWO`YjiFJ9>d8^H0n*t*(5?IuA1r`#92%d~Nu{Bk?%)0W zf6KawaE_Zs(TW!Ge+St3 zE}jl>6qg8_98qktE7dX4-Ed0BjJmFPUPXSDH7_+bsCDt4_-ud%O$z^$fkf0H8s! zWU>}j$-3L;YboBT<9A%4-iE&5p82kd+f}h~)44NSHtHP!5|IVa6nnC1vIWRM>E>Vb_TIRJPFxBcn}H%JI4Cbm7UPQrdQI zoKb@oq`^f+I@r8%JJ-niqd5{k48daBd*S$tR^ux-Qybt~wDS{}ijRsiD>K^I3f)#tk41z6P+9m3(-?T zMsXhF?{P)|6Po1wrwY2z@ZsrMk>H@fs8frB9T~l50h ze%+aW2dy+qMol2(49*CBucN@z62BQ%`aaQ z8qzyac*1${ur3YmQlavck+d-m%$0sAAi-&zRGJPz(P2u|vf0doHSPO>mV}*`&R~v` zoVjf2`r|2`_i!$Ay}fzyC$nyn{<5;e4Z<{8T?ONDf7zuc29zBc2|#$&1o{`bKF$tC za7=V9ap~)9o2JECssQi+P&yymC!3-%0mY_v>Rq(5XSiMk52_Zm0^WmijB#&oi*=q- zIkVBzf2vQ9`WIRbryVC7QT3N%H7Ho_T7$ATep+9PGf($64XS&uSrEVfUVdU0S%3Sg zY;X>7mE$d{u&DcFEC3Rj;Tg=I0BCE2gEzsFn@Xn*qERlfnP9;z~>16k)_ zK)^uAkg=!{Rn3LwvBdu|tsB}_<&6LNfBn1VM9y4o_TUpvr=LSU4^h8v<7w)M6s>QuV}*G8ILb3X;n4D`A{l;dr;$-nT(2_{co{3*DGO6hN~73W zm^3>aT)QC5;c#R=0C4e83`?7cn8i(0?MSVnOsb_&jYNaEv>DZfL8&tYLo|an%>W6d zdQE9rogN(NB2)A3SzReIBjF-wM=gkY5tU>OagM9is|N(-0JH%(Z3{FDUw>-rxG6bt>Jcnta-xO&Ko(tVwN3BQfd= zbkl`?dcjjm_F>UJA3(y+7}rpZ#3O3c4Ulm3D~qi$UMG<7{h@s3bmGSuiNoW#ix^Gq zZv&S~&yziO2Nq(|?@KeO+n-2|Jzb zn3@xAI+~28z9n?Q%1C%!OHYjma_Q|6Old#=74UjyBu3P80*XnEI5QLJlq~t^7Sx($ zqn3^Ac^c^tAF_xzoMI?WvNw*}J!=4(s3jrCqC%)mwHyxlcxT3J@2{Smx`eUS(Ya{> zuBJ$$!@mSY!u;nP)|vOR(P~qbZqC4k?n01_`2~aWoVuCTn7S5$fRq*Y!Vew$5C8BF z2`aKbf4)x<@0q2Dd#Ct1y5WQlgT^FhE&l7SR7w4i(kdsOXT^@P%{jc(b8EEs=nm#c zu>S%!oq_J)U-tcf|32wj35ud~&*#r>2dqv>1YfCzOkL)6%CB{cavzo|s@6v`)ItCN zAOJ~3K~x!3C0Qx!EP;fE{>x>0u6ep1byA}c6Eu(G!WNJcH>^tW2t z{FV1LU~?wc3BF_-vDxWPJA=d)3}7|#0DtHd)b<+YH{sSx!?2PVRQ7_YVshWQjS*y5T4a}WE13iEI zBt0DY9mi1hMzpk75I}+DZX3OPhggRM5&?8gJ@;^5HKb8iG-M<)YOz)UhTi5G z0z|F*zL~iAqisDN&c7d=&42Y*nY>a$=o-M6r_dE=4SKkAaJO&O&jg- zr%)6z6iB_=7)kt)jKID#K>r6ks{E|i_1|cP-E8D+H0cKXk)TUTRIWDxXyE+T;8?s)s zU)>oAMOT{I^Z-bdS99l(^x&jCbK|{SO_4iwUtzNObVP6*D!p4#G{A<_z9YJ}9siCr zttZ%i)w=mfqibV!zlN9JPKS2Bc$bYhBkJS*H|F}MZs0Z>F+cghHzxwSC=0$nbl}Xs z5V4yel)+rFmjV)U+&XgY)qD$$)jhrfByQGrZRz|+1y4p4rD|?=P6<1LqnQA~a*MH! z!BueCGoojGh$Ep91$$Yz=>14FY=IS)0Ahgz0+8x~*xQr)u9VbpU6dBFVDH z*!rJ;*62Ng&GGi4^20-UE?nl9GVO0{p*?3--Yo00hUZqFb7M^MlL zR6xy_pQ9+hiki`dIlcYEFI6W+-6lFu1<+3!#H9i1GZoC%rva1$F1C9*$ITB*U(Rxh z{E>Bv?T**=Z`}{C0d9Ck+4hmdMDY9yXD{P9G8>q6AgULsqVIqH*MA?X zxs~bMiWOiSmGXI`Bce48!zE(x&(%VVc?dYr6RoDqjz}(!Zyb1>;e6QDa;w2cE67fN zmbiOkegvC?`=-B_Jqdb^VdnY zGi)>qkIyaV;$2#EJ5_GAsc1%bHo}3=xJM|gZ*JXJ)2yXljUjXT%< z-bP!Ivdm6rds7)F=16ECI}@Hpvh=Wl>-dd%-$g&;2_6&rbpu=)I zKh3?zBxj6aE`g_(cW!I)~5_Q^<=l-+5<%cs5IxBna8;~o=)!ByD zAy5-@vbHH^3K%F0${C!;dhYSLnw_!gdzpczzK5o;R>01M(W);|hZvlbl#6hT>{M}` zjHG`3^7Nnop@{FKjHuAG3#Mn_kgTL+(I?0e@tSvGSq5;-Yz_JzS_d*N`IWti&k?DP zXNlKhK%MyKzw7uyEjn2mMFSF8$#oq-N>ea8m`;ld8)g{4t(DY+OH2a0KAX4=(7yytzdQedh=Z9 zqM|iPcH+OTkxV)gF8C1>1&fX#Ra06~U=OoXz50>E+BapJ>)CkxhR&H&u! zk${2^W!0K7C>I}`dx9XuCNN@ac5d;VOY| z%2LVLHy3H#HEa$7+nS6ru}v8A>3OjG#zjH2hd z9*R93%%XbqYw&jCS}IQM*HY-*-H1pDDL+uPqAt;XPgxG>3$jCwjQgGiBoJ8mh3_gO zu__BHtRXOwfX0!g5MC$(MeD)QAiZWlKyjX;3!PqX1t(r9qu)hm(s8BpK`9|y-}s|x zSf(QwkVTX!+x877qZ}UJ8-r^-`_xj z4iu5G(0Zr<-P6S#f2+ucZ-a=043OKu5=+hJrGrE+{_U~2DEaZWJeuaOZzY99EqeQ2GIU6fP`x#EVjFcp#RBj-zG#}m;Wm}vYXn?d+Lx2YDm|Ga<%L7SHH5s0YU z)Dv-+ItytXT4$Fq^Ip+Zm6_DwsiZhLQ{88>sjfKPk8Iz4=AusA_?WM0St6qt_e+gQ zfQiVUcJVd!VgoQ)hez!J6L;kdnZ`(`8nWmCR%A4*wv9bU$I{Yt+SOJFdIW5vZ2PVi zoH88tI_^JgMxKoy>Zla=S{;%MU~GEo`V`TwR%jue?N1>s7U^9Rc=7Q82vb_6ROCPT{s#5@PL{54q_x~Sas>h<>yPZuY$4vhB=^Nb z=ub7M0Z4S0#yl%I1zW>yv0F*!@!2ZC%dpCq$V$GrP+Qa`C_`a4q3elG*HpB%CPS}C zI25?#Pblh$Lflu{#+-1i;3q&gXG#=pyLDPp$cxb;029>oq-n)7yO2L*fFY2y#8ha+%+iJ6h0wX7am;!+!1g|aHK-wUS_wGzTpKXX5^!yKNa!c z1LP$cHC1`MJsst6z@+h9ckYquU`Q)*_8V1)#oahU(p){M6eK-k>bWeIy#l!gg z&_G^;0urV+A+U5F5Jr&Vj(f?j6pm~%bfu%hI1_Su^4iWwWY;HyfC95#kg1>-ch%1p z$~_ER0f`w6a)*zIl+!J10g3qDR{+DELT#?9l@%a&@IB*m2_&M=bacy#j6*~bq7SrN zxN&XOc>pAog;MQ?m6Njo({MJBpiZNWmG+Dx!M_|xOnEGdB=J}rQm2mr^OM@NqcxmL zEtWD8Zb9uY>LYg)4~}zsD)ajH0mR#Rx-U>}RdciXfNAb)e(8a}^l3fQe8MGE7sI}# z>S0#GpX={<@VS`{<91THk!m}o7~ZbZ(s1@dnM+edEf7hYG2m9 z15gBi$UYK9ZO-|p>;Oo1A)nt1qQFKJGE3Jnx2GC%xM;SVCjxEmpu_L=Y?7A?knkdJ zM}PV}nukKBt>o1!K^GkWQmk{#!k}d-U7*h& zI)TKs=BhIrWZ+?DL`R~KC+VlFe#3SG3a0+b;NCAEi@~B9Uf(h!6@O*~-;G;>9;~_+ z)9MK3uX?_om6ZU--6#3ZsxfuFP3YX9)lpXnb0=l5rmaVfhu%YmB!UYWfc`}TGewh9 z4Ma4F`0z^%=It8ASQWK0e%Bd^bE%|ycZ$88N13(r_2zXp>XC!$NWkjG9e%5hAJd*|Q_TVsIV=TB1 zD?c4s1H9nW3E(jOu!{ki0!+prm9jgDq`=mkhW=6_9vKZ|il+;5;`1QW>Ms{rC+k8WJ}hd=_I+s`vp#-pIz z0w9;j{u>#S6(Jl^I{C3QWk}& zbk;a|dH-aEgj5Q%G-Y|_&|ROl+RG#;Xu?Qrpn z%I3PU&OiO@zZpz+wLI(Hv<88SMnI;0oZ5Rj_m&A3^Onk_oslcDZm^xYnF*M{W%?&f z3ap|lOZYVUh$z3qNUd1;N_`@ktrS3ZL{T`vchO0Nt-yqzl|$|`dW|v;<1XRBsiO@X zMuwx-bs_!yO*Kly%nc5`o;0yYUuCBU30HW1N>xQIK-WkRxxsP6nae*FTFT|6J|ZV8 zx?So9XESP{2R(s=G7>`UqCQzJ{oaTaaOmRus(Ta80PFWmw}B|ScF$v49#-~D3K&~3 z<*OqM^avM_u$moRf=G0TDimjie$32lcnwI@`Ycu2>3pJZ7N5TvkdT4sMZ5(PqdSjy z$%0|2fa_1Gce6*WBXcglj?|?*{ zY1K%Gf2%WQ-gkQ|-C6DdkeGgijh7vvy~;lYBrcn5nh)Z6Lj~EW?H)*=yQ8o&GMPzn z`lJcS@87!$g8GPT${--|?s?DN*|*meGW!s%HBuHE4DdPuA^PLfg^$iz>D=UbvZNhO z+6>NhMq@jKcOXN{*FgCM?bDZx@4yDdIS)M>8DLt&(zcUAZAE3(St;xXS&1lW77sn@ z;Y2Uu-mqD;lE(f~uh0Yfl zisKA6w?D#)fdK$ur!VxThP>#;5fHBPxicY`Ym&7w5UkgK=qv#ydiIvGU>V#D281cR zRXfB~^FA>*;9JX@HWXR)z`9t&q8w#w-xx}%4vX#UHcctyMh?FMmkjGo`|ERCv&e!f z8rR9LUd~7WCURzpY9yI7U*T&zKng$$c(7+GBzF@X*B(uak^Wg|o`3om1Bsz9i8vMA zVAf7J6<3Cw%*8O~EjCatqtg}U4N%fP?WkkEKU$-i z+QgYy?M9JhuP^Oi3rOTP-aBj!Bo3EhQVsHcTcLAqlD?J^&nUQVYEwk$zC=Ike6T3C zj%m80Hf8I_OO1pC@d_lYQ0g23n&^rBb3o!%gE0(Q7j%y(;KBEV2a5ivz{vEZ-7Y!4 z_W~s9(jCI;mA``y7q{^SNQ{I029NE=m&clI*Xx0Q->l)+&G17fdMLJ=e8_RpV`ZSF z-Y1zBmgx>C$|mn(YXJ#{33d?4?(C?MxZxFC9=zoCwky{Cp3WWHAgqDJNw=6$-*PWk zjl|eW%e899-emz}7GA$-@^$p}Pr9bT#P@G8kr*IxW+c#|`c`BeiIOqy=lh}z2K*Xmo@aORNEsk`Z`F(lZ*RQD_8B6YQF>~V%?x` zN(WANU3P`%2nRibI9~)(3H-(VVLMaDxNc$UeH?58pXc85obkFqNH~Oa7aaDD^n8YiHcu0g3^!$g%=C3Y5hYLnT$sVl2dv5&I)_4J>-FpF5k5#D88F1Ze9b z`#zkZ@n@dTqKEC{H>3LJ!E7M0<@S~I>9|DKSoAOZcT?}<|E%vv^k(f{X;`TGlJ{7T z9`+j`Ou-J#FHs{H&if4Rrrc(oQ+Fs6)k$Ce?pg9d_CfUp_#jMCSK|`YGG~bi;s8Qk z7uD}s4F*QjfJwokb-Pb*KF@5kK6Qc04#+^s*A(^2;3e1y$Kc0#<_XAGvGv@9GB8A~ zPDMfH0W@;ZFFI0h!%)hpI|tN(apYMVlA&8|P^gj6%N>2!MsYpp3}jV$c-#{75eCV# zh<9drDkJR^z-K4;kRvLGx$cdw4d#v~sBlOK!6;>W6qSy=>5g_*M4+<^5?oT7?ASP5 zwJ)?abL~R%*aT9TF@aMF-(6=cWO-7L*5{9a30i}WXl;q);1x+>?o5c+Bjq@Ci~7cgu1Fy9 z>&uvIt=Hv<1Z8CdiR&Hn%u)mb5xTKi6VX7z@1gG2*>(klTyX6=iEuKr7OuKX?%59& zoV(3d5d4zpg88Kr`ElGVh7m z71DtW-0b-#njICi7I!{0tywx>0H&Q{KjbTV=hXRcX}EKzOC#3{kI!LWdtaq*@5s~| zNld>&*XZ{Vh}ALe>pJc^I-?PkwqNHKs2v=(ACzZVRNDl2wzmvtOc= zMD2uv!c*srS`n`&l-2Z!*JSHM5;m1+DDPFDz~1!+3Nf#v+ZE?F>_i_XP>4@VLGL*c zy7p;sstd!xnZ0{oiWoV^T&>Dd$;cub%}-9n>PIBB`%c2aQ$(={Xde+W}|o4wJ1{5nS`Gp>b7{2UiGS~kS`JRQ4O}D6&{Tn-E zU!-)!b)D|lab0%kT?Lt>M=<=Esf{j9zeaRDIyl8-;)p7uqtT-=kS^9JIt)453{V)` z%{}iK67cBrklOZ+-{ps7ck+xe+1K@HSvQr_ZPE9;R^kzmcv}kZR`mW;@)iMr4uJxOTW+`w4-t#lrFOhH4&#C$W`v}HFQ|8N28#<__Krbhi z1~s}C&S*Mlzvy{XYp0BV6!cQ?oIcliD9-^~nkcX_AW>UDu)qy+7@6H0&_Dz;j z+$uogdb~%`FDP$Z^o$k(ItqM@i2n>+m9t1+6|Pio)E)YB0b>0Z}Th z3Uvos1K^OtJkzpuFh;bPOQ3#a(nnCDW=6_Vkn)0S33k8u!mswO2=R%Gb(BR90sfTZa<3 z%}D$$fJA|yE@J=oU0p5iBav@MpGsbx*uBuaf@kW!-r_}XAfdBnMeMIjA7ExAZv2+h zmOZ>vU97IqN4_WD-n&KTZ=uVb790rb-~SbX#5B6?SU+>aSljRVdr|)qT z@%icL*IyM?|MU_=>O%jZqv4((Kw^Nh#&A1hS74&R1IKX#3*B0IR-XMt7XK-oji3V& zJR&2&(v?FvqP@k%_^AVM<2~Me&d*GioUADGC6dDFslaiMP~+OZ2uzR>j&`d!&-0n` z9H;XoFi`BMtz-s!7v66_B>w+2`4JAjAW9HqaXO_DC%5ScU3un!+px8zu;J>hz($ z1(1jWe*raoB{GDSy~yEqZMz7kWI*&C515@`OAB;f!?^&sm_;| z;rK6Y{2Qq{UN0f1ILJs2zaSoXP6bTlWy`q!9AIKn16bs{XPsGz z`S(+A_G@}Y&TtpmDte?%U_QZ0i=IV_eqTRJnE^Xi9{BcN#cT}tYtW(h!|@|Rr1ovJ zanv3(fN*-=97^ly#y_gLJCXk4@+G5JUw;3s&fTUq2~^c&>m#Cy)J$rV ziuU^arJ>JB;{lRf>vRhE<=~%hn3M=!GvFNDgZ~nc=m5^;?v}&6UcGl9`R(EQ-z&Gv zxBUe`;?RjdM?<>ZgtveB2uS#oWx{vZuP8R9X@>JlYi1^_lCcCxXsT;dRcAkSiVM$R zl{AKaYL_OMs3)DC%3FZpZh6LM3O$bZT`p;9!uhE)r8kn1`1HxGU_X$t07S$Yia}M% zM#O)o@t@Al?%)*P-5r~9%`&)-P4k(`ThV*)&Q+9itZLAm7#mqL8BYq ze5P9p(2U$YP6 zd?~QH4}Grv$?qH29Wk%Nhviym@f#|wpOL6N?NPHvWdwv{&%4G*va08etWo$0!Cp{@ zCA%(~z2u_xrs&RE7uM9%shK0?u6LQKIQ;BcgIedH0J45Fvu`cmQ%CmSvA6hN_(3U` z4%&*+BoI{h6O*k=X;Fg!H+(6btpM(vRvvNFy{kLT2HRNKDCWF>BlQC zcV4TaV>7bj&5rLb#E17cQQP?51z#+zl>s<53=l@NVbZ$<&b9dZduL4a>_WnKU}8`9 z?3Glsz6ZuNZy%?&r(tIX;@h`s3yWd{Fw`3RAhi+@R}P0D?sZ2u=A(UKHjpSbvQ5rP;lFA8ju*$R!ZAlL`K&%_T~f<$))}B*+9a@)=y7Q zAHxXW&5@AckuO>-k~e{bQ|0ZlSb~;c@R}3%29WSaX-Bs*5^jMwqfulg7PaXWAaQ83 zJ8!Zbsqweh9r~%9&u=&!Ca*otk~IE+DgQr#L|dQ->u`kdmZhFCH8MC($@^?(^cZSW z7BWUBwJ-TQ;n1d0#tk%(ps;k@)^IAyI-FwmcpD6SA3WwQ{s0|pXJ%hv010ns+p=&p zqeeo*>9W{5^-NF|sCSD+h^Tcq5aE=F(nXwX{b|>r9Y2Eun|16=7h#*~RN~jsRysL- z{ie=GU%rU`GVORfNOnmW==dN2`07DgFYYxfyq3CIGlTFE#QRtAbpVNo>eGt59r_MP zX06!g&)FR*gF2r-+m{%POJD?$?RDdgEIwtckH|b!rX2)yyJA{b$3Bc8DQ8;4QNLwI zTTYqizhqya?B)!B_aCzEjf_NRJ#?;U;T<4Cbq}Hz*GW9f34G2Jh&=qM86+P5(Ww%& zKeY0T&?sb(D@9I?nPPSX}{zBU?%EHRYE3g2FaIQDxW0p&#wN zse?U%#1vsbYdZM&6yJY5eT-q0FTYlivd)k*L(UM$@A=jsP`o;ydnl6QY*+ST1e+@x zIs-Ct?)MoM!fe3X&s;l{Obmfy=3K}mslK+dfdbnU|NtSOkOwNV7*!kkjL6>R{WJ3<7a&Uyt$Uf{xdJUi4L zzI(2(+Lejo!|C5ZLUk;FqIeHA5-5wz5=1m+6lD zNc>dv?sXtR3jTE<5g7^BNLZEyBw~)loNT=Z(gAQ;!v+#Ax;irw1`>v<<0zki;t`nG zMVc5YoF*1H=13?KqB)$Rz5s0REUG5js~LQ4A#P{A6_NhT4R& z+9_?;q2=uQI*Zo9sGnV%{l2+QMoLR=D6OeD!NCdShfkaYP)cHsABH}|~{Hcuy zK+*Djf(WfI0U7;W?~$!l2guOR$YZ=t;G{p>)Jf_3&)JN^L%0a)*-Kz=aq7;0zqz)j zxZMD@vTL-MwjRz5vYi(V_zOU$>;%k!zMp=+&~>zhh2oS2(k?WWY&Cdi))E={I`tOl za-v7w!_MwpS7EM`hLS1R79yh|qQ9j5iXRoct4<})NwnN_`&OJlSQwLmV=$;12w&!npSkv)^_7xqh=88SuNsc_8ZN5r+)1+=58Jey!8y{ zzoSLV-#dUr2h0ebjYd7Kr9Xp%KSMu~0o7rLKe* zrphPE6Gk_xz7Aaxh(XW~c}O=fW=4BWlyz9_?~Qmn;LwBO8OZvXaXK9@BGQ zUaD(T)@RWEwK5WaeITLf*v-_Q83OEtbo9Nom_C^HtrcVWX}nz;F;4J4M6o;tgm zHk`{oY}CkgzU~V3-2->--akN~U!G6BfY1E64Z_leb1h!Kwe{-t4tRO&z-zea;smgJ zBO^g{ufDmzb?W0u4T!VIWb4fOeLH}J`=4`3__!TuJr-eY;@d#*ehK;9YXI;766b|Z z$Ecjn&aVH+EJJ4`US6WTb~JU6LqS43X-z-Eq40l4jp2+W=ZPB`hTJ6shh9nn3xEeU zi_KC=xs~kC9-#d`mi}C3+nB0Fu$_fo@#)jA3Cc8? z*Ikp!iIxyE2Pr!_{q|edfW))OH_=R{d`>`__wEsph#M!!2NS>=e^AAi4>y{X7|20E ziojG14ND4)=N9D50yV=(r!NX#lN!}Ec-6qgh1x|+E_!JP6{V@HuY6v_lxV+6pk_tg zs^$!56TfWMg_Ley^$TNbhrboSC98jNeoH-#K=66g-vSbT|MVa0WaqODyCQYAsC`QW z`-931cosxvRK0id!}d(I#sKnJw67l%NGKqu;H-w+2~4bJH3=kc<1-b&KM&aQeXWP` zyQ)^l{!KD6)DVZM-N@|(X|#h5xeH%Heqf)IIZHw{BQ$4lx4eJ+pZ_OyOFMgQ1+}j2 zbd7&{q2+Y7Q|k7j1`;*L!Op~dAKxb*X(;od-!BOBXb0HNuI?YSl=Ozx7vGZ$vzx~5 z43Qf$uG^W4Z6M=)rxKdagVL?fkDcF<2@gth(JL>$iVXo^#7(vsN+XpLwi5)x)^n<@SsbEt9-JPNVzQF2@RRE; zh(0+Z(F0NX(5f~-wItua3EgAxG9wXD>(+1ti|kY?tw=^9qfa(GDCY!l@L%0MBW_ni zUj!s#m{b_CFapR;A4>lA!&6p&PyVWEB#vD3L$iyA^jeJs_pWG3@@fAIK*9{lOIMyZ zsZH7CC1?<6XY@vu+UXa=NjP1;J3pe9hM?Lgw$6-%0|D#o+3Bjl!RY=bJ#*a1x~&I} z=y7vzxRjW)Gk~;qn)89A)QdCaKj}@U-29Bs{Kzk^&swV=57cW{kJ9%(K=aJ_o>`a~ z*O`>VG{o7Zq>HVCf;TCWWG@xnQ&u)JPa{)tJvKkHAa{rDktANs_4tJswvMRfs^|rB z(8x|I%OFZa{AiBE$2_Ya;@J{3m<#&mPcd`b5-r8uwY0$ts&ZLD`7 zua_za+sVGa%li)dHs}a zeN#T)G!vutF@DW+C)H^%J#ugCLyCf~+Ry;@0urJHg?|ztG5mp?-D2=CWlYa;1n*6E z?<}NVPjChm>zEg|;&#t5gG9me+4T%v&A#f-r_@is{`w~mCU#?tZ{J*BB=$!J(@llK z4|@K`fB84XGW!2Ey=NGR?*zoT{s1Qx2=HmFXvR8vw$BHH&)7`KW`SjRUN7G-y5>c&H5wvN{c}fQ$-;ry=D~ z^BsVRnw4QiHQz^yZ3~0$Ny<&LE~Lm5rS0#$c6JhA(B3gMQHpmQNFw>eYv_V)DOa)@ z475Y(tpYyZBL@+RQxsY!b!cWW7%=9($?@Lo-R%9(P6N?W(Ff7u(_#?M?Nm3MQlbb_ z;40is#cd;i!O?+L%|y(Rh*pG5)8^O|;PskBCx>W37~d6q*7JV2u~D5cH2su)@e_^T z%Bb*W0SVEqqQz^-a2H#T8i|*nRD7&-Y5=M(wjN(S{HupR!a$s;%23m#kdKFHzW3#Y zw|_zBi=sB2Kmx;9Zj+Qrx3XmU@c@go@b;H4MY1r_C8N17Hof^?REft8Bw0WLX!oCEa;y1wo{OkniKFVik@_a=g5RcKp-6VaBTxfs8#~qZu6wG<^QvW zAAT5Z8ap$=l6&#xmX^cn^&m*ec|L=WXMhp? zFJL(x#pl%D>ELB|vzQN{qTc0?Ig_AacA6i+7M?gjf--Hp7a!lqLUfQhE=LE@h?73+ zXeE#5NC76-%!i)8A%2~cu* z?KdrulxNlR!wTRws7w|}*1d#J5tK#^qzhSP?nKz#pdN=@wm(Eiyo8}<>UZ7coh)vU zsD?Zx6aaspPe1}pA^u(dye3vAScuMY00}Y@XTW}DWB_2#|NO82x0ZG~q(pylz$;oy z+suK)T0nZ>nFO#?K#J7#V6>THlkm?-ri+DL+%p$4?a??CL@e&21aiiQ;zamK*N$RL zIA1yxHWdDT_-x$A>>pjxi&3b~`}R;V{T4K-D84f~qvk;Ctu9GSHKYX?PCd_GQG)us z4ouOua8L#y>UAP|q5C3|#=hxy!D)8Ko&_8nb*X*pNJ#uD9Q({_csjPBa~DxsvzB6I za_9F*>8c2AM#PX6o3;xOV?a!K+&=w%*kV9b6cqlhDcA0#LyIR>+jcZ9(}By<-XdWF~oTRIb)@9#&xVQ%0P_mS(%Ss>0?3H za*i;~%`=>lztgiQce=8qo2n=~-MS~wMs$eF45u@A-gun5o-BVv;jG^o>UQ4CU;OWT zeDrgdyX*^2Hau?5u$;JBPura2_P@m7NYim5BN0F%K|}rEsh4Ts-U}I0e2f!205DsVjFgF5c69+KsKE8Z5H{AsIUKCl? zvCKq^Wq-xvFU2t_%13PD5-4aaQc?UnN1kXpuR#-owc?_bY-6^9Xj5iNQCcrPP)zgt zp+W*|q4Hd7T91938JWuZ*^wUuXR(vz!*W6k6dKxlP%%IP|Bud+YUc9e>9^nhoZwiL zCkFxMkU;~M^iM_>t7=Z;bq^T^6r2Hjmb3v@cPIluq|95%#J$EDNE|I%CF~P1 zQ6_XH!?nXpv4cLkf6PUw&l1y+uaSliR46`f8-Qsz0TLYgMyq`=E7C9`q>fU1DRvOFz8DR++OU=RR)47*{vYB)iF zxK?bPp~JxJRXG3EY3&)g7m(=sAqxE~s#1k!CCSQ26p-lXQX8Mslion?F_f52|Kq3W z)i~bs0ECo|SP@<;sk+3yBi7&0uix3;Yc}NW{?G4dgtmQ+!^jUKOi?4c5~^g|6s6jC zMq+nu0-&Q8&y~=fKSFd@xoY*cpRcZPaefa#%Re0)lPcsCPdbL8lXC67b_parrTG97 z(V^-2orln6jfBC32hw4f`##aP{q#+7!Ws6Tu8#mf=n>Z|RFSCaW2oz0O>dQJx}i?2;*$`;+G zQzP$5&y5>J-KFoQ)jPnv_v8 zB8N|I9i^ep4*GbLQ?J^`Lr*hJdcv7~(`aJ??*CXvrfJO|+ZhN@GxP=PRREYL6W05Y~udDYD69}mq|wpM@CiX1mJ zc(m=JfyefHmzQ?4@eo*PeaWk+by%S^20OxBW-`w)8#H}uxjvEW)GWvdMhH%5o-0of z<(de>dweP{hd7Ogrz*VPU&E)h+ZkWa-92nfoZ9--L*3OHdL_k_v>bE>?6-_J%wQD%brQ z#%x-?v5`8}HC+~(NMyzCOJEHkX{?%)(x?1OY=e8v2dOXOZ!EbYkdL!w{n5_bKU9rj z#3$ML<6YqH3Gd37rf3p_7=}mR9Yl`nL?60LZie1%{pPN-Y>rE3c$khZXI!3B5LH7h zCZOQeQt}8&68+~3=*6a=^OYELLla^%G7LT=(!-624ek0kP^4?|VaJg0k+D)#+fX{s zs5?DeYspsFW#tLd%`!S;dRZE0Rjc5$;M4R8=%oi#)j21aW^RSq`Ct&oEVzJYKf(~x zs6*w_*MC0&_mnqtYC|RLq290GtPK=7p~ol}750BU&<6Nd`w_Q?K9e*e?6m=FKvf3| zF%v8uS25Ne?ay6!t=K{5a0smGT9b@`j$`(@c>=b4rj7(m{2BA?RoDspug>q)CHUni z2qiH6{cF<;QS+t<1wI9WrwEnVgY-m-fysn8KODfY$0}d7!$G;^pmYsMv5!nypSMZK z)@U%Dv->l&%7V7lN}LF6!duXsCm5vH$3)p6$_8sO6MbiE5<%o4N1M^23+iDX z&kW(hnz=^4Y{F7@;o+jI+)m!B=l}C0l63${Jl)i99Mn>7zAh)urkPxR{2n=XHzc<8 zD8NjOr*u8svNDaFzIOB)L*$s}D69|#m_edWsk0T6NG AQvd(} literal 0 HcmV?d00001 diff --git a/static/imgs/jthx.png b/static/imgs/jthx.png new file mode 100644 index 0000000000000000000000000000000000000000..eef97a54475907ff4da2178cf7aaae48a3ac45a1 GIT binary patch literal 1764 zcmY*ZXHb+067BDsAq@=7tbk+&@W>#rAg&;eI2=J2i5_WT041|z1cc#(6+~2WFn~nK zabYBQ1w*k1lGH+y=*qAjAjpWqpd{tcs{66^s{2)UzpAe4s@KCf7?GWS6DYlKSI8HL_(@1M8TXugD*&Jjn zo!*8%uaL=Apw+lrn$qJpo-ak>bLzAmoAKE@870*ZsrwUczU#k;fxEjq1Mhm@x;is) z+j$P{c*$A+`jw%^QIp2l+@7`l_uazPg>hxpvx!hl~l>6&R5$hTLFL9zMfEj$bV{kEPQ{C zkTuFpRI+3J>o+o@{3)hAN1Vux-#HVZ2xR)lMrAU6{<@XsF$(%)xy{&FQj&FG4r+l^ zVznO}zz_6Uk0AsX zEA6LZE1n!A9XyGW-?keolE`WNG`u28PRgF>v!ZAuHQ)y%N(rIrW2s}cXwg6wq4WSV zSHyIFHSQWnJ>*Km43;8lL`g5V%OC262(bR$JR2b(vhE2M!O=F)LmR<@Yrko~a|Y;~ zNU}vUPoFTn%{%q-0+XWvEuXr#-I&9#grfpRFF@XjMSmbgQ+B;>j9UO0spDjKMHrII zZa()_H54m`tap21TU{hz34>}BLjVsgy1*<-EJ=M-iDE>gW_2%2S(_i|N|5K`p_QP> zx%j=f>T*g3%S-s0q+K%bX7wCio@n-Ej}Y9tvz z3S~##=AlY-hd-T=IvC?w!@C>RjtKQC-BuK(DuL#tyx^odOkMe~|Hl!CEapyyF?)%l zvAt^u3j=t_OCLI|mc7Wsem&UnCde)!3zd3+JsUG7I1x_rVUK+;4w;qN!Nl6GRS%!d zZi`*n`utFU8h!ZAi82`&U`&`;!R?<6V(nbCVdJB7$jOLZNzN1=qONz~ftl$B1x>DT z!{IV*&&>787q~w%#o%0n=iA%|70%_t>nD_XeAEdsyLV2hf{ie>v)_>4IHOg(11PrB z^<{}ch4;{g&yv|@TFW{rBio*@)O42+EguaQ~ z6i;@L=fuj=P591=)P?0LjxcaR}|#)1<@q4 z{1@($DUppev6s?bt9V>DrD16cfjApnvfGjpnr|MMqE49#{`H7zm-ZvNiQQNrieIeB%Sn}-~F*G6<_W~J!0ru_T80|SNE@RY&U6$4i&&Csfr zh2xF9;6Z#?e;Kj%@G;;6pm%%_z|pW;UG-JkU9kd!wkhuTEpr0py8~sU4fQZyDsINI z{Xc_uKdG*?Q~z&2kfP++2K2@@1r{jZESgt=lk?89w@y3u5hSDD|2g${NpAU`6giQ$vG)v%_`My zN3W*7>qTGP{oc7f3ve>Z)<-Baj>|PE5&0$=cq~e%`me(VsOEdiM8mkv;-jLzi|s$5 zkexg3Rh1P@$%W9>q|af)movOwe#xC3I4SdGo&9ECzoNTN4I#Y`NV#`GxKe%$wb~N7 zoP)IBuN~8LVYXm9+(*!9j+_;2zb&6osYO{}Oq)Jy?=|@Jc(7tplO5h;gx>5wBI^+0 zG$!3uTtcLF>QG5vWmC7h`92;>?+?EKaoGHEYKgF~1Wa mxa#MlfldHZEi1S`H$-%d{15-GE98CfUBS}Kn$~1WPyQd1p7aL* literal 0 HcmV?d00001 diff --git a/static/imgs/map_adress.png b/static/imgs/map_adress.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f4a6624a666583a19f92ef0eb28b65c2227373 GIT binary patch literal 200349 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

qU(nL)}tSIXrZJdg~dyNEmtI&}pdQUykY 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 JT}MXx{{UIV-dX?v literal 0 HcmV?d00001 diff --git a/static/imgs/xtcg.png b/static/imgs/xtcg.png new file mode 100644 index 0000000000000000000000000000000000000000..d722a51e56538fe17d31a6f788657560c804cb35 GIT binary patch literal 1923 zcmV-}2YmR6P)Px+JxN4CRCr$Poqc+oAP~maJ<2BcXmheOCu?($tVdZ}tfa=O^9cgJ`KQm*1svx6 zF#`(PUGR5m4|J#QJvx5@04Ik4004lKd*I~VuRa1iKR#Fu3+QQ)6A%{kq@pFPSc%LKz&Yeb${@~=U>)xm~y?>vUo#bS683jUr_Ixl5!+W$f$EqSJ0NUkR-}j$(5da*T zXG8xUkH^nFxYhs=u3|>GQ^Ak~0BY1yqj3(v-pqeqj%qX2@6^gO={xtqmwI)e27n{}ACT3CMQ5BDfSC_S5VWZvB>-meg98A-Ukn%n zPUUY40DHM#Wz1TB1OWfMvUk%-I~Py^K+&iTM{5Aoekaf)4Mx9EH`+AI!W00wjsDQ_ z6x7QWTHB?mfiTs~=8v2JY=(c05sanL?gN)F%DhD7w!>Yfc}Bxv+g=pVqycRN*aX14 z!&DUD3U*LA*U?`*02%^0!ce)7)5Z~HQVa&~m613C5MsC!FIfv8A@a^Ollj7PVq6UX z%(ZYS3?vhuN{P~_QxyQELtwq_&87FW5n%41xVMh;z=Z2qZMj^+NBaQ4ic)dosa8a7 zJ?%p-?e$Kd0xXVer7j{sD@rQ+0RWVaYo!_hXhlh7KLCKzajjGX0Ievg><0i)I$y)bJGz|cC*ixgt)!~|J#yVS1Pc1e90HGolXA3X&r8u=^ zO#0;R6wd-$i2#)NK}_ui8bko$u(U*gNl4KP8aUzufDI8#iU5oJ&D!LVTKwjp29^ZC z%Au592)MRuLqFyK!q6X!Yf`|Dn5z(Q#rHTU()1iasj+J{Mi~EuK)7R>l}4z}007EE zhTjE(zJ+%kP;UvFnc^aT^K$@$c5YP}5kPt^H}L_0)b+~pju5zt4*-;cYN}Zw&`dr# zc47{|@sd*+Ed;5=M+9&ZR?>_Ff*fZA5CJ6WIhEx=V7^_(4}x6cBLz5% zDs6590{5Bzo?VClQq`QxFCfS&J|cj#nA+wvkBPO{TGm4Z@bYA(?ErvEh4V7IX#l8i z>S&x8zA1FXF>Z~moH|VdAb76M@zq!+Xgw#WC*AmwOMGf>Ax$ab z{BzXz0tDKbixT_){@Vb;*)KR5<+6DM5x^|*b_2|j{3&E^@eu(MiXWS1iW)yu^~x~G zW#q@}AObKvZY{!ufO8pF@eu(yE_W*90D-&s0KiFHZZld4Ecf~;+mHe%4>|uXg&?K) z%}0P~7XIB+!|);p>z+Uk1eUvdlKwUw0jLKk5=X_dULz7m!-#L!rhWmEM*L963xLqp z8U)&>dfNUV0th|l3BVG9+~PMs2PioO%(;_3B@{BdTO1KU=uPhkAiTVLaR4B6DFE1Z zSaDASQ+xr`x&##Rmb`e=5g@tu8n^%eXh1|u7XX08dkxeD01b#}=>h<-c&~xF0H6U8 zEnNTr7VkAs7XUOMqNNJ}z~a3I>H>fUM6`4P09d@&KwSXPfQXhZ004{k8mL<=07vYO zX+TeL7Y+p=SiAB?&9M^zK&+*z!j}I-W64hk?*X7OK;?lGSK2$gsu_Ud4IvZ&t?j-k zjWzGB=_&yBau5JWi;VQ$1(Y=^0KCHxWh8$8=YhTauNi#q08FMPITd?$5UAs6(h1-= zao0MP+P|-%QEST?>QUlrPi3hAkiJUg3?ilKBSU=g@-Nz|1|T#*MFFG(8xmoV4a4v{ z3?h7egK3KKMccr-}hm%?f#b(fM{)e^H?D-ql2!8+o002ov JPDHLkV1h$QRi6L= literal 0 HcmV?d00001 diff --git a/static/json/regions.js b/static/json/regions.js new file mode 100644 index 0000000..8f05cea --- /dev/null +++ b/static/json/regions.js @@ -0,0 +1 @@ +export const regions = [{"id":"35","name":"河北省","code":"130000","parentId":"0","children":[{"id":"36","name":"石家庄市","code":"130100","parentId":"35","children":[{"id":"37","name":"长安区","code":"130102","parentId":"36"},{"id":"38","name":"桥西区","code":"130104","parentId":"36"},{"id":"39","name":"新华区","code":"130105","parentId":"36"},{"id":"40","name":"井陉矿区","code":"130107","parentId":"36"},{"id":"41","name":"裕华区","code":"130108","parentId":"36"},{"id":"42","name":"藁城区","code":"130109","parentId":"36"},{"id":"43","name":"鹿泉区","code":"130110","parentId":"36"},{"id":"44","name":"栾城区","code":"130111","parentId":"36"},{"id":"45","name":"井陉县","code":"130121","parentId":"36"},{"id":"46","name":"正定县","code":"130123","parentId":"36"},{"id":"47","name":"行唐县","code":"130125","parentId":"36"},{"id":"48","name":"灵寿县","code":"130126","parentId":"36"},{"id":"49","name":"高邑县","code":"130127","parentId":"36"},{"id":"50","name":"深泽县","code":"130128","parentId":"36"},{"id":"51","name":"赞皇县","code":"130129","parentId":"36"},{"id":"52","name":"无极县","code":"130130","parentId":"36"},{"id":"53","name":"平山县","code":"130131","parentId":"36"},{"id":"54","name":"元氏县","code":"130132","parentId":"36"},{"id":"55","name":"赵县","code":"130133","parentId":"36"},{"id":"56","name":"辛集市","code":"130181","parentId":"36"},{"id":"57","name":"晋州市","code":"130183","parentId":"36"},{"id":"58","name":"新乐市","code":"130184","parentId":"36"}]},{"id":"59","name":"唐山市","code":"130200","parentId":"35","children":[{"id":"60","name":"路南区","code":"130202","parentId":"59"},{"id":"61","name":"路北区","code":"130203","parentId":"59"},{"id":"62","name":"古冶区","code":"130204","parentId":"59"},{"id":"63","name":"开平区","code":"130205","parentId":"59"},{"id":"64","name":"丰南区","code":"130207","parentId":"59"},{"id":"65","name":"丰润区","code":"130208","parentId":"59"},{"id":"66","name":"曹妃甸区","code":"130209","parentId":"59"},{"id":"67","name":"滦县","code":"130223","parentId":"59"},{"id":"68","name":"滦南县","code":"130224","parentId":"59"},{"id":"69","name":"乐亭县","code":"130225","parentId":"59"},{"id":"70","name":"迁西县","code":"130227","parentId":"59"},{"id":"71","name":"玉田县","code":"130229","parentId":"59"},{"id":"72","name":"遵化市","code":"130281","parentId":"59"},{"id":"73","name":"迁安市","code":"130283","parentId":"59"}]},{"id":"74","name":"秦皇岛市","code":"130300","parentId":"35","children":[{"id":"75","name":"海港区","code":"130302","parentId":"74"},{"id":"76","name":"山海关区","code":"130303","parentId":"74"},{"id":"77","name":"北戴河区","code":"130304","parentId":"74"},{"id":"78","name":"抚宁区","code":"130306","parentId":"74"},{"id":"79","name":"青龙满族自治县","code":"130321","parentId":"74"},{"id":"80","name":"昌黎县","code":"130322","parentId":"74"},{"id":"81","name":"卢龙县","code":"130324","parentId":"74"}]},{"id":"82","name":"邯郸市","code":"130400","parentId":"35","children":[{"id":"83","name":"邯山区","code":"130402","parentId":"82"},{"id":"84","name":"丛台区","code":"130403","parentId":"82"},{"id":"85","name":"复兴区","code":"130404","parentId":"82"},{"id":"86","name":"峰峰矿区","code":"130406","parentId":"82"},{"id":"87","name":"肥乡区","code":"130407","parentId":"82"},{"id":"88","name":"永年区","code":"130408","parentId":"82"},{"id":"89","name":"临漳县","code":"130423","parentId":"82"},{"id":"90","name":"成安县","code":"130424","parentId":"82"},{"id":"91","name":"大名县","code":"130425","parentId":"82"},{"id":"92","name":"涉县","code":"130426","parentId":"82"},{"id":"93","name":"磁县","code":"130427","parentId":"82"},{"id":"94","name":"邱县","code":"130430","parentId":"82"},{"id":"95","name":"鸡泽县","code":"130431","parentId":"82"},{"id":"96","name":"广平县","code":"130432","parentId":"82"},{"id":"97","name":"馆陶县","code":"130433","parentId":"82"},{"id":"98","name":"魏县","code":"130434","parentId":"82"},{"id":"99","name":"曲周县","code":"130435","parentId":"82"},{"id":"100","name":"武安市","code":"130481","parentId":"82"}]},{"id":"101","name":"邢台市","code":"130500","parentId":"35","children":[{"id":"102","name":"桥东区","code":"130502","parentId":"101"},{"id":"103","name":"桥西区","code":"130503","parentId":"101"},{"id":"104","name":"邢台县","code":"130521","parentId":"101"},{"id":"105","name":"临城县","code":"130522","parentId":"101"},{"id":"106","name":"内丘县","code":"130523","parentId":"101"},{"id":"107","name":"柏乡县","code":"130524","parentId":"101"},{"id":"108","name":"隆尧县","code":"130525","parentId":"101"},{"id":"109","name":"任县","code":"130526","parentId":"101"},{"id":"110","name":"南和县","code":"130527","parentId":"101"},{"id":"111","name":"宁晋县","code":"130528","parentId":"101"},{"id":"112","name":"巨鹿县","code":"130529","parentId":"101"},{"id":"113","name":"新河县","code":"130530","parentId":"101"},{"id":"114","name":"广宗县","code":"130531","parentId":"101"},{"id":"115","name":"平乡县","code":"130532","parentId":"101"},{"id":"116","name":"威县","code":"130533","parentId":"101"},{"id":"117","name":"清河县","code":"130534","parentId":"101"},{"id":"118","name":"临西县","code":"130535","parentId":"101"},{"id":"119","name":"南宫市","code":"130581","parentId":"101"},{"id":"120","name":"沙河市","code":"130582","parentId":"101"}]},{"id":"121","name":"保定市","code":"130600","parentId":"35","children":[{"id":"122","name":"竞秀区","code":"130602","parentId":"121"},{"id":"123","name":"莲池区","code":"130606","parentId":"121"},{"id":"124","name":"满城区","code":"130607","parentId":"121"},{"id":"125","name":"清苑区","code":"130608","parentId":"121"},{"id":"126","name":"徐水区","code":"130609","parentId":"121"},{"id":"127","name":"涞水县","code":"130623","parentId":"121"},{"id":"128","name":"阜平县","code":"130624","parentId":"121"},{"id":"129","name":"定兴县","code":"130626","parentId":"121"},{"id":"130","name":"唐县","code":"130627","parentId":"121"},{"id":"131","name":"高阳县","code":"130628","parentId":"121"},{"id":"132","name":"容城县","code":"130629","parentId":"121"},{"id":"133","name":"涞源县","code":"130630","parentId":"121"},{"id":"134","name":"望都县","code":"130631","parentId":"121"},{"id":"135","name":"安新县","code":"130632","parentId":"121"},{"id":"136","name":"易县","code":"130633","parentId":"121"},{"id":"137","name":"曲阳县","code":"130634","parentId":"121"},{"id":"138","name":"蠡县","code":"130635","parentId":"121"},{"id":"139","name":"顺平县","code":"130636","parentId":"121"},{"id":"140","name":"博野县","code":"130637","parentId":"121"},{"id":"141","name":"雄县","code":"130638","parentId":"121"},{"id":"142","name":"涿州市","code":"130681","parentId":"121"},{"id":"143","name":"定州市","code":"130682","parentId":"121"},{"id":"144","name":"安国市","code":"130683","parentId":"121"},{"id":"145","name":"高碑店市","code":"130684","parentId":"121"}]},{"id":"146","name":"张家口市","code":"130700","parentId":"35","children":[{"id":"147","name":"桥东区","code":"130702","parentId":"146"},{"id":"148","name":"桥西区","code":"130703","parentId":"146"},{"id":"149","name":"宣化区","code":"130705","parentId":"146"},{"id":"150","name":"下花园区","code":"130706","parentId":"146"},{"id":"151","name":"万全区","code":"130708","parentId":"146"},{"id":"152","name":"崇礼区","code":"130709","parentId":"146"},{"id":"153","name":"张北县","code":"130722","parentId":"146"},{"id":"154","name":"康保县","code":"130723","parentId":"146"},{"id":"155","name":"沽源县","code":"130724","parentId":"146"},{"id":"156","name":"尚义县","code":"130725","parentId":"146"},{"id":"157","name":"蔚县","code":"130726","parentId":"146"},{"id":"158","name":"阳原县","code":"130727","parentId":"146"},{"id":"159","name":"怀安县","code":"130728","parentId":"146"},{"id":"160","name":"怀来县","code":"130730","parentId":"146"},{"id":"161","name":"涿鹿县","code":"130731","parentId":"146"},{"id":"162","name":"赤城县","code":"130732","parentId":"146"}]},{"id":"163","name":"承德市","code":"130800","parentId":"35","children":[{"id":"164","name":"双桥区","code":"130802","parentId":"163"},{"id":"165","name":"双滦区","code":"130803","parentId":"163"},{"id":"166","name":"鹰手营子矿区","code":"130804","parentId":"163"},{"id":"167","name":"承德县","code":"130821","parentId":"163"},{"id":"168","name":"兴隆县","code":"130822","parentId":"163"},{"id":"169","name":"滦平县","code":"130824","parentId":"163"},{"id":"170","name":"隆化县","code":"130825","parentId":"163"},{"id":"171","name":"丰宁满族自治县","code":"130826","parentId":"163"},{"id":"172","name":"宽城满族自治县","code":"130827","parentId":"163"},{"id":"173","name":"围场满族蒙古族自治县","code":"130828","parentId":"163"},{"id":"174","name":"平泉市","code":"130881","parentId":"163"}]},{"id":"175","name":"沧州市","code":"130900","parentId":"35","children":[{"id":"176","name":"新华区","code":"130902","parentId":"175"},{"id":"177","name":"运河区","code":"130903","parentId":"175"},{"id":"178","name":"沧县","code":"130921","parentId":"175"},{"id":"179","name":"青县","code":"130922","parentId":"175"},{"id":"180","name":"东光县","code":"130923","parentId":"175"},{"id":"181","name":"海兴县","code":"130924","parentId":"175"},{"id":"182","name":"盐山县","code":"130925","parentId":"175"},{"id":"183","name":"肃宁县","code":"130926","parentId":"175"},{"id":"184","name":"南皮县","code":"130927","parentId":"175"},{"id":"185","name":"吴桥县","code":"130928","parentId":"175"},{"id":"186","name":"献县","code":"130929","parentId":"175"},{"id":"187","name":"孟村回族自治县","code":"130930","parentId":"175"},{"id":"188","name":"泊头市","code":"130981","parentId":"175"},{"id":"189","name":"任丘市","code":"130982","parentId":"175"},{"id":"190","name":"黄骅市","code":"130983","parentId":"175"},{"id":"191","name":"河间市","code":"130984","parentId":"175"}]},{"id":"192","name":"廊坊市","code":"131000","parentId":"35","children":[{"id":"193","name":"安次区","code":"131002","parentId":"192"},{"id":"194","name":"广阳区","code":"131003","parentId":"192"},{"id":"195","name":"固安县","code":"131022","parentId":"192"},{"id":"196","name":"永清县","code":"131023","parentId":"192"},{"id":"197","name":"香河县","code":"131024","parentId":"192"},{"id":"198","name":"大城县","code":"131025","parentId":"192"},{"id":"199","name":"文安县","code":"131026","parentId":"192"},{"id":"200","name":"大厂回族自治县","code":"131028","parentId":"192"},{"id":"201","name":"霸州市","code":"131081","parentId":"192"},{"id":"202","name":"三河市","code":"131082","parentId":"192"}]},{"id":"203","name":"衡水市","code":"131100","parentId":"35","children":[{"id":"204","name":"桃城区","code":"131102","parentId":"203"},{"id":"205","name":"冀州区","code":"131103","parentId":"203"},{"id":"206","name":"枣强县","code":"131121","parentId":"203"},{"id":"207","name":"武邑县","code":"131122","parentId":"203"},{"id":"208","name":"武强县","code":"131123","parentId":"203"},{"id":"209","name":"饶阳县","code":"131124","parentId":"203"},{"id":"210","name":"安平县","code":"131125","parentId":"203"},{"id":"211","name":"故城县","code":"131126","parentId":"203"},{"id":"212","name":"景县","code":"131127","parentId":"203"},{"id":"213","name":"阜城县","code":"131128","parentId":"203"},{"id":"214","name":"深州市","code":"131182","parentId":"203"}]}]},{"id":"215","name":"山西省","code":"140000","parentId":"0","children":[{"id":"216","name":"太原市","code":"140100","parentId":"215","children":[{"id":"217","name":"小店区","code":"140105","parentId":"216"},{"id":"218","name":"迎泽区","code":"140106","parentId":"216"},{"id":"219","name":"杏花岭区","code":"140107","parentId":"216"},{"id":"220","name":"尖草坪区","code":"140108","parentId":"216"},{"id":"221","name":"万柏林区","code":"140109","parentId":"216"},{"id":"222","name":"晋源区","code":"140110","parentId":"216"},{"id":"223","name":"清徐县","code":"140121","parentId":"216"},{"id":"224","name":"阳曲县","code":"140122","parentId":"216"},{"id":"225","name":"娄烦县","code":"140123","parentId":"216"},{"id":"226","name":"古交市","code":"140181","parentId":"216"}]},{"id":"227","name":"大同市","code":"140200","parentId":"215","children":[{"id":"228","name":"城区","code":"140202","parentId":"227"},{"id":"229","name":"矿区","code":"140203","parentId":"227"},{"id":"230","name":"南郊区","code":"140211","parentId":"227"},{"id":"231","name":"新荣区","code":"140212","parentId":"227"},{"id":"232","name":"阳高县","code":"140221","parentId":"227"},{"id":"233","name":"天镇县","code":"140222","parentId":"227"},{"id":"234","name":"广灵县","code":"140223","parentId":"227"},{"id":"235","name":"灵丘县","code":"140224","parentId":"227"},{"id":"236","name":"浑源县","code":"140225","parentId":"227"},{"id":"237","name":"左云县","code":"140226","parentId":"227"},{"id":"238","name":"大同县","code":"140227","parentId":"227"}]},{"id":"239","name":"阳泉市","code":"140300","parentId":"215","children":[{"id":"240","name":"城区","code":"140302","parentId":"239"},{"id":"241","name":"矿区","code":"140303","parentId":"239"},{"id":"242","name":"郊区","code":"140311","parentId":"239"},{"id":"243","name":"平定县","code":"140321","parentId":"239"},{"id":"244","name":"盂县","code":"140322","parentId":"239"}]},{"id":"245","name":"长治市","code":"140400","parentId":"215","children":[{"id":"246","name":"城区","code":"140402","parentId":"245"},{"id":"247","name":"郊区","code":"140411","parentId":"245"},{"id":"248","name":"长治县","code":"140421","parentId":"245"},{"id":"249","name":"襄垣县","code":"140423","parentId":"245"},{"id":"250","name":"屯留县","code":"140424","parentId":"245"},{"id":"251","name":"平顺县","code":"140425","parentId":"245"},{"id":"252","name":"黎城县","code":"140426","parentId":"245"},{"id":"253","name":"壶关县","code":"140427","parentId":"245"},{"id":"254","name":"长子县","code":"140428","parentId":"245"},{"id":"255","name":"武乡县","code":"140429","parentId":"245"},{"id":"256","name":"沁县","code":"140430","parentId":"245"},{"id":"257","name":"沁源县","code":"140431","parentId":"245"},{"id":"258","name":"潞城市","code":"140481","parentId":"245"}]},{"id":"259","name":"晋城市","code":"140500","parentId":"215","children":[{"id":"260","name":"城区","code":"140502","parentId":"259"},{"id":"261","name":"沁水县","code":"140521","parentId":"259"},{"id":"262","name":"阳城县","code":"140522","parentId":"259"},{"id":"263","name":"陵川县","code":"140524","parentId":"259"},{"id":"264","name":"泽州县","code":"140525","parentId":"259"},{"id":"265","name":"高平市","code":"140581","parentId":"259"}]},{"id":"266","name":"朔州市","code":"140600","parentId":"215","children":[{"id":"267","name":"朔城区","code":"140602","parentId":"266"},{"id":"268","name":"平鲁区","code":"140603","parentId":"266"},{"id":"269","name":"山阴县","code":"140621","parentId":"266"},{"id":"270","name":"应县","code":"140622","parentId":"266"},{"id":"271","name":"右玉县","code":"140623","parentId":"266"},{"id":"272","name":"怀仁县","code":"140624","parentId":"266"}]},{"id":"273","name":"晋中市","code":"140700","parentId":"215","children":[{"id":"274","name":"榆次区","code":"140702","parentId":"273"},{"id":"275","name":"榆社县","code":"140721","parentId":"273"},{"id":"276","name":"左权县","code":"140722","parentId":"273"},{"id":"277","name":"和顺县","code":"140723","parentId":"273"},{"id":"278","name":"昔阳县","code":"140724","parentId":"273"},{"id":"279","name":"寿阳县","code":"140725","parentId":"273"},{"id":"280","name":"太谷县","code":"140726","parentId":"273"},{"id":"281","name":"祁县","code":"140727","parentId":"273"},{"id":"282","name":"平遥县","code":"140728","parentId":"273"},{"id":"283","name":"灵石县","code":"140729","parentId":"273"},{"id":"284","name":"介休市","code":"140781","parentId":"273"}]},{"id":"285","name":"运城市","code":"140800","parentId":"215","children":[{"id":"286","name":"盐湖区","code":"140802","parentId":"285"},{"id":"287","name":"临猗县","code":"140821","parentId":"285"},{"id":"288","name":"万荣县","code":"140822","parentId":"285"},{"id":"289","name":"闻喜县","code":"140823","parentId":"285"},{"id":"290","name":"稷山县","code":"140824","parentId":"285"},{"id":"291","name":"新绛县","code":"140825","parentId":"285"},{"id":"292","name":"绛县","code":"140826","parentId":"285"},{"id":"293","name":"垣曲县","code":"140827","parentId":"285"},{"id":"294","name":"夏县","code":"140828","parentId":"285"},{"id":"295","name":"平陆县","code":"140829","parentId":"285"},{"id":"296","name":"芮城县","code":"140830","parentId":"285"},{"id":"297","name":"永济市","code":"140881","parentId":"285"},{"id":"298","name":"河津市","code":"140882","parentId":"285"}]},{"id":"299","name":"忻州市","code":"140900","parentId":"215","children":[{"id":"300","name":"忻府区","code":"140902","parentId":"299"},{"id":"301","name":"定襄县","code":"140921","parentId":"299"},{"id":"302","name":"五台县","code":"140922","parentId":"299"},{"id":"303","name":"代县","code":"140923","parentId":"299"},{"id":"304","name":"繁峙县","code":"140924","parentId":"299"},{"id":"305","name":"宁武县","code":"140925","parentId":"299"},{"id":"306","name":"静乐县","code":"140926","parentId":"299"},{"id":"307","name":"神池县","code":"140927","parentId":"299"},{"id":"308","name":"五寨县","code":"140928","parentId":"299"},{"id":"309","name":"岢岚县","code":"140929","parentId":"299"},{"id":"310","name":"河曲县","code":"140930","parentId":"299"},{"id":"311","name":"保德县","code":"140931","parentId":"299"},{"id":"312","name":"偏关县","code":"140932","parentId":"299"},{"id":"313","name":"原平市","code":"140981","parentId":"299"}]},{"id":"314","name":"临汾市","code":"141000","parentId":"215","children":[{"id":"315","name":"尧都区","code":"141002","parentId":"314"},{"id":"316","name":"曲沃县","code":"141021","parentId":"314"},{"id":"317","name":"翼城县","code":"141022","parentId":"314"},{"id":"318","name":"襄汾县","code":"141023","parentId":"314"},{"id":"319","name":"洪洞县","code":"141024","parentId":"314"},{"id":"320","name":"古县","code":"141025","parentId":"314"},{"id":"321","name":"安泽县","code":"141026","parentId":"314"},{"id":"322","name":"浮山县","code":"141027","parentId":"314"},{"id":"323","name":"吉县","code":"141028","parentId":"314"},{"id":"324","name":"乡宁县","code":"141029","parentId":"314"},{"id":"325","name":"大宁县","code":"141030","parentId":"314"},{"id":"326","name":"隰县","code":"141031","parentId":"314"},{"id":"327","name":"永和县","code":"141032","parentId":"314"},{"id":"328","name":"蒲县","code":"141033","parentId":"314"},{"id":"329","name":"汾西县","code":"141034","parentId":"314"},{"id":"330","name":"侯马市","code":"141081","parentId":"314"},{"id":"331","name":"霍州市","code":"141082","parentId":"314"}]},{"id":"332","name":"吕梁市","code":"141100","parentId":"215","children":[{"id":"333","name":"离石区","code":"141102","parentId":"332"},{"id":"334","name":"文水县","code":"141121","parentId":"332"},{"id":"335","name":"交城县","code":"141122","parentId":"332"},{"id":"336","name":"兴县","code":"141123","parentId":"332"},{"id":"337","name":"临县","code":"141124","parentId":"332"},{"id":"338","name":"柳林县","code":"141125","parentId":"332"},{"id":"339","name":"石楼县","code":"141126","parentId":"332"},{"id":"340","name":"岚县","code":"141127","parentId":"332"},{"id":"341","name":"方山县","code":"141128","parentId":"332"},{"id":"342","name":"中阳县","code":"141129","parentId":"332"},{"id":"343","name":"交口县","code":"141130","parentId":"332"},{"id":"344","name":"孝义市","code":"141181","parentId":"332"},{"id":"345","name":"汾阳市","code":"141182","parentId":"332"}]}]},{"id":"346","name":"内蒙古自治区","code":"150000","parentId":"0","children":[{"id":"347","name":"呼和浩特市","code":"150100","parentId":"346","children":[{"id":"348","name":"新城区","code":"150102","parentId":"347"},{"id":"349","name":"回民区","code":"150103","parentId":"347"},{"id":"350","name":"玉泉区","code":"150104","parentId":"347"},{"id":"351","name":"赛罕区","code":"150105","parentId":"347"},{"id":"352","name":"土默特左旗","code":"150121","parentId":"347"},{"id":"353","name":"托克托县","code":"150122","parentId":"347"},{"id":"354","name":"和林格尔县","code":"150123","parentId":"347"},{"id":"355","name":"清水河县","code":"150124","parentId":"347"},{"id":"356","name":"武川县","code":"150125","parentId":"347"}]},{"id":"357","name":"包头市","code":"150200","parentId":"346","children":[{"id":"358","name":"东河区","code":"150202","parentId":"357"},{"id":"359","name":"昆都仑区","code":"150203","parentId":"357"},{"id":"360","name":"青山区","code":"150204","parentId":"357"},{"id":"361","name":"石拐区","code":"150205","parentId":"357"},{"id":"362","name":"白云鄂博矿区","code":"150206","parentId":"357"},{"id":"363","name":"九原区","code":"150207","parentId":"357"},{"id":"364","name":"土默特右旗","code":"150221","parentId":"357"},{"id":"365","name":"固阳县","code":"150222","parentId":"357"},{"id":"366","name":"达尔罕茂明安联合旗","code":"150223","parentId":"357"}]},{"id":"367","name":"乌海市","code":"150300","parentId":"346","children":[{"id":"368","name":"海勃湾区","code":"150302","parentId":"367"},{"id":"369","name":"海南区","code":"150303","parentId":"367"},{"id":"370","name":"乌达区","code":"150304","parentId":"367"}]},{"id":"371","name":"赤峰市","code":"150400","parentId":"346","children":[{"id":"372","name":"红山区","code":"150402","parentId":"371"},{"id":"373","name":"元宝山区","code":"150403","parentId":"371"},{"id":"374","name":"松山区","code":"150404","parentId":"371"},{"id":"375","name":"阿鲁科尔沁旗","code":"150421","parentId":"371"},{"id":"376","name":"巴林左旗","code":"150422","parentId":"371"},{"id":"377","name":"巴林右旗","code":"150423","parentId":"371"},{"id":"378","name":"林西县","code":"150424","parentId":"371"},{"id":"379","name":"克什克腾旗","code":"150425","parentId":"371"},{"id":"380","name":"翁牛特旗","code":"150426","parentId":"371"},{"id":"381","name":"喀喇沁旗","code":"150428","parentId":"371"},{"id":"382","name":"宁城县","code":"150429","parentId":"371"},{"id":"383","name":"敖汉旗","code":"150430","parentId":"371"}]},{"id":"384","name":"通辽市","code":"150500","parentId":"346","children":[{"id":"385","name":"科尔沁区","code":"150502","parentId":"384"},{"id":"386","name":"科尔沁左翼中旗","code":"150521","parentId":"384"},{"id":"387","name":"科尔沁左翼后旗","code":"150522","parentId":"384"},{"id":"388","name":"开鲁县","code":"150523","parentId":"384"},{"id":"389","name":"库伦旗","code":"150524","parentId":"384"},{"id":"390","name":"奈曼旗","code":"150525","parentId":"384"},{"id":"391","name":"扎鲁特旗","code":"150526","parentId":"384"},{"id":"392","name":"霍林郭勒市","code":"150581","parentId":"384"}]},{"id":"393","name":"鄂尔多斯市","code":"150600","parentId":"346","children":[{"id":"394","name":"东胜区","code":"150602","parentId":"393"},{"id":"395","name":"康巴什区","code":"150603","parentId":"393"},{"id":"396","name":"达拉特旗","code":"150621","parentId":"393"},{"id":"397","name":"准格尔旗","code":"150622","parentId":"393"},{"id":"398","name":"鄂托克前旗","code":"150623","parentId":"393"},{"id":"399","name":"鄂托克旗","code":"150624","parentId":"393"},{"id":"400","name":"杭锦旗","code":"150625","parentId":"393"},{"id":"401","name":"乌审旗","code":"150626","parentId":"393"},{"id":"402","name":"伊金霍洛旗","code":"150627","parentId":"393"}]},{"id":"403","name":"呼伦贝尔市","code":"150700","parentId":"346","children":[{"id":"404","name":"海拉尔区","code":"150702","parentId":"403"},{"id":"405","name":"扎赉诺尔区","code":"150703","parentId":"403"},{"id":"406","name":"阿荣旗","code":"150721","parentId":"403"},{"id":"407","name":"莫力达瓦达斡尔族自治旗","code":"150722","parentId":"403"},{"id":"408","name":"鄂伦春自治旗","code":"150723","parentId":"403"},{"id":"409","name":"鄂温克族自治旗","code":"150724","parentId":"403"},{"id":"410","name":"陈巴尔虎旗","code":"150725","parentId":"403"},{"id":"411","name":"新巴尔虎左旗","code":"150726","parentId":"403"},{"id":"412","name":"新巴尔虎右旗","code":"150727","parentId":"403"},{"id":"413","name":"满洲里市","code":"150781","parentId":"403"},{"id":"414","name":"牙克石市","code":"150782","parentId":"403"},{"id":"415","name":"扎兰屯市","code":"150783","parentId":"403"},{"id":"416","name":"额尔古纳市","code":"150784","parentId":"403"},{"id":"417","name":"根河市","code":"150785","parentId":"403"}]},{"id":"418","name":"巴彦淖尔市","code":"150800","parentId":"346","children":[{"id":"419","name":"临河区","code":"150802","parentId":"418"},{"id":"420","name":"五原县","code":"150821","parentId":"418"},{"id":"421","name":"磴口县","code":"150822","parentId":"418"},{"id":"422","name":"乌拉特前旗","code":"150823","parentId":"418"},{"id":"423","name":"乌拉特中旗","code":"150824","parentId":"418"},{"id":"424","name":"乌拉特后旗","code":"150825","parentId":"418"},{"id":"425","name":"杭锦后旗","code":"150826","parentId":"418"}]},{"id":"426","name":"乌兰察布市","code":"150900","parentId":"346","children":[{"id":"427","name":"集宁区","code":"150902","parentId":"426"},{"id":"428","name":"卓资县","code":"150921","parentId":"426"},{"id":"429","name":"化德县","code":"150922","parentId":"426"},{"id":"430","name":"商都县","code":"150923","parentId":"426"},{"id":"431","name":"兴和县","code":"150924","parentId":"426"},{"id":"432","name":"凉城县","code":"150925","parentId":"426"},{"id":"433","name":"察哈尔右翼前旗","code":"150926","parentId":"426"},{"id":"434","name":"察哈尔右翼中旗","code":"150927","parentId":"426"},{"id":"435","name":"察哈尔右翼后旗","code":"150928","parentId":"426"},{"id":"436","name":"四子王旗","code":"150929","parentId":"426"},{"id":"437","name":"丰镇市","code":"150981","parentId":"426"}]},{"id":"438","name":"兴安盟","code":"152200","parentId":"346","children":[{"id":"439","name":"乌兰浩特市","code":"152201","parentId":"438"},{"id":"440","name":"阿尔山市","code":"152202","parentId":"438"},{"id":"441","name":"科尔沁右翼前旗","code":"152221","parentId":"438"},{"id":"442","name":"科尔沁右翼中旗","code":"152222","parentId":"438"},{"id":"443","name":"扎赉特旗","code":"152223","parentId":"438"},{"id":"444","name":"突泉县","code":"152224","parentId":"438"}]},{"id":"445","name":"锡林郭勒盟","code":"152500","parentId":"346","children":[{"id":"446","name":"二连浩特市","code":"152501","parentId":"445"},{"id":"447","name":"锡林浩特市","code":"152502","parentId":"445"},{"id":"448","name":"阿巴嘎旗","code":"152522","parentId":"445"},{"id":"449","name":"苏尼特左旗","code":"152523","parentId":"445"},{"id":"450","name":"苏尼特右旗","code":"152524","parentId":"445"},{"id":"451","name":"东乌珠穆沁旗","code":"152525","parentId":"445"},{"id":"452","name":"西乌珠穆沁旗","code":"152526","parentId":"445"},{"id":"453","name":"太仆寺旗","code":"152527","parentId":"445"},{"id":"454","name":"镶黄旗","code":"152528","parentId":"445"},{"id":"455","name":"正镶白旗","code":"152529","parentId":"445"},{"id":"456","name":"正蓝旗","code":"152530","parentId":"445"},{"id":"457","name":"多伦县","code":"152531","parentId":"445"}]},{"id":"458","name":"阿拉善盟","code":"152900","parentId":"346","children":[{"id":"459","name":"阿拉善左旗","code":"152921","parentId":"458"},{"id":"460","name":"阿拉善右旗","code":"152922","parentId":"458"},{"id":"461","name":"额济纳旗","code":"152923","parentId":"458"}]}]},{"id":"462","name":"辽宁省","code":"210000","parentId":"0","children":[{"id":"463","name":"沈阳市","code":"210100","parentId":"462","children":[{"id":"464","name":"和平区","code":"210102","parentId":"463"},{"id":"465","name":"沈河区","code":"210103","parentId":"463"},{"id":"466","name":"大东区","code":"210104","parentId":"463"},{"id":"467","name":"皇姑区","code":"210105","parentId":"463"},{"id":"468","name":"铁西区","code":"210106","parentId":"463"},{"id":"469","name":"苏家屯区","code":"210111","parentId":"463"},{"id":"470","name":"浑南区","code":"210112","parentId":"463"},{"id":"471","name":"沈北新区","code":"210113","parentId":"463"},{"id":"472","name":"于洪区","code":"210114","parentId":"463"},{"id":"473","name":"辽中区","code":"210115","parentId":"463"},{"id":"474","name":"康平县","code":"210123","parentId":"463"},{"id":"475","name":"法库县","code":"210124","parentId":"463"},{"id":"476","name":"新民市","code":"210181","parentId":"463"}]},{"id":"477","name":"大连市","code":"210200","parentId":"462","children":[{"id":"478","name":"中山区","code":"210202","parentId":"477"},{"id":"479","name":"西岗区","code":"210203","parentId":"477"},{"id":"480","name":"沙河口区","code":"210204","parentId":"477"},{"id":"481","name":"甘井子区","code":"210211","parentId":"477"},{"id":"482","name":"旅顺口区","code":"210212","parentId":"477"},{"id":"483","name":"金普新区","code":"210213","parentId":"477"},{"id":"484","name":"普兰店区","code":"210214","parentId":"477"},{"id":"485","name":"长海县","code":"210224","parentId":"477"},{"id":"486","name":"瓦房店市","code":"210281","parentId":"477"},{"id":"487","name":"庄河市","code":"210283","parentId":"477"}]},{"id":"488","name":"鞍山市","code":"210300","parentId":"462","children":[{"id":"489","name":"铁东区","code":"210302","parentId":"488"},{"id":"490","name":"铁西区","code":"210303","parentId":"488"},{"id":"491","name":"立山区","code":"210304","parentId":"488"},{"id":"492","name":"千山区","code":"210311","parentId":"488"},{"id":"493","name":"台安县","code":"210321","parentId":"488"},{"id":"494","name":"岫岩满族自治县","code":"210323","parentId":"488"},{"id":"495","name":"海城市","code":"210381","parentId":"488"}]},{"id":"496","name":"抚顺市","code":"210400","parentId":"462","children":[{"id":"497","name":"新抚区","code":"210402","parentId":"496"},{"id":"498","name":"东洲区","code":"210403","parentId":"496"},{"id":"499","name":"望花区","code":"210404","parentId":"496"},{"id":"500","name":"顺城区","code":"210411","parentId":"496"},{"id":"501","name":"抚顺县","code":"210421","parentId":"496"},{"id":"502","name":"新宾满族自治县","code":"210422","parentId":"496"},{"id":"503","name":"清原满族自治县","code":"210423","parentId":"496"}]},{"id":"504","name":"本溪市","code":"210500","parentId":"462","children":[{"id":"505","name":"平山区","code":"210502","parentId":"504"},{"id":"506","name":"溪湖区","code":"210503","parentId":"504"},{"id":"507","name":"明山区","code":"210504","parentId":"504"},{"id":"508","name":"南芬区","code":"210505","parentId":"504"},{"id":"509","name":"本溪满族自治县","code":"210521","parentId":"504"},{"id":"510","name":"桓仁满族自治县","code":"210522","parentId":"504"}]},{"id":"511","name":"丹东市","code":"210600","parentId":"462","children":[{"id":"512","name":"元宝区","code":"210602","parentId":"511"},{"id":"513","name":"振兴区","code":"210603","parentId":"511"},{"id":"514","name":"振安区","code":"210604","parentId":"511"},{"id":"515","name":"宽甸满族自治县","code":"210624","parentId":"511"},{"id":"516","name":"东港市","code":"210681","parentId":"511"},{"id":"517","name":"凤城市","code":"210682","parentId":"511"}]},{"id":"518","name":"锦州市","code":"210700","parentId":"462","children":[{"id":"519","name":"古塔区","code":"210702","parentId":"518"},{"id":"520","name":"凌河区","code":"210703","parentId":"518"},{"id":"521","name":"太和区","code":"210711","parentId":"518"},{"id":"522","name":"黑山县","code":"210726","parentId":"518"},{"id":"523","name":"义县","code":"210727","parentId":"518"},{"id":"524","name":"凌海市","code":"210781","parentId":"518"},{"id":"525","name":"北镇市","code":"210782","parentId":"518"}]},{"id":"526","name":"营口市","code":"210800","parentId":"462","children":[{"id":"527","name":"站前区","code":"210802","parentId":"526"},{"id":"528","name":"西市区","code":"210803","parentId":"526"},{"id":"529","name":"鲅鱼圈区","code":"210804","parentId":"526"},{"id":"530","name":"老边区","code":"210811","parentId":"526"},{"id":"531","name":"盖州市","code":"210881","parentId":"526"},{"id":"532","name":"大石桥市","code":"210882","parentId":"526"}]},{"id":"533","name":"阜新市","code":"210900","parentId":"462","children":[{"id":"534","name":"海州区","code":"210902","parentId":"533"},{"id":"535","name":"新邱区","code":"210903","parentId":"533"},{"id":"536","name":"太平区","code":"210904","parentId":"533"},{"id":"537","name":"清河门区","code":"210905","parentId":"533"},{"id":"538","name":"细河区","code":"210911","parentId":"533"},{"id":"539","name":"阜新蒙古族自治县","code":"210921","parentId":"533"},{"id":"540","name":"彰武县","code":"210922","parentId":"533"}]},{"id":"541","name":"辽阳市","code":"211000","parentId":"462","children":[{"id":"542","name":"白塔区","code":"211002","parentId":"541"},{"id":"543","name":"文圣区","code":"211003","parentId":"541"},{"id":"544","name":"宏伟区","code":"211004","parentId":"541"},{"id":"545","name":"弓长岭区","code":"211005","parentId":"541"},{"id":"546","name":"太子河区","code":"211011","parentId":"541"},{"id":"547","name":"辽阳县","code":"211021","parentId":"541"},{"id":"548","name":"灯塔市","code":"211081","parentId":"541"}]},{"id":"549","name":"盘锦市","code":"211100","parentId":"462","children":[{"id":"550","name":"双台子区","code":"211102","parentId":"549"},{"id":"551","name":"兴隆台区","code":"211103","parentId":"549"},{"id":"552","name":"大洼区","code":"211104","parentId":"549"},{"id":"553","name":"盘山县","code":"211122","parentId":"549"}]},{"id":"554","name":"铁岭市","code":"211200","parentId":"462","children":[{"id":"555","name":"银州区","code":"211202","parentId":"554"},{"id":"556","name":"清河区","code":"211204","parentId":"554"},{"id":"557","name":"铁岭县","code":"211221","parentId":"554"},{"id":"558","name":"西丰县","code":"211223","parentId":"554"},{"id":"559","name":"昌图县","code":"211224","parentId":"554"},{"id":"560","name":"调兵山市","code":"211281","parentId":"554"},{"id":"561","name":"开原市","code":"211282","parentId":"554"}]},{"id":"562","name":"朝阳市","code":"211300","parentId":"462","children":[{"id":"563","name":"双塔区","code":"211302","parentId":"562"},{"id":"564","name":"龙城区","code":"211303","parentId":"562"},{"id":"565","name":"朝阳县","code":"211321","parentId":"562"},{"id":"566","name":"建平县","code":"211322","parentId":"562"},{"id":"567","name":"喀喇沁左翼蒙古族自治县","code":"211324","parentId":"562"},{"id":"568","name":"北票市","code":"211381","parentId":"562"},{"id":"569","name":"凌源市","code":"211382","parentId":"562"}]},{"id":"570","name":"葫芦岛市","code":"211400","parentId":"462","children":[{"id":"571","name":"连山区","code":"211402","parentId":"570"},{"id":"572","name":"龙港区","code":"211403","parentId":"570"},{"id":"573","name":"南票区","code":"211404","parentId":"570"},{"id":"574","name":"绥中县","code":"211421","parentId":"570"},{"id":"575","name":"建昌县","code":"211422","parentId":"570"},{"id":"576","name":"兴城市","code":"211481","parentId":"570"}]}]},{"id":"577","name":"吉林省","code":"220000","parentId":"0","children":[{"id":"578","name":"长春市","code":"220100","parentId":"577","children":[{"id":"579","name":"南关区","code":"220102","parentId":"578"},{"id":"580","name":"宽城区","code":"220103","parentId":"578"},{"id":"581","name":"朝阳区","code":"220104","parentId":"578"},{"id":"582","name":"二道区","code":"220105","parentId":"578"},{"id":"583","name":"绿园区","code":"220106","parentId":"578"},{"id":"584","name":"双阳区","code":"220112","parentId":"578"},{"id":"585","name":"九台区","code":"220113","parentId":"578"},{"id":"586","name":"农安县","code":"220122","parentId":"578"},{"id":"587","name":"榆树市","code":"220182","parentId":"578"},{"id":"588","name":"德惠市","code":"220183","parentId":"578"}]},{"id":"589","name":"吉林市","code":"220200","parentId":"577","children":[{"id":"590","name":"昌邑区","code":"220202","parentId":"589"},{"id":"591","name":"龙潭区","code":"220203","parentId":"589"},{"id":"592","name":"船营区","code":"220204","parentId":"589"},{"id":"593","name":"丰满区","code":"220211","parentId":"589"},{"id":"594","name":"永吉县","code":"220221","parentId":"589"},{"id":"595","name":"蛟河市","code":"220281","parentId":"589"},{"id":"596","name":"桦甸市","code":"220282","parentId":"589"},{"id":"597","name":"舒兰市","code":"220283","parentId":"589"},{"id":"598","name":"磐石市","code":"220284","parentId":"589"}]},{"id":"599","name":"四平市","code":"220300","parentId":"577","children":[{"id":"600","name":"铁西区","code":"220302","parentId":"599"},{"id":"601","name":"铁东区","code":"220303","parentId":"599"},{"id":"602","name":"梨树县","code":"220322","parentId":"599"},{"id":"603","name":"伊通满族自治县","code":"220323","parentId":"599"},{"id":"604","name":"公主岭市","code":"220381","parentId":"599"},{"id":"605","name":"双辽市","code":"220382","parentId":"599"}]},{"id":"606","name":"辽源市","code":"220400","parentId":"577","children":[{"id":"607","name":"龙山区","code":"220402","parentId":"606"},{"id":"608","name":"西安区","code":"220403","parentId":"606"},{"id":"609","name":"东丰县","code":"220421","parentId":"606"},{"id":"610","name":"东辽县","code":"220422","parentId":"606"}]},{"id":"611","name":"通化市","code":"220500","parentId":"577","children":[{"id":"612","name":"东昌区","code":"220502","parentId":"611"},{"id":"613","name":"二道江区","code":"220503","parentId":"611"},{"id":"614","name":"通化县","code":"220521","parentId":"611"},{"id":"615","name":"辉南县","code":"220523","parentId":"611"},{"id":"616","name":"柳河县","code":"220524","parentId":"611"},{"id":"617","name":"梅河口市","code":"220581","parentId":"611"},{"id":"618","name":"集安市","code":"220582","parentId":"611"}]},{"id":"619","name":"白山市","code":"220600","parentId":"577","children":[{"id":"620","name":"浑江区","code":"220602","parentId":"619"},{"id":"621","name":"江源区","code":"220605","parentId":"619"},{"id":"622","name":"抚松县","code":"220621","parentId":"619"},{"id":"623","name":"靖宇县","code":"220622","parentId":"619"},{"id":"624","name":"长白朝鲜族自治县","code":"220623","parentId":"619"},{"id":"625","name":"临江市","code":"220681","parentId":"619"}]},{"id":"626","name":"松原市","code":"220700","parentId":"577","children":[{"id":"627","name":"宁江区","code":"220702","parentId":"626"},{"id":"628","name":"前郭尔罗斯蒙古族自治县","code":"220721","parentId":"626"},{"id":"629","name":"长岭县","code":"220722","parentId":"626"},{"id":"630","name":"乾安县","code":"220723","parentId":"626"},{"id":"631","name":"扶余市","code":"220781","parentId":"626"}]},{"id":"632","name":"白城市","code":"220800","parentId":"577","children":[{"id":"633","name":"洮北区","code":"220802","parentId":"632"},{"id":"634","name":"镇赉县","code":"220821","parentId":"632"},{"id":"635","name":"通榆县","code":"220822","parentId":"632"},{"id":"636","name":"洮南市","code":"220881","parentId":"632"},{"id":"637","name":"大安市","code":"220882","parentId":"632"}]},{"id":"638","name":"延边朝鲜族自治州","code":"222400","parentId":"577","children":[{"id":"639","name":"延吉市","code":"222401","parentId":"638"},{"id":"640","name":"图们市","code":"222402","parentId":"638"},{"id":"641","name":"敦化市","code":"222403","parentId":"638"},{"id":"642","name":"珲春市","code":"222404","parentId":"638"},{"id":"643","name":"龙井市","code":"222405","parentId":"638"},{"id":"644","name":"和龙市","code":"222406","parentId":"638"},{"id":"645","name":"汪清县","code":"222424","parentId":"638"},{"id":"646","name":"安图县","code":"222426","parentId":"638"}]}]},{"id":"647","name":"黑龙江省","code":"230000","parentId":"0","children":[{"id":"648","name":"哈尔滨市","code":"230100","parentId":"647","children":[{"id":"649","name":"道里区","code":"230102","parentId":"648"},{"id":"650","name":"南岗区","code":"230103","parentId":"648"},{"id":"651","name":"道外区","code":"230104","parentId":"648"},{"id":"652","name":"平房区","code":"230108","parentId":"648"},{"id":"653","name":"松北区","code":"230109","parentId":"648"},{"id":"654","name":"香坊区","code":"230110","parentId":"648"},{"id":"655","name":"呼兰区","code":"230111","parentId":"648"},{"id":"656","name":"阿城区","code":"230112","parentId":"648"},{"id":"657","name":"双城区","code":"230113","parentId":"648"},{"id":"658","name":"依兰县","code":"230123","parentId":"648"},{"id":"659","name":"方正县","code":"230124","parentId":"648"},{"id":"660","name":"宾县","code":"230125","parentId":"648"},{"id":"661","name":"巴彦县","code":"230126","parentId":"648"},{"id":"662","name":"木兰县","code":"230127","parentId":"648"},{"id":"663","name":"通河县","code":"230128","parentId":"648"},{"id":"664","name":"延寿县","code":"230129","parentId":"648"},{"id":"665","name":"尚志市","code":"230183","parentId":"648"},{"id":"666","name":"五常市","code":"230184","parentId":"648"}]},{"id":"667","name":"齐齐哈尔市","code":"230200","parentId":"647","children":[{"id":"668","name":"龙沙区","code":"230202","parentId":"667"},{"id":"669","name":"建华区","code":"230203","parentId":"667"},{"id":"670","name":"铁锋区","code":"230204","parentId":"667"},{"id":"671","name":"昂昂溪区","code":"230205","parentId":"667"},{"id":"672","name":"富拉尔基区","code":"230206","parentId":"667"},{"id":"673","name":"碾子山区","code":"230207","parentId":"667"},{"id":"674","name":"梅里斯达斡尔族区","code":"230208","parentId":"667"},{"id":"675","name":"龙江县","code":"230221","parentId":"667"},{"id":"676","name":"依安县","code":"230223","parentId":"667"},{"id":"677","name":"泰来县","code":"230224","parentId":"667"},{"id":"678","name":"甘南县","code":"230225","parentId":"667"},{"id":"679","name":"富裕县","code":"230227","parentId":"667"},{"id":"680","name":"克山县","code":"230229","parentId":"667"},{"id":"681","name":"克东县","code":"230230","parentId":"667"},{"id":"682","name":"拜泉县","code":"230231","parentId":"667"},{"id":"683","name":"讷河市","code":"230281","parentId":"667"}]},{"id":"684","name":"鸡西市","code":"230300","parentId":"647","children":[{"id":"685","name":"鸡冠区","code":"230302","parentId":"684"},{"id":"686","name":"恒山区","code":"230303","parentId":"684"},{"id":"687","name":"滴道区","code":"230304","parentId":"684"},{"id":"688","name":"梨树区","code":"230305","parentId":"684"},{"id":"689","name":"城子河区","code":"230306","parentId":"684"},{"id":"690","name":"麻山区","code":"230307","parentId":"684"},{"id":"691","name":"鸡东县","code":"230321","parentId":"684"},{"id":"692","name":"虎林市","code":"230381","parentId":"684"},{"id":"693","name":"密山市","code":"230382","parentId":"684"}]},{"id":"694","name":"鹤岗市","code":"230400","parentId":"647","children":[{"id":"695","name":"向阳区","code":"230402","parentId":"694"},{"id":"696","name":"工农区","code":"230403","parentId":"694"},{"id":"697","name":"南山区","code":"230404","parentId":"694"},{"id":"698","name":"兴安区","code":"230405","parentId":"694"},{"id":"699","name":"东山区","code":"230406","parentId":"694"},{"id":"700","name":"兴山区","code":"230407","parentId":"694"},{"id":"701","name":"萝北县","code":"230421","parentId":"694"},{"id":"702","name":"绥滨县","code":"230422","parentId":"694"}]},{"id":"703","name":"双鸭山市","code":"230500","parentId":"647","children":[{"id":"704","name":"尖山区","code":"230502","parentId":"703"},{"id":"705","name":"岭东区","code":"230503","parentId":"703"},{"id":"706","name":"四方台区","code":"230505","parentId":"703"},{"id":"707","name":"宝山区","code":"230506","parentId":"703"},{"id":"708","name":"集贤县","code":"230521","parentId":"703"},{"id":"709","name":"友谊县","code":"230522","parentId":"703"},{"id":"710","name":"宝清县","code":"230523","parentId":"703"},{"id":"711","name":"饶河县","code":"230524","parentId":"703"}]},{"id":"712","name":"大庆市","code":"230600","parentId":"647","children":[{"id":"713","name":"萨尔图区","code":"230602","parentId":"712"},{"id":"714","name":"龙凤区","code":"230603","parentId":"712"},{"id":"715","name":"让胡路区","code":"230604","parentId":"712"},{"id":"716","name":"红岗区","code":"230605","parentId":"712"},{"id":"717","name":"大同区","code":"230606","parentId":"712"},{"id":"718","name":"肇州县","code":"230621","parentId":"712"},{"id":"719","name":"肇源县","code":"230622","parentId":"712"},{"id":"720","name":"林甸县","code":"230623","parentId":"712"},{"id":"721","name":"杜尔伯特蒙古族自治县","code":"230624","parentId":"712"}]},{"id":"722","name":"伊春市","code":"230700","parentId":"647","children":[{"id":"723","name":"伊春区","code":"230702","parentId":"722"},{"id":"724","name":"南岔区","code":"230703","parentId":"722"},{"id":"725","name":"友好区","code":"230704","parentId":"722"},{"id":"726","name":"西林区","code":"230705","parentId":"722"},{"id":"727","name":"翠峦区","code":"230706","parentId":"722"},{"id":"728","name":"新青区","code":"230707","parentId":"722"},{"id":"729","name":"美溪区","code":"230708","parentId":"722"},{"id":"730","name":"金山屯区","code":"230709","parentId":"722"},{"id":"731","name":"五营区","code":"230710","parentId":"722"},{"id":"732","name":"乌马河区","code":"230711","parentId":"722"},{"id":"733","name":"汤旺河区","code":"230712","parentId":"722"},{"id":"734","name":"带岭区","code":"230713","parentId":"722"},{"id":"735","name":"乌伊岭区","code":"230714","parentId":"722"},{"id":"736","name":"红星区","code":"230715","parentId":"722"},{"id":"737","name":"上甘岭区","code":"230716","parentId":"722"},{"id":"738","name":"嘉荫县","code":"230722","parentId":"722"},{"id":"739","name":"铁力市","code":"230781","parentId":"722"}]},{"id":"740","name":"佳木斯市","code":"230800","parentId":"647","children":[{"id":"741","name":"向阳区","code":"230803","parentId":"740"},{"id":"742","name":"前进区","code":"230804","parentId":"740"},{"id":"743","name":"东风区","code":"230805","parentId":"740"},{"id":"744","name":"郊区","code":"230811","parentId":"740"},{"id":"745","name":"桦南县","code":"230822","parentId":"740"},{"id":"746","name":"桦川县","code":"230826","parentId":"740"},{"id":"747","name":"汤原县","code":"230828","parentId":"740"},{"id":"748","name":"同江市","code":"230881","parentId":"740"},{"id":"749","name":"富锦市","code":"230882","parentId":"740"},{"id":"750","name":"抚远市","code":"230883","parentId":"740"}]},{"id":"751","name":"七台河市","code":"230900","parentId":"647","children":[{"id":"752","name":"新兴区","code":"230902","parentId":"751"},{"id":"753","name":"桃山区","code":"230903","parentId":"751"},{"id":"754","name":"茄子河区","code":"230904","parentId":"751"},{"id":"755","name":"勃利县","code":"230921","parentId":"751"}]},{"id":"756","name":"牡丹江市","code":"231000","parentId":"647","children":[{"id":"757","name":"东安区","code":"231002","parentId":"756"},{"id":"758","name":"阳明区","code":"231003","parentId":"756"},{"id":"759","name":"爱民区","code":"231004","parentId":"756"},{"id":"760","name":"西安区","code":"231005","parentId":"756"},{"id":"761","name":"林口县","code":"231025","parentId":"756"},{"id":"762","name":"绥芬河市","code":"231081","parentId":"756"},{"id":"763","name":"海林市","code":"231083","parentId":"756"},{"id":"764","name":"宁安市","code":"231084","parentId":"756"},{"id":"765","name":"穆棱市","code":"231085","parentId":"756"},{"id":"766","name":"东宁市","code":"231086","parentId":"756"}]},{"id":"767","name":"黑河市","code":"231100","parentId":"647","children":[{"id":"768","name":"爱辉区","code":"231102","parentId":"767"},{"id":"769","name":"嫩江县","code":"231121","parentId":"767"},{"id":"770","name":"逊克县","code":"231123","parentId":"767"},{"id":"771","name":"孙吴县","code":"231124","parentId":"767"},{"id":"772","name":"北安市","code":"231181","parentId":"767"},{"id":"773","name":"五大连池市","code":"231182","parentId":"767"}]},{"id":"774","name":"绥化市","code":"231200","parentId":"647","children":[{"id":"775","name":"北林区","code":"231202","parentId":"774"},{"id":"776","name":"望奎县","code":"231221","parentId":"774"},{"id":"777","name":"兰西县","code":"231222","parentId":"774"},{"id":"778","name":"青冈县","code":"231223","parentId":"774"},{"id":"779","name":"庆安县","code":"231224","parentId":"774"},{"id":"780","name":"明水县","code":"231225","parentId":"774"},{"id":"781","name":"绥棱县","code":"231226","parentId":"774"},{"id":"782","name":"安达市","code":"231281","parentId":"774"},{"id":"783","name":"肇东市","code":"231282","parentId":"774"},{"id":"784","name":"海伦市","code":"231283","parentId":"774"}]},{"id":"785","name":"大兴安岭地区","code":"232700","parentId":"647","children":[{"id":"786","name":"呼玛县","code":"232721","parentId":"785"},{"id":"787","name":"塔河县","code":"232722","parentId":"785"},{"id":"788","name":"漠河县","code":"232723","parentId":"785"}]}]},{"id":"806","name":"江苏省","code":"320000","parentId":"0","children":[{"id":"807","name":"南京市","code":"320100","parentId":"806","children":[{"id":"808","name":"玄武区","code":"320102","parentId":"807"},{"id":"809","name":"秦淮区","code":"320104","parentId":"807"},{"id":"810","name":"建邺区","code":"320105","parentId":"807"},{"id":"811","name":"鼓楼区","code":"320106","parentId":"807"},{"id":"812","name":"浦口区","code":"320111","parentId":"807"},{"id":"813","name":"栖霞区","code":"320113","parentId":"807"},{"id":"814","name":"雨花台区","code":"320114","parentId":"807"},{"id":"815","name":"江宁区","code":"320115","parentId":"807"},{"id":"816","name":"六合区","code":"320116","parentId":"807"},{"id":"817","name":"溧水区","code":"320117","parentId":"807"},{"id":"818","name":"高淳区","code":"320118","parentId":"807"}]},{"id":"819","name":"无锡市","code":"320200","parentId":"806","children":[{"id":"820","name":"锡山区","code":"320205","parentId":"819"},{"id":"821","name":"惠山区","code":"320206","parentId":"819"},{"id":"822","name":"滨湖区","code":"320211","parentId":"819"},{"id":"823","name":"梁溪区","code":"320213","parentId":"819"},{"id":"824","name":"新吴区","code":"320214","parentId":"819"},{"id":"825","name":"江阴市","code":"320281","parentId":"819"},{"id":"826","name":"宜兴市","code":"320282","parentId":"819"}]},{"id":"827","name":"徐州市","code":"320300","parentId":"806","children":[{"id":"828","name":"鼓楼区","code":"320302","parentId":"827"},{"id":"829","name":"云龙区","code":"320303","parentId":"827"},{"id":"830","name":"贾汪区","code":"320305","parentId":"827"},{"id":"831","name":"泉山区","code":"320311","parentId":"827"},{"id":"832","name":"铜山区","code":"320312","parentId":"827"},{"id":"833","name":"丰县","code":"320321","parentId":"827"},{"id":"834","name":"沛县","code":"320322","parentId":"827"},{"id":"835","name":"睢宁县","code":"320324","parentId":"827"},{"id":"836","name":"新沂市","code":"320381","parentId":"827"},{"id":"837","name":"邳州市","code":"320382","parentId":"827"}]},{"id":"838","name":"常州市","code":"320400","parentId":"806","children":[{"id":"839","name":"天宁区","code":"320402","parentId":"838"},{"id":"840","name":"钟楼区","code":"320404","parentId":"838"},{"id":"841","name":"新北区","code":"320411","parentId":"838"},{"id":"842","name":"武进区","code":"320412","parentId":"838"},{"id":"843","name":"金坛区","code":"320413","parentId":"838"},{"id":"844","name":"溧阳市","code":"320481","parentId":"838"}]},{"id":"845","name":"苏州市","code":"320500","parentId":"806","children":[{"id":"846","name":"虎丘区","code":"320505","parentId":"845"},{"id":"847","name":"吴中区","code":"320506","parentId":"845"},{"id":"848","name":"相城区","code":"320507","parentId":"845"},{"id":"849","name":"姑苏区","code":"320508","parentId":"845"},{"id":"850","name":"吴江区","code":"320509","parentId":"845"},{"id":"851","name":"常熟市","code":"320581","parentId":"845"},{"id":"852","name":"张家港市","code":"320582","parentId":"845"},{"id":"853","name":"昆山市","code":"320583","parentId":"845"},{"id":"854","name":"太仓市","code":"320585","parentId":"845"}]},{"id":"855","name":"南通市","code":"320600","parentId":"806","children":[{"id":"856","name":"崇川区","code":"320602","parentId":"855"},{"id":"857","name":"港闸区","code":"320611","parentId":"855"},{"id":"858","name":"通州区","code":"320612","parentId":"855"},{"id":"859","name":"海安县","code":"320621","parentId":"855"},{"id":"860","name":"如东县","code":"320623","parentId":"855"},{"id":"861","name":"启东市","code":"320681","parentId":"855"},{"id":"862","name":"如皋市","code":"320682","parentId":"855"},{"id":"863","name":"海门市","code":"320684","parentId":"855"}]},{"id":"864","name":"连云港市","code":"320700","parentId":"806","children":[{"id":"865","name":"连云区","code":"320703","parentId":"864"},{"id":"866","name":"海州区","code":"320706","parentId":"864"},{"id":"867","name":"赣榆区","code":"320707","parentId":"864"},{"id":"868","name":"东海县","code":"320722","parentId":"864"},{"id":"869","name":"灌云县","code":"320723","parentId":"864"},{"id":"870","name":"灌南县","code":"320724","parentId":"864"}]},{"id":"871","name":"淮安市","code":"320800","parentId":"806","children":[{"id":"872","name":"淮安区","code":"320803","parentId":"871"},{"id":"873","name":"淮阴区","code":"320804","parentId":"871"},{"id":"874","name":"清江浦区","code":"320812","parentId":"871"},{"id":"875","name":"洪泽区","code":"320813","parentId":"871"},{"id":"876","name":"涟水县","code":"320826","parentId":"871"},{"id":"877","name":"盱眙县","code":"320830","parentId":"871"},{"id":"878","name":"金湖县","code":"320831","parentId":"871"}]},{"id":"879","name":"盐城市","code":"320900","parentId":"806","children":[{"id":"880","name":"亭湖区","code":"320902","parentId":"879"},{"id":"881","name":"盐都区","code":"320903","parentId":"879"},{"id":"882","name":"大丰区","code":"320904","parentId":"879"},{"id":"883","name":"响水县","code":"320921","parentId":"879"},{"id":"884","name":"滨海县","code":"320922","parentId":"879"},{"id":"885","name":"阜宁县","code":"320923","parentId":"879"},{"id":"886","name":"射阳县","code":"320924","parentId":"879"},{"id":"887","name":"建湖县","code":"320925","parentId":"879"},{"id":"888","name":"东台市","code":"320981","parentId":"879"}]},{"id":"889","name":"扬州市","code":"321000","parentId":"806","children":[{"id":"890","name":"广陵区","code":"321002","parentId":"889"},{"id":"891","name":"邗江区","code":"321003","parentId":"889"},{"id":"892","name":"江都区","code":"321012","parentId":"889"},{"id":"893","name":"宝应县","code":"321023","parentId":"889"},{"id":"894","name":"仪征市","code":"321081","parentId":"889"},{"id":"895","name":"高邮市","code":"321084","parentId":"889"}]},{"id":"896","name":"镇江市","code":"321100","parentId":"806","children":[{"id":"897","name":"京口区","code":"321102","parentId":"896"},{"id":"898","name":"润州区","code":"321111","parentId":"896"},{"id":"899","name":"丹徒区","code":"321112","parentId":"896"},{"id":"900","name":"丹阳市","code":"321181","parentId":"896"},{"id":"901","name":"扬中市","code":"321182","parentId":"896"},{"id":"902","name":"句容市","code":"321183","parentId":"896"}]},{"id":"903","name":"泰州市","code":"321200","parentId":"806","children":[{"id":"904","name":"海陵区","code":"321202","parentId":"903"},{"id":"905","name":"高港区","code":"321203","parentId":"903"},{"id":"906","name":"姜堰区","code":"321204","parentId":"903"},{"id":"907","name":"兴化市","code":"321281","parentId":"903"},{"id":"908","name":"靖江市","code":"321282","parentId":"903"},{"id":"909","name":"泰兴市","code":"321283","parentId":"903"}]},{"id":"910","name":"宿迁市","code":"321300","parentId":"806","children":[{"id":"911","name":"宿城区","code":"321302","parentId":"910"},{"id":"912","name":"宿豫区","code":"321311","parentId":"910"},{"id":"913","name":"沭阳县","code":"321322","parentId":"910"},{"id":"914","name":"泗阳县","code":"321323","parentId":"910"},{"id":"915","name":"泗洪县","code":"321324","parentId":"910"}]}]},{"id":"916","name":"浙江省","code":"330000","parentId":"0","children":[{"id":"917","name":"杭州市","code":"330100","parentId":"916","children":[{"id":"918","name":"上城区","code":"330102","parentId":"917"},{"id":"919","name":"下城区","code":"330103","parentId":"917"},{"id":"920","name":"江干区","code":"330104","parentId":"917"},{"id":"921","name":"拱墅区","code":"330105","parentId":"917"},{"id":"922","name":"西湖区","code":"330106","parentId":"917"},{"id":"923","name":"滨江区","code":"330108","parentId":"917"},{"id":"924","name":"萧山区","code":"330109","parentId":"917"},{"id":"925","name":"余杭区","code":"330110","parentId":"917"},{"id":"926","name":"富阳区","code":"330111","parentId":"917"},{"id":"927","name":"临安区","code":"330112","parentId":"917"},{"id":"928","name":"桐庐县","code":"330122","parentId":"917"},{"id":"929","name":"淳安县","code":"330127","parentId":"917"},{"id":"930","name":"建德市","code":"330182","parentId":"917"}]},{"id":"931","name":"宁波市","code":"330200","parentId":"916","children":[{"id":"932","name":"海曙区","code":"330203","parentId":"931"},{"id":"933","name":"江北区","code":"330205","parentId":"931"},{"id":"934","name":"北仑区","code":"330206","parentId":"931"},{"id":"935","name":"镇海区","code":"330211","parentId":"931"},{"id":"936","name":"鄞州区","code":"330212","parentId":"931"},{"id":"937","name":"奉化区","code":"330213","parentId":"931"},{"id":"938","name":"象山县","code":"330225","parentId":"931"},{"id":"939","name":"宁海县","code":"330226","parentId":"931"},{"id":"940","name":"余姚市","code":"330281","parentId":"931"},{"id":"941","name":"慈溪市","code":"330282","parentId":"931"}]},{"id":"942","name":"温州市","code":"330300","parentId":"916","children":[{"id":"943","name":"鹿城区","code":"330302","parentId":"942"},{"id":"944","name":"龙湾区","code":"330303","parentId":"942"},{"id":"945","name":"瓯海区","code":"330304","parentId":"942"},{"id":"946","name":"洞头区","code":"330305","parentId":"942"},{"id":"947","name":"永嘉县","code":"330324","parentId":"942"},{"id":"948","name":"平阳县","code":"330326","parentId":"942"},{"id":"949","name":"苍南县","code":"330327","parentId":"942"},{"id":"950","name":"文成县","code":"330328","parentId":"942"},{"id":"951","name":"泰顺县","code":"330329","parentId":"942"},{"id":"952","name":"瑞安市","code":"330381","parentId":"942"},{"id":"953","name":"乐清市","code":"330382","parentId":"942"}]},{"id":"954","name":"嘉兴市","code":"330400","parentId":"916","children":[{"id":"955","name":"南湖区","code":"330402","parentId":"954"},{"id":"956","name":"秀洲区","code":"330411","parentId":"954"},{"id":"957","name":"嘉善县","code":"330421","parentId":"954"},{"id":"958","name":"海盐县","code":"330424","parentId":"954"},{"id":"959","name":"海宁市","code":"330481","parentId":"954"},{"id":"960","name":"平湖市","code":"330482","parentId":"954"},{"id":"961","name":"桐乡市","code":"330483","parentId":"954"}]},{"id":"962","name":"湖州市","code":"330500","parentId":"916","children":[{"id":"963","name":"吴兴区","code":"330502","parentId":"962"},{"id":"964","name":"南浔区","code":"330503","parentId":"962"},{"id":"965","name":"德清县","code":"330521","parentId":"962"},{"id":"966","name":"长兴县","code":"330522","parentId":"962"},{"id":"967","name":"安吉县","code":"330523","parentId":"962"}]},{"id":"968","name":"绍兴市","code":"330600","parentId":"916","children":[{"id":"969","name":"越城区","code":"330602","parentId":"968"},{"id":"970","name":"柯桥区","code":"330603","parentId":"968"},{"id":"971","name":"上虞区","code":"330604","parentId":"968"},{"id":"972","name":"新昌县","code":"330624","parentId":"968"},{"id":"973","name":"诸暨市","code":"330681","parentId":"968"},{"id":"974","name":"嵊州市","code":"330683","parentId":"968"}]},{"id":"975","name":"金华市","code":"330700","parentId":"916","children":[{"id":"976","name":"婺城区","code":"330702","parentId":"975"},{"id":"977","name":"金东区","code":"330703","parentId":"975"},{"id":"978","name":"武义县","code":"330723","parentId":"975"},{"id":"979","name":"浦江县","code":"330726","parentId":"975"},{"id":"980","name":"磐安县","code":"330727","parentId":"975"},{"id":"981","name":"兰溪市","code":"330781","parentId":"975"},{"id":"982","name":"义乌市","code":"330782","parentId":"975"},{"id":"983","name":"东阳市","code":"330783","parentId":"975"},{"id":"984","name":"永康市","code":"330784","parentId":"975"}]},{"id":"985","name":"衢州市","code":"330800","parentId":"916","children":[{"id":"986","name":"柯城区","code":"330802","parentId":"985"},{"id":"987","name":"衢江区","code":"330803","parentId":"985"},{"id":"988","name":"常山县","code":"330822","parentId":"985"},{"id":"989","name":"开化县","code":"330824","parentId":"985"},{"id":"990","name":"龙游县","code":"330825","parentId":"985"},{"id":"991","name":"江山市","code":"330881","parentId":"985"}]},{"id":"992","name":"舟山市","code":"330900","parentId":"916","children":[{"id":"993","name":"定海区","code":"330902","parentId":"992"},{"id":"994","name":"普陀区","code":"330903","parentId":"992"},{"id":"995","name":"岱山县","code":"330921","parentId":"992"},{"id":"996","name":"嵊泗县","code":"330922","parentId":"992"}]},{"id":"997","name":"台州市","code":"331000","parentId":"916","children":[{"id":"998","name":"椒江区","code":"331002","parentId":"997"},{"id":"999","name":"黄岩区","code":"331003","parentId":"997"},{"id":"1000","name":"路桥区","code":"331004","parentId":"997"},{"id":"1001","name":"三门县","code":"331022","parentId":"997"},{"id":"1002","name":"天台县","code":"331023","parentId":"997"},{"id":"1003","name":"仙居县","code":"331024","parentId":"997"},{"id":"1004","name":"温岭市","code":"331081","parentId":"997"},{"id":"1005","name":"临海市","code":"331082","parentId":"997"},{"id":"1006","name":"玉环市","code":"331083","parentId":"997"}]},{"id":"1007","name":"丽水市","code":"331100","parentId":"916","children":[{"id":"1008","name":"莲都区","code":"331102","parentId":"1007"},{"id":"1009","name":"青田县","code":"331121","parentId":"1007"},{"id":"1010","name":"缙云县","code":"331122","parentId":"1007"},{"id":"1011","name":"遂昌县","code":"331123","parentId":"1007"},{"id":"1012","name":"松阳县","code":"331124","parentId":"1007"},{"id":"1013","name":"云和县","code":"331125","parentId":"1007"},{"id":"1014","name":"庆元县","code":"331126","parentId":"1007"},{"id":"1015","name":"景宁畲族自治县","code":"331127","parentId":"1007"},{"id":"1016","name":"龙泉市","code":"331181","parentId":"1007"}]}]},{"id":"1017","name":"安徽省","code":"340000","parentId":"0","children":[{"id":"1018","name":"合肥市","code":"340100","parentId":"1017","children":[{"id":"1019","name":"瑶海区","code":"340102","parentId":"1018"},{"id":"1020","name":"庐阳区","code":"340103","parentId":"1018"},{"id":"1021","name":"蜀山区","code":"340104","parentId":"1018"},{"id":"1022","name":"包河区","code":"340111","parentId":"1018"},{"id":"1023","name":"长丰县","code":"340121","parentId":"1018"},{"id":"1024","name":"肥东县","code":"340122","parentId":"1018"},{"id":"1025","name":"肥西县","code":"340123","parentId":"1018"},{"id":"1026","name":"庐江县","code":"340124","parentId":"1018"},{"id":"1027","name":"巢湖市","code":"340181","parentId":"1018"}]},{"id":"1028","name":"芜湖市","code":"340200","parentId":"1017","children":[{"id":"1029","name":"镜湖区","code":"340202","parentId":"1028"},{"id":"1030","name":"弋江区","code":"340203","parentId":"1028"},{"id":"1031","name":"鸠江区","code":"340207","parentId":"1028"},{"id":"1032","name":"三山区","code":"340208","parentId":"1028"},{"id":"1033","name":"芜湖县","code":"340221","parentId":"1028"},{"id":"1034","name":"繁昌县","code":"340222","parentId":"1028"},{"id":"1035","name":"南陵县","code":"340223","parentId":"1028"},{"id":"1036","name":"无为县","code":"340225","parentId":"1028"}]},{"id":"1037","name":"蚌埠市","code":"340300","parentId":"1017","children":[{"id":"1038","name":"龙子湖区","code":"340302","parentId":"1037"},{"id":"1039","name":"蚌山区","code":"340303","parentId":"1037"},{"id":"1040","name":"禹会区","code":"340304","parentId":"1037"},{"id":"1041","name":"淮上区","code":"340311","parentId":"1037"},{"id":"1042","name":"怀远县","code":"340321","parentId":"1037"},{"id":"1043","name":"五河县","code":"340322","parentId":"1037"},{"id":"1044","name":"固镇县","code":"340323","parentId":"1037"}]},{"id":"1045","name":"淮南市","code":"340400","parentId":"1017","children":[{"id":"1046","name":"大通区","code":"340402","parentId":"1045"},{"id":"1047","name":"田家庵区","code":"340403","parentId":"1045"},{"id":"1048","name":"谢家集区","code":"340404","parentId":"1045"},{"id":"1049","name":"八公山区","code":"340405","parentId":"1045"},{"id":"1050","name":"潘集区","code":"340406","parentId":"1045"},{"id":"1051","name":"凤台县","code":"340421","parentId":"1045"},{"id":"1052","name":"寿县","code":"340422","parentId":"1045"}]},{"id":"1053","name":"马鞍山市","code":"340500","parentId":"1017","children":[{"id":"1054","name":"花山区","code":"340503","parentId":"1053"},{"id":"1055","name":"雨山区","code":"340504","parentId":"1053"},{"id":"1056","name":"博望区","code":"340506","parentId":"1053"},{"id":"1057","name":"当涂县","code":"340521","parentId":"1053"},{"id":"1058","name":"含山县","code":"340522","parentId":"1053"},{"id":"1059","name":"和县","code":"340523","parentId":"1053"}]},{"id":"1060","name":"淮北市","code":"340600","parentId":"1017","children":[{"id":"1061","name":"杜集区","code":"340602","parentId":"1060"},{"id":"1062","name":"相山区","code":"340603","parentId":"1060"},{"id":"1063","name":"烈山区","code":"340604","parentId":"1060"},{"id":"1064","name":"濉溪县","code":"340621","parentId":"1060"}]},{"id":"1065","name":"铜陵市","code":"340700","parentId":"1017","children":[{"id":"1066","name":"铜官区","code":"340705","parentId":"1065"},{"id":"1067","name":"义安区","code":"340706","parentId":"1065"},{"id":"1068","name":"郊区","code":"340711","parentId":"1065"},{"id":"1069","name":"枞阳县","code":"340722","parentId":"1065"}]},{"id":"1070","name":"安庆市","code":"340800","parentId":"1017","children":[{"id":"1071","name":"迎江区","code":"340802","parentId":"1070"},{"id":"1072","name":"大观区","code":"340803","parentId":"1070"},{"id":"1073","name":"宜秀区","code":"340811","parentId":"1070"},{"id":"1074","name":"怀宁县","code":"340822","parentId":"1070"},{"id":"1075","name":"潜山县","code":"340824","parentId":"1070"},{"id":"1076","name":"太湖县","code":"340825","parentId":"1070"},{"id":"1077","name":"宿松县","code":"340826","parentId":"1070"},{"id":"1078","name":"望江县","code":"340827","parentId":"1070"},{"id":"1079","name":"岳西县","code":"340828","parentId":"1070"},{"id":"1080","name":"桐城市","code":"340881","parentId":"1070"}]},{"id":"1081","name":"黄山市","code":"341000","parentId":"1017","children":[{"id":"1082","name":"屯溪区","code":"341002","parentId":"1081"},{"id":"1083","name":"黄山区","code":"341003","parentId":"1081"},{"id":"1084","name":"徽州区","code":"341004","parentId":"1081"},{"id":"1085","name":"歙县","code":"341021","parentId":"1081"},{"id":"1086","name":"休宁县","code":"341022","parentId":"1081"},{"id":"1087","name":"黟县","code":"341023","parentId":"1081"},{"id":"1088","name":"祁门县","code":"341024","parentId":"1081"}]},{"id":"1089","name":"滁州市","code":"341100","parentId":"1017","children":[{"id":"1090","name":"琅琊区","code":"341102","parentId":"1089"},{"id":"1091","name":"南谯区","code":"341103","parentId":"1089"},{"id":"1092","name":"来安县","code":"341122","parentId":"1089"},{"id":"1093","name":"全椒县","code":"341124","parentId":"1089"},{"id":"1094","name":"定远县","code":"341125","parentId":"1089"},{"id":"1095","name":"凤阳县","code":"341126","parentId":"1089"},{"id":"1096","name":"天长市","code":"341181","parentId":"1089"},{"id":"1097","name":"明光市","code":"341182","parentId":"1089"}]},{"id":"1098","name":"阜阳市","code":"341200","parentId":"1017","children":[{"id":"1099","name":"颍州区","code":"341202","parentId":"1098"},{"id":"1100","name":"颍东区","code":"341203","parentId":"1098"},{"id":"1101","name":"颍泉区","code":"341204","parentId":"1098"},{"id":"1102","name":"临泉县","code":"341221","parentId":"1098"},{"id":"1103","name":"太和县","code":"341222","parentId":"1098"},{"id":"1104","name":"阜南县","code":"341225","parentId":"1098"},{"id":"1105","name":"颍上县","code":"341226","parentId":"1098"},{"id":"1106","name":"界首市","code":"341282","parentId":"1098"}]},{"id":"1107","name":"宿州市","code":"341300","parentId":"1017","children":[{"id":"1108","name":"埇桥区","code":"341302","parentId":"1107"},{"id":"1109","name":"砀山县","code":"341321","parentId":"1107"},{"id":"1110","name":"萧县","code":"341322","parentId":"1107"},{"id":"1111","name":"灵璧县","code":"341323","parentId":"1107"},{"id":"1112","name":"泗县","code":"341324","parentId":"1107"}]},{"id":"1113","name":"六安市","code":"341500","parentId":"1017","children":[{"id":"1114","name":"金安区","code":"341502","parentId":"1113"},{"id":"1115","name":"裕安区","code":"341503","parentId":"1113"},{"id":"1116","name":"叶集区","code":"341504","parentId":"1113"},{"id":"1117","name":"霍邱县","code":"341522","parentId":"1113"},{"id":"1118","name":"舒城县","code":"341523","parentId":"1113"},{"id":"1119","name":"金寨县","code":"341524","parentId":"1113"},{"id":"1120","name":"霍山县","code":"341525","parentId":"1113"}]},{"id":"1121","name":"亳州市","code":"341600","parentId":"1017","children":[{"id":"1122","name":"谯城区","code":"341602","parentId":"1121"},{"id":"1123","name":"涡阳县","code":"341621","parentId":"1121"},{"id":"1124","name":"蒙城县","code":"341622","parentId":"1121"},{"id":"1125","name":"利辛县","code":"341623","parentId":"1121"}]},{"id":"1126","name":"池州市","code":"341700","parentId":"1017","children":[{"id":"1127","name":"贵池区","code":"341702","parentId":"1126"},{"id":"1128","name":"东至县","code":"341721","parentId":"1126"},{"id":"1129","name":"石台县","code":"341722","parentId":"1126"},{"id":"1130","name":"青阳县","code":"341723","parentId":"1126"}]},{"id":"1131","name":"宣城市","code":"341800","parentId":"1017","children":[{"id":"1132","name":"宣州区","code":"341802","parentId":"1131"},{"id":"1133","name":"郎溪县","code":"341821","parentId":"1131"},{"id":"1134","name":"广德县","code":"341822","parentId":"1131"},{"id":"1135","name":"泾县","code":"341823","parentId":"1131"},{"id":"1136","name":"绩溪县","code":"341824","parentId":"1131"},{"id":"1137","name":"旌德县","code":"341825","parentId":"1131"},{"id":"1138","name":"宁国市","code":"341881","parentId":"1131"}]}]},{"id":"1139","name":"福建省","code":"350000","parentId":"0","children":[{"id":"1140","name":"福州市","code":"350100","parentId":"1139","children":[{"id":"1141","name":"鼓楼区","code":"350102","parentId":"1140"},{"id":"1142","name":"台江区","code":"350103","parentId":"1140"},{"id":"1143","name":"仓山区","code":"350104","parentId":"1140"},{"id":"1144","name":"马尾区","code":"350105","parentId":"1140"},{"id":"1145","name":"晋安区","code":"350111","parentId":"1140"},{"id":"1146","name":"长乐区","code":"350112","parentId":"1140"},{"id":"1147","name":"闽侯县","code":"350121","parentId":"1140"},{"id":"1148","name":"连江县","code":"350122","parentId":"1140"},{"id":"1149","name":"罗源县","code":"350123","parentId":"1140"},{"id":"1150","name":"闽清县","code":"350124","parentId":"1140"},{"id":"1151","name":"永泰县","code":"350125","parentId":"1140"},{"id":"1152","name":"平潭县","code":"350128","parentId":"1140"},{"id":"1153","name":"福清市","code":"350181","parentId":"1140"}]},{"id":"1154","name":"厦门市","code":"350200","parentId":"1139","children":[{"id":"1155","name":"思明区","code":"350203","parentId":"1154"},{"id":"1156","name":"海沧区","code":"350205","parentId":"1154"},{"id":"1157","name":"湖里区","code":"350206","parentId":"1154"},{"id":"1158","name":"集美区","code":"350211","parentId":"1154"},{"id":"1159","name":"同安区","code":"350212","parentId":"1154"},{"id":"1160","name":"翔安区","code":"350213","parentId":"1154"}]},{"id":"1161","name":"莆田市","code":"350300","parentId":"1139","children":[{"id":"1162","name":"城厢区","code":"350302","parentId":"1161"},{"id":"1163","name":"涵江区","code":"350303","parentId":"1161"},{"id":"1164","name":"荔城区","code":"350304","parentId":"1161"},{"id":"1165","name":"秀屿区","code":"350305","parentId":"1161"},{"id":"1166","name":"仙游县","code":"350322","parentId":"1161"}]},{"id":"1167","name":"三明市","code":"350400","parentId":"1139","children":[{"id":"1168","name":"梅列区","code":"350402","parentId":"1167"},{"id":"1169","name":"三元区","code":"350403","parentId":"1167"},{"id":"1170","name":"明溪县","code":"350421","parentId":"1167"},{"id":"1171","name":"清流县","code":"350423","parentId":"1167"},{"id":"1172","name":"宁化县","code":"350424","parentId":"1167"},{"id":"1173","name":"大田县","code":"350425","parentId":"1167"},{"id":"1174","name":"尤溪县","code":"350426","parentId":"1167"},{"id":"1175","name":"沙县","code":"350427","parentId":"1167"},{"id":"1176","name":"将乐县","code":"350428","parentId":"1167"},{"id":"1177","name":"泰宁县","code":"350429","parentId":"1167"},{"id":"1178","name":"建宁县","code":"350430","parentId":"1167"},{"id":"1179","name":"永安市","code":"350481","parentId":"1167"}]},{"id":"1180","name":"泉州市","code":"350500","parentId":"1139","children":[{"id":"1181","name":"鲤城区","code":"350502","parentId":"1180"},{"id":"1182","name":"丰泽区","code":"350503","parentId":"1180"},{"id":"1183","name":"洛江区","code":"350504","parentId":"1180"},{"id":"1184","name":"泉港区","code":"350505","parentId":"1180"},{"id":"1185","name":"惠安县","code":"350521","parentId":"1180"},{"id":"1186","name":"安溪县","code":"350524","parentId":"1180"},{"id":"1187","name":"永春县","code":"350525","parentId":"1180"},{"id":"1188","name":"德化县","code":"350526","parentId":"1180"},{"id":"1189","name":"金门县","code":"350527","parentId":"1180"},{"id":"1190","name":"石狮市","code":"350581","parentId":"1180"},{"id":"1191","name":"晋江市","code":"350582","parentId":"1180"},{"id":"1192","name":"南安市","code":"350583","parentId":"1180"}]},{"id":"1193","name":"漳州市","code":"350600","parentId":"1139","children":[{"id":"1194","name":"芗城区","code":"350602","parentId":"1193"},{"id":"1195","name":"龙文区","code":"350603","parentId":"1193"},{"id":"1196","name":"云霄县","code":"350622","parentId":"1193"},{"id":"1197","name":"漳浦县","code":"350623","parentId":"1193"},{"id":"1198","name":"诏安县","code":"350624","parentId":"1193"},{"id":"1199","name":"长泰县","code":"350625","parentId":"1193"},{"id":"1200","name":"东山县","code":"350626","parentId":"1193"},{"id":"1201","name":"南靖县","code":"350627","parentId":"1193"},{"id":"1202","name":"平和县","code":"350628","parentId":"1193"},{"id":"1203","name":"华安县","code":"350629","parentId":"1193"},{"id":"1204","name":"龙海市","code":"350681","parentId":"1193"}]},{"id":"1205","name":"南平市","code":"350700","parentId":"1139","children":[{"id":"1206","name":"延平区","code":"350702","parentId":"1205"},{"id":"1207","name":"建阳区","code":"350703","parentId":"1205"},{"id":"1208","name":"顺昌县","code":"350721","parentId":"1205"},{"id":"1209","name":"浦城县","code":"350722","parentId":"1205"},{"id":"1210","name":"光泽县","code":"350723","parentId":"1205"},{"id":"1211","name":"松溪县","code":"350724","parentId":"1205"},{"id":"1212","name":"政和县","code":"350725","parentId":"1205"},{"id":"1213","name":"邵武市","code":"350781","parentId":"1205"},{"id":"1214","name":"武夷山市","code":"350782","parentId":"1205"},{"id":"1215","name":"建瓯市","code":"350783","parentId":"1205"}]},{"id":"1216","name":"龙岩市","code":"350800","parentId":"1139","children":[{"id":"1217","name":"新罗区","code":"350802","parentId":"1216"},{"id":"1218","name":"永定区","code":"350803","parentId":"1216"},{"id":"1219","name":"长汀县","code":"350821","parentId":"1216"},{"id":"1220","name":"上杭县","code":"350823","parentId":"1216"},{"id":"1221","name":"武平县","code":"350824","parentId":"1216"},{"id":"1222","name":"连城县","code":"350825","parentId":"1216"},{"id":"1223","name":"漳平市","code":"350881","parentId":"1216"}]},{"id":"1224","name":"宁德市","code":"350900","parentId":"1139","children":[{"id":"1225","name":"蕉城区","code":"350902","parentId":"1224"},{"id":"1226","name":"霞浦县","code":"350921","parentId":"1224"},{"id":"1227","name":"古田县","code":"350922","parentId":"1224"},{"id":"1228","name":"屏南县","code":"350923","parentId":"1224"},{"id":"1229","name":"寿宁县","code":"350924","parentId":"1224"},{"id":"1230","name":"周宁县","code":"350925","parentId":"1224"},{"id":"1231","name":"柘荣县","code":"350926","parentId":"1224"},{"id":"1232","name":"福安市","code":"350981","parentId":"1224"},{"id":"1233","name":"福鼎市","code":"350982","parentId":"1224"}]}]},{"id":"1234","name":"江西省","code":"360000","parentId":"0","children":[{"id":"1235","name":"南昌市","code":"360100","parentId":"1234","children":[{"id":"1236","name":"东湖区","code":"360102","parentId":"1235"},{"id":"1237","name":"西湖区","code":"360103","parentId":"1235"},{"id":"1238","name":"青云谱区","code":"360104","parentId":"1235"},{"id":"1239","name":"湾里区","code":"360105","parentId":"1235"},{"id":"1240","name":"青山湖区","code":"360111","parentId":"1235"},{"id":"1241","name":"新建区","code":"360112","parentId":"1235"},{"id":"1242","name":"南昌县","code":"360121","parentId":"1235"},{"id":"1243","name":"安义县","code":"360123","parentId":"1235"},{"id":"1244","name":"进贤县","code":"360124","parentId":"1235"}]},{"id":"1245","name":"景德镇市","code":"360200","parentId":"1234","children":[{"id":"1246","name":"昌江区","code":"360202","parentId":"1245"},{"id":"1247","name":"珠山区","code":"360203","parentId":"1245"},{"id":"1248","name":"浮梁县","code":"360222","parentId":"1245"},{"id":"1249","name":"乐平市","code":"360281","parentId":"1245"}]},{"id":"1250","name":"萍乡市","code":"360300","parentId":"1234","children":[{"id":"1251","name":"安源区","code":"360302","parentId":"1250"},{"id":"1252","name":"湘东区","code":"360313","parentId":"1250"},{"id":"1253","name":"莲花县","code":"360321","parentId":"1250"},{"id":"1254","name":"上栗县","code":"360322","parentId":"1250"},{"id":"1255","name":"芦溪县","code":"360323","parentId":"1250"}]},{"id":"1256","name":"九江市","code":"360400","parentId":"1234","children":[{"id":"1257","name":"濂溪区","code":"360402","parentId":"1256"},{"id":"1258","name":"浔阳区","code":"360403","parentId":"1256"},{"id":"1259","name":"柴桑区","code":"360404","parentId":"1256"},{"id":"1260","name":"武宁县","code":"360423","parentId":"1256"},{"id":"1261","name":"修水县","code":"360424","parentId":"1256"},{"id":"1262","name":"永修县","code":"360425","parentId":"1256"},{"id":"1263","name":"德安县","code":"360426","parentId":"1256"},{"id":"1264","name":"都昌县","code":"360428","parentId":"1256"},{"id":"1265","name":"湖口县","code":"360429","parentId":"1256"},{"id":"1266","name":"彭泽县","code":"360430","parentId":"1256"},{"id":"1267","name":"瑞昌市","code":"360481","parentId":"1256"},{"id":"1268","name":"共青城市","code":"360482","parentId":"1256"},{"id":"1269","name":"庐山市","code":"360483","parentId":"1256"}]},{"id":"1270","name":"新余市","code":"360500","parentId":"1234","children":[{"id":"1271","name":"渝水区","code":"360502","parentId":"1270"},{"id":"1272","name":"分宜县","code":"360521","parentId":"1270"}]},{"id":"1273","name":"鹰潭市","code":"360600","parentId":"1234","children":[{"id":"1274","name":"月湖区","code":"360602","parentId":"1273"},{"id":"1275","name":"余江县","code":"360622","parentId":"1273"},{"id":"1276","name":"贵溪市","code":"360681","parentId":"1273"}]},{"id":"1277","name":"赣州市","code":"360700","parentId":"1234","children":[{"id":"1278","name":"章贡区","code":"360702","parentId":"1277"},{"id":"1279","name":"南康区","code":"360703","parentId":"1277"},{"id":"1280","name":"赣县区","code":"360704","parentId":"1277"},{"id":"1281","name":"信丰县","code":"360722","parentId":"1277"},{"id":"1282","name":"大余县","code":"360723","parentId":"1277"},{"id":"1283","name":"上犹县","code":"360724","parentId":"1277"},{"id":"1284","name":"崇义县","code":"360725","parentId":"1277"},{"id":"1285","name":"安远县","code":"360726","parentId":"1277"},{"id":"1286","name":"龙南县","code":"360727","parentId":"1277"},{"id":"1287","name":"定南县","code":"360728","parentId":"1277"},{"id":"1288","name":"全南县","code":"360729","parentId":"1277"},{"id":"1289","name":"宁都县","code":"360730","parentId":"1277"},{"id":"1290","name":"于都县","code":"360731","parentId":"1277"},{"id":"1291","name":"兴国县","code":"360732","parentId":"1277"},{"id":"1292","name":"会昌县","code":"360733","parentId":"1277"},{"id":"1293","name":"寻乌县","code":"360734","parentId":"1277"},{"id":"1294","name":"石城县","code":"360735","parentId":"1277"},{"id":"1295","name":"瑞金市","code":"360781","parentId":"1277"}]},{"id":"1296","name":"吉安市","code":"360800","parentId":"1234","children":[{"id":"1297","name":"吉州区","code":"360802","parentId":"1296"},{"id":"1298","name":"青原区","code":"360803","parentId":"1296"},{"id":"1299","name":"吉安县","code":"360821","parentId":"1296"},{"id":"1300","name":"吉水县","code":"360822","parentId":"1296"},{"id":"1301","name":"峡江县","code":"360823","parentId":"1296"},{"id":"1302","name":"新干县","code":"360824","parentId":"1296"},{"id":"1303","name":"永丰县","code":"360825","parentId":"1296"},{"id":"1304","name":"泰和县","code":"360826","parentId":"1296"},{"id":"1305","name":"遂川县","code":"360827","parentId":"1296"},{"id":"1306","name":"万安县","code":"360828","parentId":"1296"},{"id":"1307","name":"安福县","code":"360829","parentId":"1296"},{"id":"1308","name":"永新县","code":"360830","parentId":"1296"},{"id":"1309","name":"井冈山市","code":"360881","parentId":"1296"}]},{"id":"1310","name":"宜春市","code":"360900","parentId":"1234","children":[{"id":"1311","name":"袁州区","code":"360902","parentId":"1310"},{"id":"1312","name":"奉新县","code":"360921","parentId":"1310"},{"id":"1313","name":"万载县","code":"360922","parentId":"1310"},{"id":"1314","name":"上高县","code":"360923","parentId":"1310"},{"id":"1315","name":"宜丰县","code":"360924","parentId":"1310"},{"id":"1316","name":"靖安县","code":"360925","parentId":"1310"},{"id":"1317","name":"铜鼓县","code":"360926","parentId":"1310"},{"id":"1318","name":"丰城市","code":"360981","parentId":"1310"},{"id":"1319","name":"樟树市","code":"360982","parentId":"1310"},{"id":"1320","name":"高安市","code":"360983","parentId":"1310"}]},{"id":"1321","name":"抚州市","code":"361000","parentId":"1234","children":[{"id":"1322","name":"临川区","code":"361002","parentId":"1321"},{"id":"1323","name":"东乡区","code":"361003","parentId":"1321"},{"id":"1324","name":"南城县","code":"361021","parentId":"1321"},{"id":"1325","name":"黎川县","code":"361022","parentId":"1321"},{"id":"1326","name":"南丰县","code":"361023","parentId":"1321"},{"id":"1327","name":"崇仁县","code":"361024","parentId":"1321"},{"id":"1328","name":"乐安县","code":"361025","parentId":"1321"},{"id":"1329","name":"宜黄县","code":"361026","parentId":"1321"},{"id":"1330","name":"金溪县","code":"361027","parentId":"1321"},{"id":"1331","name":"资溪县","code":"361028","parentId":"1321"},{"id":"1332","name":"广昌县","code":"361030","parentId":"1321"}]},{"id":"1333","name":"上饶市","code":"361100","parentId":"1234","children":[{"id":"1334","name":"信州区","code":"361102","parentId":"1333"},{"id":"1335","name":"广丰区","code":"361103","parentId":"1333"},{"id":"1336","name":"上饶县","code":"361121","parentId":"1333"},{"id":"1337","name":"玉山县","code":"361123","parentId":"1333"},{"id":"1338","name":"铅山县","code":"361124","parentId":"1333"},{"id":"1339","name":"横峰县","code":"361125","parentId":"1333"},{"id":"1340","name":"弋阳县","code":"361126","parentId":"1333"},{"id":"1341","name":"余干县","code":"361127","parentId":"1333"},{"id":"1342","name":"鄱阳县","code":"361128","parentId":"1333"},{"id":"1343","name":"万年县","code":"361129","parentId":"1333"},{"id":"1344","name":"婺源县","code":"361130","parentId":"1333"},{"id":"1345","name":"德兴市","code":"361181","parentId":"1333"}]}]},{"id":"1346","name":"山东省","code":"370000","parentId":"0","children":[{"id":"1347","name":"济南市","code":"370100","parentId":"1346","children":[{"id":"1348","name":"历下区","code":"370102","parentId":"1347"},{"id":"1349","name":"市中区","code":"370103","parentId":"1347"},{"id":"1350","name":"槐荫区","code":"370104","parentId":"1347"},{"id":"1351","name":"天桥区","code":"370105","parentId":"1347"},{"id":"1352","name":"历城区","code":"370112","parentId":"1347"},{"id":"1353","name":"长清区","code":"370113","parentId":"1347"},{"id":"1354","name":"章丘区","code":"370114","parentId":"1347"},{"id":"1355","name":"平阴县","code":"370124","parentId":"1347"},{"id":"1356","name":"济阳县","code":"370125","parentId":"1347"},{"id":"1357","name":"商河县","code":"370126","parentId":"1347"}]},{"id":"1358","name":"青岛市","code":"370200","parentId":"1346","children":[{"id":"1359","name":"市南区","code":"370202","parentId":"1358"},{"id":"1360","name":"市北区","code":"370203","parentId":"1358"},{"id":"1361","name":"黄岛区","code":"370211","parentId":"1358"},{"id":"1362","name":"崂山区","code":"370212","parentId":"1358"},{"id":"1363","name":"李沧区","code":"370213","parentId":"1358"},{"id":"1364","name":"城阳区","code":"370214","parentId":"1358"},{"id":"1365","name":"即墨区","code":"370215","parentId":"1358"},{"id":"1366","name":"胶州市","code":"370281","parentId":"1358"},{"id":"1367","name":"平度市","code":"370283","parentId":"1358"},{"id":"1368","name":"莱西市","code":"370285","parentId":"1358"}]},{"id":"1369","name":"淄博市","code":"370300","parentId":"1346","children":[{"id":"1370","name":"淄川区","code":"370302","parentId":"1369"},{"id":"1371","name":"张店区","code":"370303","parentId":"1369"},{"id":"1372","name":"博山区","code":"370304","parentId":"1369"},{"id":"1373","name":"临淄区","code":"370305","parentId":"1369"},{"id":"1374","name":"周村区","code":"370306","parentId":"1369"},{"id":"1375","name":"桓台县","code":"370321","parentId":"1369"},{"id":"1376","name":"高青县","code":"370322","parentId":"1369"},{"id":"1377","name":"沂源县","code":"370323","parentId":"1369"}]},{"id":"1378","name":"枣庄市","code":"370400","parentId":"1346","children":[{"id":"1379","name":"市中区","code":"370402","parentId":"1378"},{"id":"1380","name":"薛城区","code":"370403","parentId":"1378"},{"id":"1381","name":"峄城区","code":"370404","parentId":"1378"},{"id":"1382","name":"台儿庄区","code":"370405","parentId":"1378"},{"id":"1383","name":"山亭区","code":"370406","parentId":"1378"},{"id":"1384","name":"滕州市","code":"370481","parentId":"1378"}]},{"id":"1385","name":"东营市","code":"370500","parentId":"1346","children":[{"id":"1386","name":"东营区","code":"370502","parentId":"1385"},{"id":"1387","name":"河口区","code":"370503","parentId":"1385"},{"id":"1388","name":"垦利区","code":"370505","parentId":"1385"},{"id":"1389","name":"利津县","code":"370522","parentId":"1385"},{"id":"1390","name":"广饶县","code":"370523","parentId":"1385"}]},{"id":"1391","name":"烟台市","code":"370600","parentId":"1346","children":[{"id":"1392","name":"芝罘区","code":"370602","parentId":"1391"},{"id":"1393","name":"福山区","code":"370611","parentId":"1391"},{"id":"1394","name":"牟平区","code":"370612","parentId":"1391"},{"id":"1395","name":"莱山区","code":"370613","parentId":"1391"},{"id":"1396","name":"长岛县","code":"370634","parentId":"1391"},{"id":"1397","name":"龙口市","code":"370681","parentId":"1391"},{"id":"1398","name":"莱阳市","code":"370682","parentId":"1391"},{"id":"1399","name":"莱州市","code":"370683","parentId":"1391"},{"id":"1400","name":"蓬莱市","code":"370684","parentId":"1391"},{"id":"1401","name":"招远市","code":"370685","parentId":"1391"},{"id":"1402","name":"栖霞市","code":"370686","parentId":"1391"},{"id":"1403","name":"海阳市","code":"370687","parentId":"1391"}]},{"id":"1404","name":"潍坊市","code":"370700","parentId":"1346","children":[{"id":"1405","name":"潍城区","code":"370702","parentId":"1404"},{"id":"1406","name":"寒亭区","code":"370703","parentId":"1404"},{"id":"1407","name":"坊子区","code":"370704","parentId":"1404"},{"id":"1408","name":"奎文区","code":"370705","parentId":"1404"},{"id":"1409","name":"临朐县","code":"370724","parentId":"1404"},{"id":"1410","name":"昌乐县","code":"370725","parentId":"1404"},{"id":"1411","name":"青州市","code":"370781","parentId":"1404"},{"id":"1412","name":"诸城市","code":"370782","parentId":"1404"},{"id":"1413","name":"寿光市","code":"370783","parentId":"1404"},{"id":"1414","name":"安丘市","code":"370784","parentId":"1404"},{"id":"1415","name":"高密市","code":"370785","parentId":"1404"},{"id":"1416","name":"昌邑市","code":"370786","parentId":"1404"}]},{"id":"1417","name":"济宁市","code":"370800","parentId":"1346","children":[{"id":"1418","name":"任城区","code":"370811","parentId":"1417"},{"id":"1419","name":"兖州区","code":"370812","parentId":"1417"},{"id":"1420","name":"微山县","code":"370826","parentId":"1417"},{"id":"1421","name":"鱼台县","code":"370827","parentId":"1417"},{"id":"1422","name":"金乡县","code":"370828","parentId":"1417"},{"id":"1423","name":"嘉祥县","code":"370829","parentId":"1417"},{"id":"1424","name":"汶上县","code":"370830","parentId":"1417"},{"id":"1425","name":"泗水县","code":"370831","parentId":"1417"},{"id":"1426","name":"梁山县","code":"370832","parentId":"1417"},{"id":"1427","name":"曲阜市","code":"370881","parentId":"1417"},{"id":"1428","name":"邹城市","code":"370883","parentId":"1417"}]},{"id":"1429","name":"泰安市","code":"370900","parentId":"1346","children":[{"id":"1430","name":"泰山区","code":"370902","parentId":"1429"},{"id":"1431","name":"岱岳区","code":"370911","parentId":"1429"},{"id":"1432","name":"宁阳县","code":"370921","parentId":"1429"},{"id":"1433","name":"东平县","code":"370923","parentId":"1429"},{"id":"1434","name":"新泰市","code":"370982","parentId":"1429"},{"id":"1435","name":"肥城市","code":"370983","parentId":"1429"}]},{"id":"1436","name":"威海市","code":"371000","parentId":"1346","children":[{"id":"1437","name":"环翠区","code":"371002","parentId":"1436"},{"id":"1438","name":"文登区","code":"371003","parentId":"1436"},{"id":"1439","name":"荣成市","code":"371082","parentId":"1436"},{"id":"1440","name":"乳山市","code":"371083","parentId":"1436"}]},{"id":"1441","name":"日照市","code":"371100","parentId":"1346","children":[{"id":"1442","name":"东港区","code":"371102","parentId":"1441"},{"id":"1443","name":"岚山区","code":"371103","parentId":"1441"},{"id":"1444","name":"五莲县","code":"371121","parentId":"1441"},{"id":"1445","name":"莒县","code":"371122","parentId":"1441"}]},{"id":"1446","name":"莱芜市","code":"371200","parentId":"1346","children":[{"id":"1447","name":"莱城区","code":"371202","parentId":"1446"},{"id":"1448","name":"钢城区","code":"371203","parentId":"1446"}]},{"id":"1449","name":"临沂市","code":"371300","parentId":"1346","children":[{"id":"1450","name":"兰山区","code":"371302","parentId":"1449"},{"id":"1451","name":"罗庄区","code":"371311","parentId":"1449"},{"id":"1452","name":"河东区","code":"371312","parentId":"1449"},{"id":"1453","name":"沂南县","code":"371321","parentId":"1449"},{"id":"1454","name":"郯城县","code":"371322","parentId":"1449"},{"id":"1455","name":"沂水县","code":"371323","parentId":"1449"},{"id":"1456","name":"兰陵县","code":"371324","parentId":"1449"},{"id":"1457","name":"费县","code":"371325","parentId":"1449"},{"id":"1458","name":"平邑县","code":"371326","parentId":"1449"},{"id":"1459","name":"莒南县","code":"371327","parentId":"1449"},{"id":"1460","name":"蒙阴县","code":"371328","parentId":"1449"},{"id":"1461","name":"临沭县","code":"371329","parentId":"1449"}]},{"id":"1462","name":"德州市","code":"371400","parentId":"1346","children":[{"id":"1463","name":"德城区","code":"371402","parentId":"1462"},{"id":"1464","name":"陵城区","code":"371403","parentId":"1462"},{"id":"1465","name":"宁津县","code":"371422","parentId":"1462"},{"id":"1466","name":"庆云县","code":"371423","parentId":"1462"},{"id":"1467","name":"临邑县","code":"371424","parentId":"1462"},{"id":"1468","name":"齐河县","code":"371425","parentId":"1462"},{"id":"1469","name":"平原县","code":"371426","parentId":"1462"},{"id":"1470","name":"夏津县","code":"371427","parentId":"1462"},{"id":"1471","name":"武城县","code":"371428","parentId":"1462"},{"id":"1472","name":"乐陵市","code":"371481","parentId":"1462"},{"id":"1473","name":"禹城市","code":"371482","parentId":"1462"}]},{"id":"1474","name":"聊城市","code":"371500","parentId":"1346","children":[{"id":"1475","name":"东昌府区","code":"371502","parentId":"1474"},{"id":"1476","name":"阳谷县","code":"371521","parentId":"1474"},{"id":"1477","name":"莘县","code":"371522","parentId":"1474"},{"id":"1478","name":"茌平县","code":"371523","parentId":"1474"},{"id":"1479","name":"东阿县","code":"371524","parentId":"1474"},{"id":"1480","name":"冠县","code":"371525","parentId":"1474"},{"id":"1481","name":"高唐县","code":"371526","parentId":"1474"},{"id":"1482","name":"临清市","code":"371581","parentId":"1474"}]},{"id":"1483","name":"滨州市","code":"371600","parentId":"1346","children":[{"id":"1484","name":"滨城区","code":"371602","parentId":"1483"},{"id":"1485","name":"沾化区","code":"371603","parentId":"1483"},{"id":"1486","name":"惠民县","code":"371621","parentId":"1483"},{"id":"1487","name":"阳信县","code":"371622","parentId":"1483"},{"id":"1488","name":"无棣县","code":"371623","parentId":"1483"},{"id":"1489","name":"博兴县","code":"371625","parentId":"1483"},{"id":"1490","name":"邹平县","code":"371626","parentId":"1483"}]},{"id":"1491","name":"菏泽市","code":"371700","parentId":"1346","children":[{"id":"1492","name":"牡丹区","code":"371702","parentId":"1491"},{"id":"1493","name":"定陶区","code":"371703","parentId":"1491"},{"id":"1494","name":"曹县","code":"371721","parentId":"1491"},{"id":"1495","name":"单县","code":"371722","parentId":"1491"},{"id":"1496","name":"成武县","code":"371723","parentId":"1491"},{"id":"1497","name":"巨野县","code":"371724","parentId":"1491"},{"id":"1498","name":"郓城县","code":"371725","parentId":"1491"},{"id":"1499","name":"鄄城县","code":"371726","parentId":"1491"},{"id":"1500","name":"东明县","code":"371728","parentId":"1491"}]}]},{"id":"1501","name":"河南省","code":"410000","parentId":"0","children":[{"id":"1502","name":"郑州市","code":"410100","parentId":"1501","children":[{"id":"1503","name":"中原区","code":"410102","parentId":"1502"},{"id":"1504","name":"二七区","code":"410103","parentId":"1502"},{"id":"1505","name":"管城回族区","code":"410104","parentId":"1502"},{"id":"1506","name":"金水区","code":"410105","parentId":"1502"},{"id":"1507","name":"上街区","code":"410106","parentId":"1502"},{"id":"1508","name":"惠济区","code":"410108","parentId":"1502"},{"id":"1509","name":"中牟县","code":"410122","parentId":"1502"},{"id":"1510","name":"巩义市","code":"410181","parentId":"1502"},{"id":"1511","name":"荥阳市","code":"410182","parentId":"1502"},{"id":"1512","name":"新密市","code":"410183","parentId":"1502"},{"id":"1513","name":"新郑市","code":"410184","parentId":"1502"},{"id":"1514","name":"登封市","code":"410185","parentId":"1502"}]},{"id":"1515","name":"开封市","code":"410200","parentId":"1501","children":[{"id":"1516","name":"龙亭区","code":"410202","parentId":"1515"},{"id":"1517","name":"顺河回族区","code":"410203","parentId":"1515"},{"id":"1518","name":"鼓楼区","code":"410204","parentId":"1515"},{"id":"1519","name":"禹王台区","code":"410205","parentId":"1515"},{"id":"1520","name":"祥符区","code":"410212","parentId":"1515"},{"id":"1521","name":"杞县","code":"410221","parentId":"1515"},{"id":"1522","name":"通许县","code":"410222","parentId":"1515"},{"id":"1523","name":"尉氏县","code":"410223","parentId":"1515"},{"id":"1524","name":"兰考县","code":"410225","parentId":"1515"}]},{"id":"1525","name":"洛阳市","code":"410300","parentId":"1501","children":[{"id":"1526","name":"老城区","code":"410302","parentId":"1525"},{"id":"1527","name":"西工区","code":"410303","parentId":"1525"},{"id":"1528","name":"瀍河回族区","code":"410304","parentId":"1525"},{"id":"1529","name":"涧西区","code":"410305","parentId":"1525"},{"id":"1530","name":"吉利区","code":"410306","parentId":"1525"},{"id":"1531","name":"洛龙区","code":"410311","parentId":"1525"},{"id":"1532","name":"孟津县","code":"410322","parentId":"1525"},{"id":"1533","name":"新安县","code":"410323","parentId":"1525"},{"id":"1534","name":"栾川县","code":"410324","parentId":"1525"},{"id":"1535","name":"嵩县","code":"410325","parentId":"1525"},{"id":"1536","name":"汝阳县","code":"410326","parentId":"1525"},{"id":"1537","name":"宜阳县","code":"410327","parentId":"1525"},{"id":"1538","name":"洛宁县","code":"410328","parentId":"1525"},{"id":"1539","name":"伊川县","code":"410329","parentId":"1525"},{"id":"1540","name":"偃师市","code":"410381","parentId":"1525"}]},{"id":"1541","name":"平顶山市","code":"410400","parentId":"1501","children":[{"id":"1542","name":"新华区","code":"410402","parentId":"1541"},{"id":"1543","name":"卫东区","code":"410403","parentId":"1541"},{"id":"1544","name":"石龙区","code":"410404","parentId":"1541"},{"id":"1545","name":"湛河区","code":"410411","parentId":"1541"},{"id":"1546","name":"宝丰县","code":"410421","parentId":"1541"},{"id":"1547","name":"叶县","code":"410422","parentId":"1541"},{"id":"1548","name":"鲁山县","code":"410423","parentId":"1541"},{"id":"1549","name":"郏县","code":"410425","parentId":"1541"},{"id":"1550","name":"舞钢市","code":"410481","parentId":"1541"},{"id":"1551","name":"汝州市","code":"410482","parentId":"1541"}]},{"id":"1552","name":"安阳市","code":"410500","parentId":"1501","children":[{"id":"1553","name":"文峰区","code":"410502","parentId":"1552"},{"id":"1554","name":"北关区","code":"410503","parentId":"1552"},{"id":"1555","name":"殷都区","code":"410505","parentId":"1552"},{"id":"1556","name":"龙安区","code":"410506","parentId":"1552"},{"id":"1557","name":"安阳县","code":"410522","parentId":"1552"},{"id":"1558","name":"汤阴县","code":"410523","parentId":"1552"},{"id":"1559","name":"滑县","code":"410526","parentId":"1552"},{"id":"1560","name":"内黄县","code":"410527","parentId":"1552"},{"id":"1561","name":"林州市","code":"410581","parentId":"1552"}]},{"id":"1562","name":"鹤壁市","code":"410600","parentId":"1501","children":[{"id":"1563","name":"鹤山区","code":"410602","parentId":"1562"},{"id":"1564","name":"山城区","code":"410603","parentId":"1562"},{"id":"1565","name":"淇滨区","code":"410611","parentId":"1562"},{"id":"1566","name":"浚县","code":"410621","parentId":"1562"},{"id":"1567","name":"淇县","code":"410622","parentId":"1562"}]},{"id":"1568","name":"新乡市","code":"410700","parentId":"1501","children":[{"id":"1569","name":"红旗区","code":"410702","parentId":"1568"},{"id":"1570","name":"卫滨区","code":"410703","parentId":"1568"},{"id":"1571","name":"凤泉区","code":"410704","parentId":"1568"},{"id":"1572","name":"牧野区","code":"410711","parentId":"1568"},{"id":"1573","name":"新乡县","code":"410721","parentId":"1568"},{"id":"1574","name":"获嘉县","code":"410724","parentId":"1568"},{"id":"1575","name":"原阳县","code":"410725","parentId":"1568"},{"id":"1576","name":"延津县","code":"410726","parentId":"1568"},{"id":"1577","name":"封丘县","code":"410727","parentId":"1568"},{"id":"1578","name":"长垣县","code":"410728","parentId":"1568"},{"id":"1579","name":"卫辉市","code":"410781","parentId":"1568"},{"id":"1580","name":"辉县市","code":"410782","parentId":"1568"}]},{"id":"1581","name":"焦作市","code":"410800","parentId":"1501","children":[{"id":"1582","name":"解放区","code":"410802","parentId":"1581"},{"id":"1583","name":"中站区","code":"410803","parentId":"1581"},{"id":"1584","name":"马村区","code":"410804","parentId":"1581"},{"id":"1585","name":"山阳区","code":"410811","parentId":"1581"},{"id":"1586","name":"修武县","code":"410821","parentId":"1581"},{"id":"1587","name":"博爱县","code":"410822","parentId":"1581"},{"id":"1588","name":"武陟县","code":"410823","parentId":"1581"},{"id":"1589","name":"温县","code":"410825","parentId":"1581"},{"id":"1590","name":"沁阳市","code":"410882","parentId":"1581"},{"id":"1591","name":"孟州市","code":"410883","parentId":"1581"}]},{"id":"1592","name":"濮阳市","code":"410900","parentId":"1501","children":[{"id":"1593","name":"华龙区","code":"410902","parentId":"1592"},{"id":"1594","name":"清丰县","code":"410922","parentId":"1592"},{"id":"1595","name":"南乐县","code":"410923","parentId":"1592"},{"id":"1596","name":"范县","code":"410926","parentId":"1592"},{"id":"1597","name":"台前县","code":"410927","parentId":"1592"},{"id":"1598","name":"濮阳县","code":"410928","parentId":"1592"}]},{"id":"1599","name":"许昌市","code":"411000","parentId":"1501","children":[{"id":"1600","name":"魏都区","code":"411002","parentId":"1599"},{"id":"1601","name":"建安区","code":"411003","parentId":"1599"},{"id":"1602","name":"鄢陵县","code":"411024","parentId":"1599"},{"id":"1603","name":"襄城县","code":"411025","parentId":"1599"},{"id":"1604","name":"禹州市","code":"411081","parentId":"1599"},{"id":"1605","name":"长葛市","code":"411082","parentId":"1599"}]},{"id":"1606","name":"漯河市","code":"411100","parentId":"1501","children":[{"id":"1607","name":"源汇区","code":"411102","parentId":"1606"},{"id":"1608","name":"郾城区","code":"411103","parentId":"1606"},{"id":"1609","name":"召陵区","code":"411104","parentId":"1606"},{"id":"1610","name":"舞阳县","code":"411121","parentId":"1606"},{"id":"1611","name":"临颍县","code":"411122","parentId":"1606"}]},{"id":"1612","name":"三门峡市","code":"411200","parentId":"1501","children":[{"id":"1613","name":"湖滨区","code":"411202","parentId":"1612"},{"id":"1614","name":"陕州区","code":"411203","parentId":"1612"},{"id":"1615","name":"渑池县","code":"411221","parentId":"1612"},{"id":"1616","name":"卢氏县","code":"411224","parentId":"1612"},{"id":"1617","name":"义马市","code":"411281","parentId":"1612"},{"id":"1618","name":"灵宝市","code":"411282","parentId":"1612"}]},{"id":"1619","name":"南阳市","code":"411300","parentId":"1501","children":[{"id":"1620","name":"宛城区","code":"411302","parentId":"1619"},{"id":"1621","name":"卧龙区","code":"411303","parentId":"1619"},{"id":"1622","name":"南召县","code":"411321","parentId":"1619"},{"id":"1623","name":"方城县","code":"411322","parentId":"1619"},{"id":"1624","name":"西峡县","code":"411323","parentId":"1619"},{"id":"1625","name":"镇平县","code":"411324","parentId":"1619"},{"id":"1626","name":"内乡县","code":"411325","parentId":"1619"},{"id":"1627","name":"淅川县","code":"411326","parentId":"1619"},{"id":"1628","name":"社旗县","code":"411327","parentId":"1619"},{"id":"1629","name":"唐河县","code":"411328","parentId":"1619"},{"id":"1630","name":"新野县","code":"411329","parentId":"1619"},{"id":"1631","name":"桐柏县","code":"411330","parentId":"1619"},{"id":"1632","name":"邓州市","code":"411381","parentId":"1619"}]},{"id":"1633","name":"商丘市","code":"411400","parentId":"1501","children":[{"id":"1634","name":"梁园区","code":"411402","parentId":"1633"},{"id":"1635","name":"睢阳区","code":"411403","parentId":"1633"},{"id":"1636","name":"民权县","code":"411421","parentId":"1633"},{"id":"1637","name":"睢县","code":"411422","parentId":"1633"},{"id":"1638","name":"宁陵县","code":"411423","parentId":"1633"},{"id":"1639","name":"柘城县","code":"411424","parentId":"1633"},{"id":"1640","name":"虞城县","code":"411425","parentId":"1633"},{"id":"1641","name":"夏邑县","code":"411426","parentId":"1633"},{"id":"1642","name":"永城市","code":"411481","parentId":"1633"}]},{"id":"1643","name":"信阳市","code":"411500","parentId":"1501","children":[{"id":"1644","name":"浉河区","code":"411502","parentId":"1643"},{"id":"1645","name":"平桥区","code":"411503","parentId":"1643"},{"id":"1646","name":"罗山县","code":"411521","parentId":"1643"},{"id":"1647","name":"光山县","code":"411522","parentId":"1643"},{"id":"1648","name":"新县","code":"411523","parentId":"1643"},{"id":"1649","name":"商城县","code":"411524","parentId":"1643"},{"id":"1650","name":"固始县","code":"411525","parentId":"1643"},{"id":"1651","name":"潢川县","code":"411526","parentId":"1643"},{"id":"1652","name":"淮滨县","code":"411527","parentId":"1643"},{"id":"1653","name":"息县","code":"411528","parentId":"1643"}]},{"id":"1654","name":"周口市","code":"411600","parentId":"1501","children":[{"id":"1655","name":"川汇区","code":"411602","parentId":"1654"},{"id":"1656","name":"扶沟县","code":"411621","parentId":"1654"},{"id":"1657","name":"西华县","code":"411622","parentId":"1654"},{"id":"1658","name":"商水县","code":"411623","parentId":"1654"},{"id":"1659","name":"沈丘县","code":"411624","parentId":"1654"},{"id":"1660","name":"郸城县","code":"411625","parentId":"1654"},{"id":"1661","name":"淮阳县","code":"411626","parentId":"1654"},{"id":"1662","name":"太康县","code":"411627","parentId":"1654"},{"id":"1663","name":"鹿邑县","code":"411628","parentId":"1654"},{"id":"1664","name":"项城市","code":"411681","parentId":"1654"}]},{"id":"1665","name":"驻马店市","code":"411700","parentId":"1501","children":[{"id":"1666","name":"驿城区","code":"411702","parentId":"1665"},{"id":"1667","name":"西平县","code":"411721","parentId":"1665"},{"id":"1668","name":"上蔡县","code":"411722","parentId":"1665"},{"id":"1669","name":"平舆县","code":"411723","parentId":"1665"},{"id":"1670","name":"正阳县","code":"411724","parentId":"1665"},{"id":"1671","name":"确山县","code":"411725","parentId":"1665"},{"id":"1672","name":"泌阳县","code":"411726","parentId":"1665"},{"id":"1673","name":"汝南县","code":"411727","parentId":"1665"},{"id":"1674","name":"遂平县","code":"411728","parentId":"1665"},{"id":"1675","name":"新蔡县","code":"411729","parentId":"1665"}]},{"id":"1676","name":"济源市","code":"419001","parentId":"1501","children":[{"id":"3465","name":"辖区","code":"-1","parentId":"1676"}]}]},{"id":"1677","name":"湖北省","code":"420000","parentId":"0","children":[{"id":"1678","name":"武汉市","code":"420100","parentId":"1677","children":[{"id":"1679","name":"江岸区","code":"420102","parentId":"1678"},{"id":"1680","name":"江汉区","code":"420103","parentId":"1678"},{"id":"1681","name":"硚口区","code":"420104","parentId":"1678"},{"id":"1682","name":"汉阳区","code":"420105","parentId":"1678"},{"id":"1683","name":"武昌区","code":"420106","parentId":"1678"},{"id":"1684","name":"青山区","code":"420107","parentId":"1678"},{"id":"1685","name":"洪山区","code":"420111","parentId":"1678"},{"id":"1686","name":"东西湖区","code":"420112","parentId":"1678"},{"id":"1687","name":"汉南区","code":"420113","parentId":"1678"},{"id":"1688","name":"蔡甸区","code":"420114","parentId":"1678"},{"id":"1689","name":"江夏区","code":"420115","parentId":"1678"},{"id":"1690","name":"黄陂区","code":"420116","parentId":"1678"},{"id":"1691","name":"新洲区","code":"420117","parentId":"1678"}]},{"id":"1692","name":"黄石市","code":"420200","parentId":"1677","children":[{"id":"1693","name":"黄石港区","code":"420202","parentId":"1692"},{"id":"1694","name":"西塞山区","code":"420203","parentId":"1692"},{"id":"1695","name":"下陆区","code":"420204","parentId":"1692"},{"id":"1696","name":"铁山区","code":"420205","parentId":"1692"},{"id":"1697","name":"阳新县","code":"420222","parentId":"1692"},{"id":"1698","name":"大冶市","code":"420281","parentId":"1692"}]},{"id":"1699","name":"十堰市","code":"420300","parentId":"1677","children":[{"id":"1700","name":"茅箭区","code":"420302","parentId":"1699"},{"id":"1701","name":"张湾区","code":"420303","parentId":"1699"},{"id":"1702","name":"郧阳区","code":"420304","parentId":"1699"},{"id":"1703","name":"郧西县","code":"420322","parentId":"1699"},{"id":"1704","name":"竹山县","code":"420323","parentId":"1699"},{"id":"1705","name":"竹溪县","code":"420324","parentId":"1699"},{"id":"1706","name":"房县","code":"420325","parentId":"1699"},{"id":"1707","name":"丹江口市","code":"420381","parentId":"1699"}]},{"id":"1708","name":"宜昌市","code":"420500","parentId":"1677","children":[{"id":"1709","name":"西陵区","code":"420502","parentId":"1708"},{"id":"1710","name":"伍家岗区","code":"420503","parentId":"1708"},{"id":"1711","name":"点军区","code":"420504","parentId":"1708"},{"id":"1712","name":"猇亭区","code":"420505","parentId":"1708"},{"id":"1713","name":"夷陵区","code":"420506","parentId":"1708"},{"id":"1714","name":"远安县","code":"420525","parentId":"1708"},{"id":"1715","name":"兴山县","code":"420526","parentId":"1708"},{"id":"1716","name":"秭归县","code":"420527","parentId":"1708"},{"id":"1717","name":"长阳土家族自治县","code":"420528","parentId":"1708"},{"id":"1718","name":"五峰土家族自治县","code":"420529","parentId":"1708"},{"id":"1719","name":"宜都市","code":"420581","parentId":"1708"},{"id":"1720","name":"当阳市","code":"420582","parentId":"1708"},{"id":"1721","name":"枝江市","code":"420583","parentId":"1708"}]},{"id":"1722","name":"襄阳市","code":"420600","parentId":"1677","children":[{"id":"1723","name":"襄城区","code":"420602","parentId":"1722"},{"id":"1724","name":"樊城区","code":"420606","parentId":"1722"},{"id":"1725","name":"襄州区","code":"420607","parentId":"1722"},{"id":"1726","name":"南漳县","code":"420624","parentId":"1722"},{"id":"1727","name":"谷城县","code":"420625","parentId":"1722"},{"id":"1728","name":"保康县","code":"420626","parentId":"1722"},{"id":"1729","name":"老河口市","code":"420682","parentId":"1722"},{"id":"1730","name":"枣阳市","code":"420683","parentId":"1722"},{"id":"1731","name":"宜城市","code":"420684","parentId":"1722"}]},{"id":"1732","name":"鄂州市","code":"420700","parentId":"1677","children":[{"id":"1733","name":"梁子湖区","code":"420702","parentId":"1732"},{"id":"1734","name":"华容区","code":"420703","parentId":"1732"},{"id":"1735","name":"鄂城区","code":"420704","parentId":"1732"}]},{"id":"1736","name":"荆门市","code":"420800","parentId":"1677","children":[{"id":"1737","name":"东宝区","code":"420802","parentId":"1736"},{"id":"1738","name":"掇刀区","code":"420804","parentId":"1736"},{"id":"1739","name":"京山县","code":"420821","parentId":"1736"},{"id":"1740","name":"沙洋县","code":"420822","parentId":"1736"},{"id":"1741","name":"钟祥市","code":"420881","parentId":"1736"}]},{"id":"1742","name":"孝感市","code":"420900","parentId":"1677","children":[{"id":"1743","name":"孝南区","code":"420902","parentId":"1742"},{"id":"1744","name":"孝昌县","code":"420921","parentId":"1742"},{"id":"1745","name":"大悟县","code":"420922","parentId":"1742"},{"id":"1746","name":"云梦县","code":"420923","parentId":"1742"},{"id":"1747","name":"应城市","code":"420981","parentId":"1742"},{"id":"1748","name":"安陆市","code":"420982","parentId":"1742"},{"id":"1749","name":"汉川市","code":"420984","parentId":"1742"}]},{"id":"1750","name":"荆州市","code":"421000","parentId":"1677","children":[{"id":"1751","name":"沙市区","code":"421002","parentId":"1750"},{"id":"1752","name":"荆州区","code":"421003","parentId":"1750"},{"id":"1753","name":"公安县","code":"421022","parentId":"1750"},{"id":"1754","name":"监利县","code":"421023","parentId":"1750"},{"id":"1755","name":"江陵县","code":"421024","parentId":"1750"},{"id":"1756","name":"石首市","code":"421081","parentId":"1750"},{"id":"1757","name":"洪湖市","code":"421083","parentId":"1750"},{"id":"1758","name":"松滋市","code":"421087","parentId":"1750"}]},{"id":"1759","name":"黄冈市","code":"421100","parentId":"1677","children":[{"id":"1760","name":"黄州区","code":"421102","parentId":"1759"},{"id":"1761","name":"团风县","code":"421121","parentId":"1759"},{"id":"1762","name":"红安县","code":"421122","parentId":"1759"},{"id":"1763","name":"罗田县","code":"421123","parentId":"1759"},{"id":"1764","name":"英山县","code":"421124","parentId":"1759"},{"id":"1765","name":"浠水县","code":"421125","parentId":"1759"},{"id":"1766","name":"蕲春县","code":"421126","parentId":"1759"},{"id":"1767","name":"黄梅县","code":"421127","parentId":"1759"},{"id":"1768","name":"麻城市","code":"421181","parentId":"1759"},{"id":"1769","name":"武穴市","code":"421182","parentId":"1759"}]},{"id":"1770","name":"咸宁市","code":"421200","parentId":"1677","children":[{"id":"1771","name":"咸安区","code":"421202","parentId":"1770"},{"id":"1772","name":"嘉鱼县","code":"421221","parentId":"1770"},{"id":"1773","name":"通城县","code":"421222","parentId":"1770"},{"id":"1774","name":"崇阳县","code":"421223","parentId":"1770"},{"id":"1775","name":"通山县","code":"421224","parentId":"1770"},{"id":"1776","name":"赤壁市","code":"421281","parentId":"1770"}]},{"id":"1777","name":"随州市","code":"421300","parentId":"1677","children":[{"id":"1778","name":"曾都区","code":"421303","parentId":"1777"},{"id":"1779","name":"随县","code":"421321","parentId":"1777"},{"id":"1780","name":"广水市","code":"421381","parentId":"1777"}]},{"id":"1781","name":"恩施土家族苗族自治州","code":"422800","parentId":"1677","children":[{"id":"1782","name":"恩施市","code":"422801","parentId":"1781"},{"id":"1783","name":"利川市","code":"422802","parentId":"1781"},{"id":"1784","name":"建始县","code":"422822","parentId":"1781"},{"id":"1785","name":"巴东县","code":"422823","parentId":"1781"},{"id":"1786","name":"宣恩县","code":"422825","parentId":"1781"},{"id":"1787","name":"咸丰县","code":"422826","parentId":"1781"},{"id":"1788","name":"来凤县","code":"422827","parentId":"1781"},{"id":"1789","name":"鹤峰县","code":"422828","parentId":"1781"}]},{"id":"1790","name":"仙桃市","code":"429004","parentId":"1677","children":[{"id":"3466","name":"辖区","code":"-1","parentId":"1790"}]},{"id":"1791","name":"潜江市","code":"429005","parentId":"1677","children":[{"id":"3467","name":"辖区","code":"-1","parentId":"1791"}]},{"id":"1792","name":"天门市","code":"429006","parentId":"1677","children":[{"id":"3468","name":"辖区","code":"-1","parentId":"1792"}]},{"id":"1793","name":"神农架林区","code":"429021","parentId":"1677","children":[{"id":"3469","name":"辖区","code":"-1","parentId":"1793"}]}]},{"id":"1794","name":"湖南省","code":"430000","parentId":"0","children":[{"id":"1795","name":"长沙市","code":"430100","parentId":"1794","children":[{"id":"1796","name":"芙蓉区","code":"430102","parentId":"1795"},{"id":"1797","name":"天心区","code":"430103","parentId":"1795"},{"id":"1798","name":"岳麓区","code":"430104","parentId":"1795"},{"id":"1799","name":"开福区","code":"430105","parentId":"1795"},{"id":"1800","name":"雨花区","code":"430111","parentId":"1795"},{"id":"1801","name":"望城区","code":"430112","parentId":"1795"},{"id":"1802","name":"长沙县","code":"430121","parentId":"1795"},{"id":"1803","name":"浏阳市","code":"430181","parentId":"1795"},{"id":"1804","name":"宁乡市","code":"430182","parentId":"1795"}]},{"id":"1805","name":"株洲市","code":"430200","parentId":"1794","children":[{"id":"1806","name":"荷塘区","code":"430202","parentId":"1805"},{"id":"1807","name":"芦淞区","code":"430203","parentId":"1805"},{"id":"1808","name":"石峰区","code":"430204","parentId":"1805"},{"id":"1809","name":"天元区","code":"430211","parentId":"1805"},{"id":"1810","name":"株洲县","code":"430221","parentId":"1805"},{"id":"1811","name":"攸县","code":"430223","parentId":"1805"},{"id":"1812","name":"茶陵县","code":"430224","parentId":"1805"},{"id":"1813","name":"炎陵县","code":"430225","parentId":"1805"},{"id":"1814","name":"醴陵市","code":"430281","parentId":"1805"}]},{"id":"1815","name":"湘潭市","code":"430300","parentId":"1794","children":[{"id":"1816","name":"雨湖区","code":"430302","parentId":"1815"},{"id":"1817","name":"岳塘区","code":"430304","parentId":"1815"},{"id":"1818","name":"湘潭县","code":"430321","parentId":"1815"},{"id":"1819","name":"湘乡市","code":"430381","parentId":"1815"},{"id":"1820","name":"韶山市","code":"430382","parentId":"1815"}]},{"id":"1821","name":"衡阳市","code":"430400","parentId":"1794","children":[{"id":"1822","name":"珠晖区","code":"430405","parentId":"1821"},{"id":"1823","name":"雁峰区","code":"430406","parentId":"1821"},{"id":"1824","name":"石鼓区","code":"430407","parentId":"1821"},{"id":"1825","name":"蒸湘区","code":"430408","parentId":"1821"},{"id":"1826","name":"南岳区","code":"430412","parentId":"1821"},{"id":"1827","name":"衡阳县","code":"430421","parentId":"1821"},{"id":"1828","name":"衡南县","code":"430422","parentId":"1821"},{"id":"1829","name":"衡山县","code":"430423","parentId":"1821"},{"id":"1830","name":"衡东县","code":"430424","parentId":"1821"},{"id":"1831","name":"祁东县","code":"430426","parentId":"1821"},{"id":"1832","name":"耒阳市","code":"430481","parentId":"1821"},{"id":"1833","name":"常宁市","code":"430482","parentId":"1821"}]},{"id":"1834","name":"邵阳市","code":"430500","parentId":"1794","children":[{"id":"1835","name":"双清区","code":"430502","parentId":"1834"},{"id":"1836","name":"大祥区","code":"430503","parentId":"1834"},{"id":"1837","name":"北塔区","code":"430511","parentId":"1834"},{"id":"1838","name":"邵东县","code":"430521","parentId":"1834"},{"id":"1839","name":"新邵县","code":"430522","parentId":"1834"},{"id":"1840","name":"邵阳县","code":"430523","parentId":"1834"},{"id":"1841","name":"隆回县","code":"430524","parentId":"1834"},{"id":"1842","name":"洞口县","code":"430525","parentId":"1834"},{"id":"1843","name":"绥宁县","code":"430527","parentId":"1834"},{"id":"1844","name":"新宁县","code":"430528","parentId":"1834"},{"id":"1845","name":"城步苗族自治县","code":"430529","parentId":"1834"},{"id":"1846","name":"武冈市","code":"430581","parentId":"1834"}]},{"id":"1847","name":"岳阳市","code":"430600","parentId":"1794","children":[{"id":"1848","name":"岳阳楼区","code":"430602","parentId":"1847"},{"id":"1849","name":"云溪区","code":"430603","parentId":"1847"},{"id":"1850","name":"君山区","code":"430611","parentId":"1847"},{"id":"1851","name":"岳阳县","code":"430621","parentId":"1847"},{"id":"1852","name":"华容县","code":"430623","parentId":"1847"},{"id":"1853","name":"湘阴县","code":"430624","parentId":"1847"},{"id":"1854","name":"平江县","code":"430626","parentId":"1847"},{"id":"1855","name":"汨罗市","code":"430681","parentId":"1847"},{"id":"1856","name":"临湘市","code":"430682","parentId":"1847"}]},{"id":"1857","name":"常德市","code":"430700","parentId":"1794","children":[{"id":"1858","name":"武陵区","code":"430702","parentId":"1857"},{"id":"1859","name":"鼎城区","code":"430703","parentId":"1857"},{"id":"1860","name":"安乡县","code":"430721","parentId":"1857"},{"id":"1861","name":"汉寿县","code":"430722","parentId":"1857"},{"id":"1862","name":"澧县","code":"430723","parentId":"1857"},{"id":"1863","name":"临澧县","code":"430724","parentId":"1857"},{"id":"1864","name":"桃源县","code":"430725","parentId":"1857"},{"id":"1865","name":"石门县","code":"430726","parentId":"1857"},{"id":"1866","name":"津市市","code":"430781","parentId":"1857"}]},{"id":"1867","name":"张家界市","code":"430800","parentId":"1794","children":[{"id":"1868","name":"永定区","code":"430802","parentId":"1867"},{"id":"1869","name":"武陵源区","code":"430811","parentId":"1867"},{"id":"1870","name":"慈利县","code":"430821","parentId":"1867"},{"id":"1871","name":"桑植县","code":"430822","parentId":"1867"}]},{"id":"1872","name":"益阳市","code":"430900","parentId":"1794","children":[{"id":"1873","name":"资阳区","code":"430902","parentId":"1872"},{"id":"1874","name":"赫山区","code":"430903","parentId":"1872"},{"id":"1875","name":"南县","code":"430921","parentId":"1872"},{"id":"1876","name":"桃江县","code":"430922","parentId":"1872"},{"id":"1877","name":"安化县","code":"430923","parentId":"1872"},{"id":"1878","name":"沅江市","code":"430981","parentId":"1872"}]},{"id":"1879","name":"郴州市","code":"431000","parentId":"1794","children":[{"id":"1880","name":"北湖区","code":"431002","parentId":"1879"},{"id":"1881","name":"苏仙区","code":"431003","parentId":"1879"},{"id":"1882","name":"桂阳县","code":"431021","parentId":"1879"},{"id":"1883","name":"宜章县","code":"431022","parentId":"1879"},{"id":"1884","name":"永兴县","code":"431023","parentId":"1879"},{"id":"1885","name":"嘉禾县","code":"431024","parentId":"1879"},{"id":"1886","name":"临武县","code":"431025","parentId":"1879"},{"id":"1887","name":"汝城县","code":"431026","parentId":"1879"},{"id":"1888","name":"桂东县","code":"431027","parentId":"1879"},{"id":"1889","name":"安仁县","code":"431028","parentId":"1879"},{"id":"1890","name":"资兴市","code":"431081","parentId":"1879"}]},{"id":"1891","name":"永州市","code":"431100","parentId":"1794","children":[{"id":"1892","name":"零陵区","code":"431102","parentId":"1891"},{"id":"1893","name":"冷水滩区","code":"431103","parentId":"1891"},{"id":"1894","name":"祁阳县","code":"431121","parentId":"1891"},{"id":"1895","name":"东安县","code":"431122","parentId":"1891"},{"id":"1896","name":"双牌县","code":"431123","parentId":"1891"},{"id":"1897","name":"道县","code":"431124","parentId":"1891"},{"id":"1898","name":"江永县","code":"431125","parentId":"1891"},{"id":"1899","name":"宁远县","code":"431126","parentId":"1891"},{"id":"1900","name":"蓝山县","code":"431127","parentId":"1891"},{"id":"1901","name":"新田县","code":"431128","parentId":"1891"},{"id":"1902","name":"江华瑶族自治县","code":"431129","parentId":"1891"}]},{"id":"1903","name":"怀化市","code":"431200","parentId":"1794","children":[{"id":"1904","name":"鹤城区","code":"431202","parentId":"1903"},{"id":"1905","name":"中方县","code":"431221","parentId":"1903"},{"id":"1906","name":"沅陵县","code":"431222","parentId":"1903"},{"id":"1907","name":"辰溪县","code":"431223","parentId":"1903"},{"id":"1908","name":"溆浦县","code":"431224","parentId":"1903"},{"id":"1909","name":"会同县","code":"431225","parentId":"1903"},{"id":"1910","name":"麻阳苗族自治县","code":"431226","parentId":"1903"},{"id":"1911","name":"新晃侗族自治县","code":"431227","parentId":"1903"},{"id":"1912","name":"芷江侗族自治县","code":"431228","parentId":"1903"},{"id":"1913","name":"靖州苗族侗族自治县","code":"431229","parentId":"1903"},{"id":"1914","name":"通道侗族自治县","code":"431230","parentId":"1903"},{"id":"1915","name":"洪江市","code":"431281","parentId":"1903"}]},{"id":"1916","name":"娄底市","code":"431300","parentId":"1794","children":[{"id":"1917","name":"娄星区","code":"431302","parentId":"1916"},{"id":"1918","name":"双峰县","code":"431321","parentId":"1916"},{"id":"1919","name":"新化县","code":"431322","parentId":"1916"},{"id":"1920","name":"冷水江市","code":"431381","parentId":"1916"},{"id":"1921","name":"涟源市","code":"431382","parentId":"1916"}]},{"id":"1922","name":"湘西土家族苗族自治州","code":"433100","parentId":"1794","children":[{"id":"1923","name":"吉首市","code":"433101","parentId":"1922"},{"id":"1924","name":"泸溪县","code":"433122","parentId":"1922"},{"id":"1925","name":"凤凰县","code":"433123","parentId":"1922"},{"id":"1926","name":"花垣县","code":"433124","parentId":"1922"},{"id":"1927","name":"保靖县","code":"433125","parentId":"1922"},{"id":"1928","name":"古丈县","code":"433126","parentId":"1922"},{"id":"1929","name":"永顺县","code":"433127","parentId":"1922"},{"id":"1930","name":"龙山县","code":"433130","parentId":"1922"}]}]},{"id":"1931","name":"广东省","code":"440000","parentId":"0","children":[{"id":"1932","name":"广州市","code":"440100","parentId":"1931","children":[{"id":"1933","name":"荔湾区","code":"440103","parentId":"1932"},{"id":"1934","name":"越秀区","code":"440104","parentId":"1932"},{"id":"1935","name":"海珠区","code":"440105","parentId":"1932"},{"id":"1936","name":"天河区","code":"440106","parentId":"1932"},{"id":"1937","name":"白云区","code":"440111","parentId":"1932"},{"id":"1938","name":"黄埔区","code":"440112","parentId":"1932"},{"id":"1939","name":"番禺区","code":"440113","parentId":"1932"},{"id":"1940","name":"花都区","code":"440114","parentId":"1932"},{"id":"1941","name":"南沙区","code":"440115","parentId":"1932"},{"id":"1942","name":"从化区","code":"440117","parentId":"1932"},{"id":"1943","name":"增城区","code":"440118","parentId":"1932"}]},{"id":"1944","name":"韶关市","code":"440200","parentId":"1931","children":[{"id":"1945","name":"武江区","code":"440203","parentId":"1944"},{"id":"1946","name":"浈江区","code":"440204","parentId":"1944"},{"id":"1947","name":"曲江区","code":"440205","parentId":"1944"},{"id":"1948","name":"始兴县","code":"440222","parentId":"1944"},{"id":"1949","name":"仁化县","code":"440224","parentId":"1944"},{"id":"1950","name":"翁源县","code":"440229","parentId":"1944"},{"id":"1951","name":"乳源瑶族自治县","code":"440232","parentId":"1944"},{"id":"1952","name":"新丰县","code":"440233","parentId":"1944"},{"id":"1953","name":"乐昌市","code":"440281","parentId":"1944"},{"id":"1954","name":"南雄市","code":"440282","parentId":"1944"}]},{"id":"1955","name":"深圳市","code":"440300","parentId":"1931","children":[{"id":"1956","name":"罗湖区","code":"440303","parentId":"1955"},{"id":"1957","name":"福田区","code":"440304","parentId":"1955"},{"id":"1958","name":"南山区","code":"440305","parentId":"1955"},{"id":"1959","name":"宝安区","code":"440306","parentId":"1955"},{"id":"1960","name":"龙岗区","code":"440307","parentId":"1955"},{"id":"1961","name":"盐田区","code":"440308","parentId":"1955"},{"id":"1962","name":"龙华区","code":"440309","parentId":"1955"},{"id":"1963","name":"坪山区","code":"440310","parentId":"1955"},{"id":"3489","name":"光明区","code":"440311","parentId":"1955"}]},{"id":"1964","name":"珠海市","code":"440400","parentId":"1931","children":[{"id":"1965","name":"香洲区","code":"440402","parentId":"1964"},{"id":"1966","name":"斗门区","code":"440403","parentId":"1964"},{"id":"1967","name":"金湾区","code":"440404","parentId":"1964"}]},{"id":"1968","name":"汕头市","code":"440500","parentId":"1931","children":[{"id":"1969","name":"龙湖区","code":"440507","parentId":"1968"},{"id":"1970","name":"金平区","code":"440511","parentId":"1968"},{"id":"1971","name":"濠江区","code":"440512","parentId":"1968"},{"id":"1972","name":"潮阳区","code":"440513","parentId":"1968"},{"id":"1973","name":"潮南区","code":"440514","parentId":"1968"},{"id":"1974","name":"澄海区","code":"440515","parentId":"1968"},{"id":"1975","name":"南澳县","code":"440523","parentId":"1968"}]},{"id":"1976","name":"佛山市","code":"440600","parentId":"1931","children":[{"id":"1977","name":"禅城区","code":"440604","parentId":"1976"},{"id":"1978","name":"南海区","code":"440605","parentId":"1976"},{"id":"1979","name":"顺德区","code":"440606","parentId":"1976"},{"id":"1980","name":"三水区","code":"440607","parentId":"1976"},{"id":"1981","name":"高明区","code":"440608","parentId":"1976"}]},{"id":"1982","name":"江门市","code":"440700","parentId":"1931","children":[{"id":"1983","name":"蓬江区","code":"440703","parentId":"1982"},{"id":"1984","name":"江海区","code":"440704","parentId":"1982"},{"id":"1985","name":"新会区","code":"440705","parentId":"1982"},{"id":"1986","name":"台山市","code":"440781","parentId":"1982"},{"id":"1987","name":"开平市","code":"440783","parentId":"1982"},{"id":"1988","name":"鹤山市","code":"440784","parentId":"1982"},{"id":"1989","name":"恩平市","code":"440785","parentId":"1982"}]},{"id":"1990","name":"湛江市","code":"440800","parentId":"1931","children":[{"id":"1991","name":"赤坎区","code":"440802","parentId":"1990"},{"id":"1992","name":"霞山区","code":"440803","parentId":"1990"},{"id":"1993","name":"坡头区","code":"440804","parentId":"1990"},{"id":"1994","name":"麻章区","code":"440811","parentId":"1990"},{"id":"1995","name":"遂溪县","code":"440823","parentId":"1990"},{"id":"1996","name":"徐闻县","code":"440825","parentId":"1990"},{"id":"1997","name":"廉江市","code":"440881","parentId":"1990"},{"id":"1998","name":"雷州市","code":"440882","parentId":"1990"},{"id":"1999","name":"吴川市","code":"440883","parentId":"1990"}]},{"id":"2000","name":"茂名市","code":"440900","parentId":"1931","children":[{"id":"2001","name":"茂南区","code":"440902","parentId":"2000"},{"id":"2002","name":"电白区","code":"440904","parentId":"2000"},{"id":"2003","name":"高州市","code":"440981","parentId":"2000"},{"id":"2004","name":"化州市","code":"440982","parentId":"2000"},{"id":"2005","name":"信宜市","code":"440983","parentId":"2000"}]},{"id":"2006","name":"肇庆市","code":"441200","parentId":"1931","children":[{"id":"2007","name":"端州区","code":"441202","parentId":"2006"},{"id":"2008","name":"鼎湖区","code":"441203","parentId":"2006"},{"id":"2009","name":"高要区","code":"441204","parentId":"2006"},{"id":"2010","name":"广宁县","code":"441223","parentId":"2006"},{"id":"2011","name":"怀集县","code":"441224","parentId":"2006"},{"id":"2012","name":"封开县","code":"441225","parentId":"2006"},{"id":"2013","name":"德庆县","code":"441226","parentId":"2006"},{"id":"2014","name":"四会市","code":"441284","parentId":"2006"}]},{"id":"2015","name":"惠州市","code":"441300","parentId":"1931","children":[{"id":"2016","name":"惠城区","code":"441302","parentId":"2015"},{"id":"2017","name":"惠阳区","code":"441303","parentId":"2015"},{"id":"2018","name":"博罗县","code":"441322","parentId":"2015"},{"id":"2019","name":"惠东县","code":"441323","parentId":"2015"},{"id":"2020","name":"龙门县","code":"441324","parentId":"2015"}]},{"id":"2021","name":"梅州市","code":"441400","parentId":"1931","children":[{"id":"2022","name":"梅江区","code":"441402","parentId":"2021"},{"id":"2023","name":"梅县区","code":"441403","parentId":"2021"},{"id":"2024","name":"大埔县","code":"441422","parentId":"2021"},{"id":"2025","name":"丰顺县","code":"441423","parentId":"2021"},{"id":"2026","name":"五华县","code":"441424","parentId":"2021"},{"id":"2027","name":"平远县","code":"441426","parentId":"2021"},{"id":"2028","name":"蕉岭县","code":"441427","parentId":"2021"},{"id":"2029","name":"兴宁市","code":"441481","parentId":"2021"}]},{"id":"2030","name":"汕尾市","code":"441500","parentId":"1931","children":[{"id":"2031","name":"城区","code":"441502","parentId":"2030"},{"id":"2032","name":"海丰县","code":"441521","parentId":"2030"},{"id":"2033","name":"陆河县","code":"441523","parentId":"2030"},{"id":"2034","name":"陆丰市","code":"441581","parentId":"2030"}]},{"id":"2035","name":"河源市","code":"441600","parentId":"1931","children":[{"id":"2036","name":"源城区","code":"441602","parentId":"2035"},{"id":"2037","name":"紫金县","code":"441621","parentId":"2035"},{"id":"2038","name":"龙川县","code":"441622","parentId":"2035"},{"id":"2039","name":"连平县","code":"441623","parentId":"2035"},{"id":"2040","name":"和平县","code":"441624","parentId":"2035"},{"id":"2041","name":"东源县","code":"441625","parentId":"2035"}]},{"id":"2042","name":"阳江市","code":"441700","parentId":"1931","children":[{"id":"2043","name":"江城区","code":"441702","parentId":"2042"},{"id":"2044","name":"阳东区","code":"441704","parentId":"2042"},{"id":"2045","name":"阳西县","code":"441721","parentId":"2042"},{"id":"2046","name":"阳春市","code":"441781","parentId":"2042"}]},{"id":"2047","name":"清远市","code":"441800","parentId":"1931","children":[{"id":"2048","name":"清城区","code":"441802","parentId":"2047"},{"id":"2049","name":"清新区","code":"441803","parentId":"2047"},{"id":"2050","name":"佛冈县","code":"441821","parentId":"2047"},{"id":"2051","name":"阳山县","code":"441823","parentId":"2047"},{"id":"2052","name":"连山壮族瑶族自治县","code":"441825","parentId":"2047"},{"id":"2053","name":"连南瑶族自治县","code":"441826","parentId":"2047"},{"id":"2054","name":"英德市","code":"441881","parentId":"2047"},{"id":"2055","name":"连州市","code":"441882","parentId":"2047"}]},{"id":"2056","name":"东莞市","code":"441900","parentId":"1931","children":[{"id":"3449","code":"441901","name":"辖区","parentId":"2056"}]},{"id":"2057","name":"中山市","code":"442000","parentId":"1931","children":[{"id":"3450","code":"442001","name":"辖区","parentId":"2057"}]},{"id":"2058","name":"潮州市","code":"445100","parentId":"1931","children":[{"id":"2059","name":"湘桥区","code":"445102","parentId":"2058"},{"id":"2060","name":"潮安区","code":"445103","parentId":"2058"},{"id":"2061","name":"饶平县","code":"445122","parentId":"2058"}]},{"id":"2062","name":"揭阳市","code":"445200","parentId":"1931","children":[{"id":"2063","name":"榕城区","code":"445202","parentId":"2062"},{"id":"2064","name":"揭东区","code":"445203","parentId":"2062"},{"id":"2065","name":"揭西县","code":"445222","parentId":"2062"},{"id":"2066","name":"惠来县","code":"445224","parentId":"2062"},{"id":"2067","name":"普宁市","code":"445281","parentId":"2062"}]},{"id":"2068","name":"云浮市","code":"445300","parentId":"1931","children":[{"id":"2069","name":"云城区","code":"445302","parentId":"2068"},{"id":"2070","name":"云安区","code":"445303","parentId":"2068"},{"id":"2071","name":"新兴县","code":"445321","parentId":"2068"},{"id":"2072","name":"郁南县","code":"445322","parentId":"2068"},{"id":"2073","name":"罗定市","code":"445381","parentId":"2068"}]}]},{"id":"2074","name":"广西壮族自治区","code":"450000","parentId":"0","children":[{"id":"2075","name":"南宁市","code":"450100","parentId":"2074","children":[{"id":"2076","name":"兴宁区","code":"450102","parentId":"2075"},{"id":"2077","name":"青秀区","code":"450103","parentId":"2075"},{"id":"2078","name":"江南区","code":"450105","parentId":"2075"},{"id":"2079","name":"西乡塘区","code":"450107","parentId":"2075"},{"id":"2080","name":"良庆区","code":"450108","parentId":"2075"},{"id":"2081","name":"邕宁区","code":"450109","parentId":"2075"},{"id":"2082","name":"武鸣区","code":"450110","parentId":"2075"},{"id":"2083","name":"隆安县","code":"450123","parentId":"2075"},{"id":"2084","name":"马山县","code":"450124","parentId":"2075"},{"id":"2085","name":"上林县","code":"450125","parentId":"2075"},{"id":"2086","name":"宾阳县","code":"450126","parentId":"2075"},{"id":"2087","name":"横县","code":"450127","parentId":"2075"}]},{"id":"2088","name":"柳州市","code":"450200","parentId":"2074","children":[{"id":"2089","name":"城中区","code":"450202","parentId":"2088"},{"id":"2090","name":"鱼峰区","code":"450203","parentId":"2088"},{"id":"2091","name":"柳南区","code":"450204","parentId":"2088"},{"id":"2092","name":"柳北区","code":"450205","parentId":"2088"},{"id":"2093","name":"柳江区","code":"450206","parentId":"2088"},{"id":"2094","name":"柳城县","code":"450222","parentId":"2088"},{"id":"2095","name":"鹿寨县","code":"450223","parentId":"2088"},{"id":"2096","name":"融安县","code":"450224","parentId":"2088"},{"id":"2097","name":"融水苗族自治县","code":"450225","parentId":"2088"},{"id":"2098","name":"三江侗族自治县","code":"450226","parentId":"2088"}]},{"id":"2099","name":"桂林市","code":"450300","parentId":"2074","children":[{"id":"2100","name":"秀峰区","code":"450302","parentId":"2099"},{"id":"2101","name":"叠彩区","code":"450303","parentId":"2099"},{"id":"2102","name":"象山区","code":"450304","parentId":"2099"},{"id":"2103","name":"七星区","code":"450305","parentId":"2099"},{"id":"2104","name":"雁山区","code":"450311","parentId":"2099"},{"id":"2105","name":"临桂区","code":"450312","parentId":"2099"},{"id":"2106","name":"阳朔县","code":"450321","parentId":"2099"},{"id":"2107","name":"灵川县","code":"450323","parentId":"2099"},{"id":"2108","name":"全州县","code":"450324","parentId":"2099"},{"id":"2109","name":"兴安县","code":"450325","parentId":"2099"},{"id":"2110","name":"永福县","code":"450326","parentId":"2099"},{"id":"2111","name":"灌阳县","code":"450327","parentId":"2099"},{"id":"2112","name":"龙胜各族自治县","code":"450328","parentId":"2099"},{"id":"2113","name":"资源县","code":"450329","parentId":"2099"},{"id":"2114","name":"平乐县","code":"450330","parentId":"2099"},{"id":"2115","name":"荔浦县","code":"450331","parentId":"2099"},{"id":"2116","name":"恭城瑶族自治县","code":"450332","parentId":"2099"}]},{"id":"2117","name":"梧州市","code":"450400","parentId":"2074","children":[{"id":"2118","name":"万秀区","code":"450403","parentId":"2117"},{"id":"2119","name":"长洲区","code":"450405","parentId":"2117"},{"id":"2120","name":"龙圩区","code":"450406","parentId":"2117"},{"id":"2121","name":"苍梧县","code":"450421","parentId":"2117"},{"id":"2122","name":"藤县","code":"450422","parentId":"2117"},{"id":"2123","name":"蒙山县","code":"450423","parentId":"2117"},{"id":"2124","name":"岑溪市","code":"450481","parentId":"2117"}]},{"id":"2125","name":"北海市","code":"450500","parentId":"2074","children":[{"id":"2126","name":"海城区","code":"450502","parentId":"2125"},{"id":"2127","name":"银海区","code":"450503","parentId":"2125"},{"id":"2128","name":"铁山港区","code":"450512","parentId":"2125"},{"id":"2129","name":"合浦县","code":"450521","parentId":"2125"}]},{"id":"2130","name":"防城港市","code":"450600","parentId":"2074","children":[{"id":"2131","name":"港口区","code":"450602","parentId":"2130"},{"id":"2132","name":"防城区","code":"450603","parentId":"2130"},{"id":"2133","name":"上思县","code":"450621","parentId":"2130"},{"id":"2134","name":"东兴市","code":"450681","parentId":"2130"}]},{"id":"2135","name":"钦州市","code":"450700","parentId":"2074","children":[{"id":"2136","name":"钦南区","code":"450702","parentId":"2135"},{"id":"2137","name":"钦北区","code":"450703","parentId":"2135"},{"id":"2138","name":"灵山县","code":"450721","parentId":"2135"},{"id":"2139","name":"浦北县","code":"450722","parentId":"2135"}]},{"id":"2140","name":"贵港市","code":"450800","parentId":"2074","children":[{"id":"2141","name":"港北区","code":"450802","parentId":"2140"},{"id":"2142","name":"港南区","code":"450803","parentId":"2140"},{"id":"2143","name":"覃塘区","code":"450804","parentId":"2140"},{"id":"2144","name":"平南县","code":"450821","parentId":"2140"},{"id":"2145","name":"桂平市","code":"450881","parentId":"2140"}]},{"id":"2146","name":"玉林市","code":"450900","parentId":"2074","children":[{"id":"2147","name":"玉州区","code":"450902","parentId":"2146"},{"id":"2148","name":"福绵区","code":"450903","parentId":"2146"},{"id":"2149","name":"容县","code":"450921","parentId":"2146"},{"id":"2150","name":"陆川县","code":"450922","parentId":"2146"},{"id":"2151","name":"博白县","code":"450923","parentId":"2146"},{"id":"2152","name":"兴业县","code":"450924","parentId":"2146"},{"id":"2153","name":"北流市","code":"450981","parentId":"2146"}]},{"id":"2154","name":"百色市","code":"451000","parentId":"2074","children":[{"id":"2155","name":"右江区","code":"451002","parentId":"2154"},{"id":"2156","name":"田阳县","code":"451021","parentId":"2154"},{"id":"2157","name":"田东县","code":"451022","parentId":"2154"},{"id":"2158","name":"平果县","code":"451023","parentId":"2154"},{"id":"2159","name":"德保县","code":"451024","parentId":"2154"},{"id":"2160","name":"那坡县","code":"451026","parentId":"2154"},{"id":"2161","name":"凌云县","code":"451027","parentId":"2154"},{"id":"2162","name":"乐业县","code":"451028","parentId":"2154"},{"id":"2163","name":"田林县","code":"451029","parentId":"2154"},{"id":"2164","name":"西林县","code":"451030","parentId":"2154"},{"id":"2165","name":"隆林各族自治县","code":"451031","parentId":"2154"},{"id":"2166","name":"靖西市","code":"451081","parentId":"2154"}]},{"id":"2167","name":"贺州市","code":"451100","parentId":"2074","children":[{"id":"2168","name":"八步区","code":"451102","parentId":"2167"},{"id":"2169","name":"平桂区","code":"451103","parentId":"2167"},{"id":"2170","name":"昭平县","code":"451121","parentId":"2167"},{"id":"2171","name":"钟山县","code":"451122","parentId":"2167"},{"id":"2172","name":"富川瑶族自治县","code":"451123","parentId":"2167"}]},{"id":"2173","name":"河池市","code":"451200","parentId":"2074","children":[{"id":"2174","name":"金城江区","code":"451202","parentId":"2173"},{"id":"2175","name":"宜州区","code":"451203","parentId":"2173"},{"id":"2176","name":"南丹县","code":"451221","parentId":"2173"},{"id":"2177","name":"天峨县","code":"451222","parentId":"2173"},{"id":"2178","name":"凤山县","code":"451223","parentId":"2173"},{"id":"2179","name":"东兰县","code":"451224","parentId":"2173"},{"id":"2180","name":"罗城仫佬族自治县","code":"451225","parentId":"2173"},{"id":"2181","name":"环江毛南族自治县","code":"451226","parentId":"2173"},{"id":"2182","name":"巴马瑶族自治县","code":"451227","parentId":"2173"},{"id":"2183","name":"都安瑶族自治县","code":"451228","parentId":"2173"},{"id":"2184","name":"大化瑶族自治县","code":"451229","parentId":"2173"}]},{"id":"2185","name":"来宾市","code":"451300","parentId":"2074","children":[{"id":"2186","name":"兴宾区","code":"451302","parentId":"2185"},{"id":"2187","name":"忻城县","code":"451321","parentId":"2185"},{"id":"2188","name":"象州县","code":"451322","parentId":"2185"},{"id":"2189","name":"武宣县","code":"451323","parentId":"2185"},{"id":"2190","name":"金秀瑶族自治县","code":"451324","parentId":"2185"},{"id":"2191","name":"合山市","code":"451381","parentId":"2185"}]},{"id":"2192","name":"崇左市","code":"451400","parentId":"2074","children":[{"id":"2193","name":"江州区","code":"451402","parentId":"2192"},{"id":"2194","name":"扶绥县","code":"451421","parentId":"2192"},{"id":"2195","name":"宁明县","code":"451422","parentId":"2192"},{"id":"2196","name":"龙州县","code":"451423","parentId":"2192"},{"id":"2197","name":"大新县","code":"451424","parentId":"2192"},{"id":"2198","name":"天等县","code":"451425","parentId":"2192"},{"id":"2199","name":"凭祥市","code":"451481","parentId":"2192"}]}]},{"id":"2200","name":"海南省","code":"460000","parentId":"0","children":[{"id":"2201","name":"海口市","code":"460100","parentId":"2200","children":[{"id":"2202","name":"秀英区","code":"460105","parentId":"2201"},{"id":"2203","name":"龙华区","code":"460106","parentId":"2201"},{"id":"2204","name":"琼山区","code":"460107","parentId":"2201"},{"id":"2205","name":"美兰区","code":"460108","parentId":"2201"}]},{"id":"2206","name":"三亚市","code":"460200","parentId":"2200","children":[{"id":"2207","name":"海棠区","code":"460202","parentId":"2206"},{"id":"2208","name":"吉阳区","code":"460203","parentId":"2206"},{"id":"2209","name":"天涯区","code":"460204","parentId":"2206"},{"id":"2210","name":"崖州区","code":"460205","parentId":"2206"}]},{"id":"2211","name":"三沙市","code":"460300","parentId":"2200","children":[{"id":"2212","name":"西沙群岛","code":"460321","parentId":"2211"},{"id":"2213","name":"南沙群岛","code":"460322","parentId":"2211"},{"id":"2214","name":"中沙群岛","code":"460323","parentId":"2211"},{"id":"2215","name":"永乐群岛","code":"460324","parentId":"2211"}]},{"id":"2216","name":"儋州市","code":"460400","parentId":"2200","children":[{"id":"3449","name":"辖区","code":"460401","parentId":"2216"}]},{"id":"2217","name":"五指山市","code":"469001","parentId":"2200","children":[{"id":"3450","name":"辖区","code":"-1","parentId":"2217"}]},{"id":"2218","name":"琼海市","code":"469002","parentId":"2200","children":[{"id":"3451","name":"辖区","code":"-1","parentId":"2218"}]},{"id":"2219","name":"文昌市","code":"469005","parentId":"2200","children":[{"id":"3452","name":"辖区","code":"-1","parentId":"2219"}]},{"id":"2220","name":"万宁市","code":"469006","parentId":"2200","children":[{"id":"3453","name":"辖区","code":"-1","parentId":"2220"}]},{"id":"2221","name":"东方市","code":"469007","parentId":"2200","children":[{"id":"3454","name":"辖区","code":"-1","parentId":"2221"}]},{"id":"2222","name":"定安县","code":"469021","parentId":"2200","children":[{"id":"3455","name":"辖区","code":"-1","parentId":"2222"}]},{"id":"2223","name":"屯昌县","code":"469022","parentId":"2200","children":[{"id":"3456","name":"辖区","code":"-1","parentId":"2223"}]},{"id":"2224","name":"澄迈县","code":"469023","parentId":"2200","children":[{"id":"3457","name":"辖区","code":"-1","parentId":"2224"}]},{"id":"2225","name":"临高县","code":"469024","parentId":"2200","children":[{"id":"3458","name":"辖区","code":"-1","parentId":"2225"}]},{"id":"2226","name":"白沙黎族自治县","code":"469025","parentId":"2200","children":[{"id":"3459","name":"辖区","code":"-1","parentId":"2226"}]},{"id":"2227","name":"昌江黎族自治县","code":"469026","parentId":"2200","children":[{"id":"3460","name":"辖区","code":"-1","parentId":"2227"}]},{"id":"2228","name":"乐东黎族自治县","code":"469027","parentId":"2200","children":[{"id":"3461","name":"辖区","code":"-1","parentId":"2228"}]},{"id":"2229","name":"陵水黎族自治县","code":"469028","parentId":"2200","children":[{"id":"3462","name":"辖区","code":"-1","parentId":"2229"}]},{"id":"2230","name":"保亭黎族苗族自治县","code":"469029","parentId":"2200","children":[{"id":"3463","name":"辖区","code":"-1","parentId":"2230"}]},{"id":"2231","name":"琼中黎族苗族自治县","code":"469030","parentId":"2200","children":[{"id":"3464","name":"辖区","code":"-1","parentId":"2231"}]}]},{"id":"2271","name":"四川省","code":"510000","parentId":"0","children":[{"id":"2272","name":"成都市","code":"510100","parentId":"2271","children":[{"id":"2273","name":"锦江区","code":"510104","parentId":"2272"},{"id":"2274","name":"青羊区","code":"510105","parentId":"2272"},{"id":"2275","name":"金牛区","code":"510106","parentId":"2272"},{"id":"2276","name":"武侯区","code":"510107","parentId":"2272"},{"id":"2277","name":"成华区","code":"510108","parentId":"2272"},{"id":"2278","name":"龙泉驿区","code":"510112","parentId":"2272"},{"id":"2279","name":"青白江区","code":"510113","parentId":"2272"},{"id":"2280","name":"新都区","code":"510114","parentId":"2272"},{"id":"2281","name":"温江区","code":"510115","parentId":"2272"},{"id":"2282","name":"双流区","code":"510116","parentId":"2272"},{"id":"2283","name":"郫都区","code":"510117","parentId":"2272"},{"id":"2284","name":"金堂县","code":"510121","parentId":"2272"},{"id":"2285","name":"大邑县","code":"510129","parentId":"2272"},{"id":"2286","name":"蒲江县","code":"510131","parentId":"2272"},{"id":"2287","name":"新津县","code":"510132","parentId":"2272"},{"id":"2288","name":"都江堰市","code":"510181","parentId":"2272"},{"id":"2289","name":"彭州市","code":"510182","parentId":"2272"},{"id":"2290","name":"邛崃市","code":"510183","parentId":"2272"},{"id":"2291","name":"崇州市","code":"510184","parentId":"2272"},{"id":"2292","name":"简阳市","code":"510185","parentId":"2272"}]},{"id":"2293","name":"自贡市","code":"510300","parentId":"2271","children":[{"id":"2294","name":"自流井区","code":"510302","parentId":"2293"},{"id":"2295","name":"贡井区","code":"510303","parentId":"2293"},{"id":"2296","name":"大安区","code":"510304","parentId":"2293"},{"id":"2297","name":"沿滩区","code":"510311","parentId":"2293"},{"id":"2298","name":"荣县","code":"510321","parentId":"2293"},{"id":"2299","name":"富顺县","code":"510322","parentId":"2293"}]},{"id":"2300","name":"攀枝花市","code":"510400","parentId":"2271","children":[{"id":"2301","name":"东区","code":"510402","parentId":"2300"},{"id":"2302","name":"西区","code":"510403","parentId":"2300"},{"id":"2303","name":"仁和区","code":"510411","parentId":"2300"},{"id":"2304","name":"米易县","code":"510421","parentId":"2300"},{"id":"2305","name":"盐边县","code":"510422","parentId":"2300"}]},{"id":"2306","name":"泸州市","code":"510500","parentId":"2271","children":[{"id":"2307","name":"江阳区","code":"510502","parentId":"2306"},{"id":"2308","name":"纳溪区","code":"510503","parentId":"2306"},{"id":"2309","name":"龙马潭区","code":"510504","parentId":"2306"},{"id":"2310","name":"泸县","code":"510521","parentId":"2306"},{"id":"2311","name":"合江县","code":"510522","parentId":"2306"},{"id":"2312","name":"叙永县","code":"510524","parentId":"2306"},{"id":"2313","name":"古蔺县","code":"510525","parentId":"2306"}]},{"id":"2314","name":"德阳市","code":"510600","parentId":"2271","children":[{"id":"2315","name":"旌阳区","code":"510603","parentId":"2314"},{"id":"2316","name":"中江县","code":"510623","parentId":"2314"},{"id":"2317","name":"罗江县","code":"510626","parentId":"2314"},{"id":"2318","name":"广汉市","code":"510681","parentId":"2314"},{"id":"2319","name":"什邡市","code":"510682","parentId":"2314"},{"id":"2320","name":"绵竹市","code":"510683","parentId":"2314"}]},{"id":"2321","name":"绵阳市","code":"510700","parentId":"2271","children":[{"id":"2322","name":"涪城区","code":"510703","parentId":"2321"},{"id":"2323","name":"游仙区","code":"510704","parentId":"2321"},{"id":"2324","name":"安州区","code":"510705","parentId":"2321"},{"id":"2325","name":"三台县","code":"510722","parentId":"2321"},{"id":"2326","name":"盐亭县","code":"510723","parentId":"2321"},{"id":"2327","name":"梓潼县","code":"510725","parentId":"2321"},{"id":"2328","name":"北川羌族自治县","code":"510726","parentId":"2321"},{"id":"2329","name":"平武县","code":"510727","parentId":"2321"},{"id":"2330","name":"江油市","code":"510781","parentId":"2321"}]},{"id":"2331","name":"广元市","code":"510800","parentId":"2271","children":[{"id":"2332","name":"利州区","code":"510802","parentId":"2331"},{"id":"2333","name":"昭化区","code":"510811","parentId":"2331"},{"id":"2334","name":"朝天区","code":"510812","parentId":"2331"},{"id":"2335","name":"旺苍县","code":"510821","parentId":"2331"},{"id":"2336","name":"青川县","code":"510822","parentId":"2331"},{"id":"2337","name":"剑阁县","code":"510823","parentId":"2331"},{"id":"2338","name":"苍溪县","code":"510824","parentId":"2331"}]},{"id":"2339","name":"遂宁市","code":"510900","parentId":"2271","children":[{"id":"2340","name":"船山区","code":"510903","parentId":"2339"},{"id":"2341","name":"安居区","code":"510904","parentId":"2339"},{"id":"2342","name":"蓬溪县","code":"510921","parentId":"2339"},{"id":"2343","name":"射洪县","code":"510922","parentId":"2339"},{"id":"2344","name":"大英县","code":"510923","parentId":"2339"}]},{"id":"2345","name":"内江市","code":"511000","parentId":"2271","children":[{"id":"2346","name":"市中区","code":"511002","parentId":"2345"},{"id":"2347","name":"东兴区","code":"511011","parentId":"2345"},{"id":"2348","name":"威远县","code":"511024","parentId":"2345"},{"id":"2349","name":"资中县","code":"511025","parentId":"2345"},{"id":"2350","name":"隆昌市","code":"511083","parentId":"2345"}]},{"id":"2351","name":"乐山市","code":"511100","parentId":"2271","children":[{"id":"2352","name":"市中区","code":"511102","parentId":"2351"},{"id":"2353","name":"沙湾区","code":"511111","parentId":"2351"},{"id":"2354","name":"五通桥区","code":"511112","parentId":"2351"},{"id":"2355","name":"金口河区","code":"511113","parentId":"2351"},{"id":"2356","name":"犍为县","code":"511123","parentId":"2351"},{"id":"2357","name":"井研县","code":"511124","parentId":"2351"},{"id":"2358","name":"夹江县","code":"511126","parentId":"2351"},{"id":"2359","name":"沐川县","code":"511129","parentId":"2351"},{"id":"2360","name":"峨边彝族自治县","code":"511132","parentId":"2351"},{"id":"2361","name":"马边彝族自治县","code":"511133","parentId":"2351"},{"id":"2362","name":"峨眉山市","code":"511181","parentId":"2351"}]},{"id":"2363","name":"南充市","code":"511300","parentId":"2271","children":[{"id":"2364","name":"顺庆区","code":"511302","parentId":"2363"},{"id":"2365","name":"高坪区","code":"511303","parentId":"2363"},{"id":"2366","name":"嘉陵区","code":"511304","parentId":"2363"},{"id":"2367","name":"南部县","code":"511321","parentId":"2363"},{"id":"2368","name":"营山县","code":"511322","parentId":"2363"},{"id":"2369","name":"蓬安县","code":"511323","parentId":"2363"},{"id":"2370","name":"仪陇县","code":"511324","parentId":"2363"},{"id":"2371","name":"西充县","code":"511325","parentId":"2363"},{"id":"2372","name":"阆中市","code":"511381","parentId":"2363"}]},{"id":"2373","name":"眉山市","code":"511400","parentId":"2271","children":[{"id":"2374","name":"东坡区","code":"511402","parentId":"2373"},{"id":"2375","name":"彭山区","code":"511403","parentId":"2373"},{"id":"2376","name":"仁寿县","code":"511421","parentId":"2373"},{"id":"2377","name":"洪雅县","code":"511423","parentId":"2373"},{"id":"2378","name":"丹棱县","code":"511424","parentId":"2373"},{"id":"2379","name":"青神县","code":"511425","parentId":"2373"}]},{"id":"2380","name":"宜宾市","code":"511500","parentId":"2271","children":[{"id":"2381","name":"翠屏区","code":"511502","parentId":"2380"},{"id":"2382","name":"南溪区","code":"511503","parentId":"2380"},{"id":"2383","name":"宜宾县","code":"511521","parentId":"2380"},{"id":"2384","name":"江安县","code":"511523","parentId":"2380"},{"id":"2385","name":"长宁县","code":"511524","parentId":"2380"},{"id":"2386","name":"高县","code":"511525","parentId":"2380"},{"id":"2387","name":"珙县","code":"511526","parentId":"2380"},{"id":"2388","name":"筠连县","code":"511527","parentId":"2380"},{"id":"2389","name":"兴文县","code":"511528","parentId":"2380"},{"id":"2390","name":"屏山县","code":"511529","parentId":"2380"}]},{"id":"2391","name":"广安市","code":"511600","parentId":"2271","children":[{"id":"2392","name":"广安区","code":"511602","parentId":"2391"},{"id":"2393","name":"前锋区","code":"511603","parentId":"2391"},{"id":"2394","name":"岳池县","code":"511621","parentId":"2391"},{"id":"2395","name":"武胜县","code":"511622","parentId":"2391"},{"id":"2396","name":"邻水县","code":"511623","parentId":"2391"},{"id":"2397","name":"华蓥市","code":"511681","parentId":"2391"}]},{"id":"2398","name":"达州市","code":"511700","parentId":"2271","children":[{"id":"2399","name":"通川区","code":"511702","parentId":"2398"},{"id":"2400","name":"达川区","code":"511703","parentId":"2398"},{"id":"2401","name":"宣汉县","code":"511722","parentId":"2398"},{"id":"2402","name":"开江县","code":"511723","parentId":"2398"},{"id":"2403","name":"大竹县","code":"511724","parentId":"2398"},{"id":"2404","name":"渠县","code":"511725","parentId":"2398"},{"id":"2405","name":"万源市","code":"511781","parentId":"2398"}]},{"id":"2406","name":"雅安市","code":"511800","parentId":"2271","children":[{"id":"2407","name":"雨城区","code":"511802","parentId":"2406"},{"id":"2408","name":"名山区","code":"511803","parentId":"2406"},{"id":"2409","name":"荥经县","code":"511822","parentId":"2406"},{"id":"2410","name":"汉源县","code":"511823","parentId":"2406"},{"id":"2411","name":"石棉县","code":"511824","parentId":"2406"},{"id":"2412","name":"天全县","code":"511825","parentId":"2406"},{"id":"2413","name":"芦山县","code":"511826","parentId":"2406"},{"id":"2414","name":"宝兴县","code":"511827","parentId":"2406"}]},{"id":"2415","name":"巴中市","code":"511900","parentId":"2271","children":[{"id":"2416","name":"巴州区","code":"511902","parentId":"2415"},{"id":"2417","name":"恩阳区","code":"511903","parentId":"2415"},{"id":"2418","name":"通江县","code":"511921","parentId":"2415"},{"id":"2419","name":"南江县","code":"511922","parentId":"2415"},{"id":"2420","name":"平昌县","code":"511923","parentId":"2415"}]},{"id":"2421","name":"资阳市","code":"512000","parentId":"2271","children":[{"id":"2422","name":"雁江区","code":"512002","parentId":"2421"},{"id":"2423","name":"安岳县","code":"512021","parentId":"2421"},{"id":"2424","name":"乐至县","code":"512022","parentId":"2421"}]},{"id":"2425","name":"阿坝藏族羌族自治州","code":"513200","parentId":"2271","children":[{"id":"2426","name":"马尔康市","code":"513201","parentId":"2425"},{"id":"2427","name":"汶川县","code":"513221","parentId":"2425"},{"id":"2428","name":"理县","code":"513222","parentId":"2425"},{"id":"2429","name":"茂县","code":"513223","parentId":"2425"},{"id":"2430","name":"松潘县","code":"513224","parentId":"2425"},{"id":"2431","name":"九寨沟县","code":"513225","parentId":"2425"},{"id":"2432","name":"金川县","code":"513226","parentId":"2425"},{"id":"2433","name":"小金县","code":"513227","parentId":"2425"},{"id":"2434","name":"黑水县","code":"513228","parentId":"2425"},{"id":"2435","name":"壤塘县","code":"513230","parentId":"2425"},{"id":"2436","name":"阿坝县","code":"513231","parentId":"2425"},{"id":"2437","name":"若尔盖县","code":"513232","parentId":"2425"},{"id":"2438","name":"红原县","code":"513233","parentId":"2425"}]},{"id":"2439","name":"甘孜藏族自治州","code":"513300","parentId":"2271","children":[{"id":"2440","name":"康定市","code":"513301","parentId":"2439"},{"id":"2441","name":"泸定县","code":"513322","parentId":"2439"},{"id":"2442","name":"丹巴县","code":"513323","parentId":"2439"},{"id":"2443","name":"九龙县","code":"513324","parentId":"2439"},{"id":"2444","name":"雅江县","code":"513325","parentId":"2439"},{"id":"2445","name":"道孚县","code":"513326","parentId":"2439"},{"id":"2446","name":"炉霍县","code":"513327","parentId":"2439"},{"id":"2447","name":"甘孜县","code":"513328","parentId":"2439"},{"id":"2448","name":"新龙县","code":"513329","parentId":"2439"},{"id":"2449","name":"德格县","code":"513330","parentId":"2439"},{"id":"2450","name":"白玉县","code":"513331","parentId":"2439"},{"id":"2451","name":"石渠县","code":"513332","parentId":"2439"},{"id":"2452","name":"色达县","code":"513333","parentId":"2439"},{"id":"2453","name":"理塘县","code":"513334","parentId":"2439"},{"id":"2454","name":"巴塘县","code":"513335","parentId":"2439"},{"id":"2455","name":"乡城县","code":"513336","parentId":"2439"},{"id":"2456","name":"稻城县","code":"513337","parentId":"2439"},{"id":"2457","name":"得荣县","code":"513338","parentId":"2439"}]},{"id":"2458","name":"凉山彝族自治州","code":"513400","parentId":"2271","children":[{"id":"2459","name":"西昌市","code":"513401","parentId":"2458"},{"id":"2460","name":"木里藏族自治县","code":"513422","parentId":"2458"},{"id":"2461","name":"盐源县","code":"513423","parentId":"2458"},{"id":"2462","name":"德昌县","code":"513424","parentId":"2458"},{"id":"2463","name":"会理县","code":"513425","parentId":"2458"},{"id":"2464","name":"会东县","code":"513426","parentId":"2458"},{"id":"2465","name":"宁南县","code":"513427","parentId":"2458"},{"id":"2466","name":"普格县","code":"513428","parentId":"2458"},{"id":"2467","name":"布拖县","code":"513429","parentId":"2458"},{"id":"2468","name":"金阳县","code":"513430","parentId":"2458"},{"id":"2469","name":"昭觉县","code":"513431","parentId":"2458"},{"id":"2470","name":"喜德县","code":"513432","parentId":"2458"},{"id":"2471","name":"冕宁县","code":"513433","parentId":"2458"},{"id":"2472","name":"越西县","code":"513434","parentId":"2458"},{"id":"2473","name":"甘洛县","code":"513435","parentId":"2458"},{"id":"2474","name":"美姑县","code":"513436","parentId":"2458"},{"id":"2475","name":"雷波县","code":"513437","parentId":"2458"}]}]},{"id":"2476","name":"贵州省","code":"520000","parentId":"0","children":[{"id":"2477","name":"贵阳市","code":"520100","parentId":"2476","children":[{"id":"2478","name":"南明区","code":"520102","parentId":"2477"},{"id":"2479","name":"云岩区","code":"520103","parentId":"2477"},{"id":"2480","name":"花溪区","code":"520111","parentId":"2477"},{"id":"2481","name":"乌当区","code":"520112","parentId":"2477"},{"id":"2482","name":"白云区","code":"520113","parentId":"2477"},{"id":"2483","name":"观山湖区","code":"520115","parentId":"2477"},{"id":"2484","name":"开阳县","code":"520121","parentId":"2477"},{"id":"2485","name":"息烽县","code":"520122","parentId":"2477"},{"id":"2486","name":"修文县","code":"520123","parentId":"2477"},{"id":"2487","name":"清镇市","code":"520181","parentId":"2477"}]},{"id":"2488","name":"六盘水市","code":"520200","parentId":"2476","children":[{"id":"2489","name":"钟山区","code":"520201","parentId":"2488"},{"id":"2490","name":"六枝特区","code":"520203","parentId":"2488"},{"id":"2491","name":"水城县","code":"520221","parentId":"2488"},{"id":"2492","name":"盘州市","code":"520281","parentId":"2488"}]},{"id":"2493","name":"遵义市","code":"520300","parentId":"2476","children":[{"id":"2494","name":"红花岗区","code":"520302","parentId":"2493"},{"id":"2495","name":"汇川区","code":"520303","parentId":"2493"},{"id":"2496","name":"播州区","code":"520304","parentId":"2493"},{"id":"2497","name":"桐梓县","code":"520322","parentId":"2493"},{"id":"2498","name":"绥阳县","code":"520323","parentId":"2493"},{"id":"2499","name":"正安县","code":"520324","parentId":"2493"},{"id":"2500","name":"道真仡佬族苗族自治县","code":"520325","parentId":"2493"},{"id":"2501","name":"务川仡佬族苗族自治县","code":"520326","parentId":"2493"},{"id":"2502","name":"凤冈县","code":"520327","parentId":"2493"},{"id":"2503","name":"湄潭县","code":"520328","parentId":"2493"},{"id":"2504","name":"余庆县","code":"520329","parentId":"2493"},{"id":"2505","name":"习水县","code":"520330","parentId":"2493"},{"id":"2506","name":"赤水市","code":"520381","parentId":"2493"},{"id":"2507","name":"仁怀市","code":"520382","parentId":"2493"}]},{"id":"2508","name":"安顺市","code":"520400","parentId":"2476","children":[{"id":"2509","name":"西秀区","code":"520402","parentId":"2508"},{"id":"2510","name":"平坝区","code":"520403","parentId":"2508"},{"id":"2511","name":"普定县","code":"520422","parentId":"2508"},{"id":"2512","name":"镇宁布依族苗族自治县","code":"520423","parentId":"2508"},{"id":"2513","name":"关岭布依族苗族自治县","code":"520424","parentId":"2508"},{"id":"2514","name":"紫云苗族布依族自治县","code":"520425","parentId":"2508"}]},{"id":"2515","name":"毕节市","code":"520500","parentId":"2476","children":[{"id":"2516","name":"七星关区","code":"520502","parentId":"2515"},{"id":"2517","name":"大方县","code":"520521","parentId":"2515"},{"id":"2518","name":"黔西县","code":"520522","parentId":"2515"},{"id":"2519","name":"金沙县","code":"520523","parentId":"2515"},{"id":"2520","name":"织金县","code":"520524","parentId":"2515"},{"id":"2521","name":"纳雍县","code":"520525","parentId":"2515"},{"id":"2522","name":"威宁彝族回族苗族自治县","code":"520526","parentId":"2515"},{"id":"2523","name":"赫章县","code":"520527","parentId":"2515"}]},{"id":"2524","name":"铜仁市","code":"520600","parentId":"2476","children":[{"id":"2525","name":"碧江区","code":"520602","parentId":"2524"},{"id":"2526","name":"万山区","code":"520603","parentId":"2524"},{"id":"2527","name":"江口县","code":"520621","parentId":"2524"},{"id":"2528","name":"玉屏侗族自治县","code":"520622","parentId":"2524"},{"id":"2529","name":"石阡县","code":"520623","parentId":"2524"},{"id":"2530","name":"思南县","code":"520624","parentId":"2524"},{"id":"2531","name":"印江土家族苗族自治县","code":"520625","parentId":"2524"},{"id":"2532","name":"德江县","code":"520626","parentId":"2524"},{"id":"2533","name":"沿河土家族自治县","code":"520627","parentId":"2524"},{"id":"2534","name":"松桃苗族自治县","code":"520628","parentId":"2524"}]},{"id":"2535","name":"黔西南布依族苗族自治州","code":"522300","parentId":"2476","children":[{"id":"2536","name":"兴义市","code":"522301","parentId":"2535"},{"id":"2537","name":"兴仁县","code":"522322","parentId":"2535"},{"id":"2538","name":"普安县","code":"522323","parentId":"2535"},{"id":"2539","name":"晴隆县","code":"522324","parentId":"2535"},{"id":"2540","name":"贞丰县","code":"522325","parentId":"2535"},{"id":"2541","name":"望谟县","code":"522326","parentId":"2535"},{"id":"2542","name":"册亨县","code":"522327","parentId":"2535"},{"id":"2543","name":"安龙县","code":"522328","parentId":"2535"}]},{"id":"2544","name":"黔东南苗族侗族自治州","code":"522600","parentId":"2476","children":[{"id":"2545","name":"凯里市","code":"522601","parentId":"2544"},{"id":"2546","name":"黄平县","code":"522622","parentId":"2544"},{"id":"2547","name":"施秉县","code":"522623","parentId":"2544"},{"id":"2548","name":"三穗县","code":"522624","parentId":"2544"},{"id":"2549","name":"镇远县","code":"522625","parentId":"2544"},{"id":"2550","name":"岑巩县","code":"522626","parentId":"2544"},{"id":"2551","name":"天柱县","code":"522627","parentId":"2544"},{"id":"2552","name":"锦屏县","code":"522628","parentId":"2544"},{"id":"2553","name":"剑河县","code":"522629","parentId":"2544"},{"id":"2554","name":"台江县","code":"522630","parentId":"2544"},{"id":"2555","name":"黎平县","code":"522631","parentId":"2544"},{"id":"2556","name":"榕江县","code":"522632","parentId":"2544"},{"id":"2557","name":"从江县","code":"522633","parentId":"2544"},{"id":"2558","name":"雷山县","code":"522634","parentId":"2544"},{"id":"2559","name":"麻江县","code":"522635","parentId":"2544"},{"id":"2560","name":"丹寨县","code":"522636","parentId":"2544"}]},{"id":"2561","name":"黔南布依族苗族自治州","code":"522700","parentId":"2476","children":[{"id":"2562","name":"都匀市","code":"522701","parentId":"2561"},{"id":"2563","name":"福泉市","code":"522702","parentId":"2561"},{"id":"2564","name":"荔波县","code":"522722","parentId":"2561"},{"id":"2565","name":"贵定县","code":"522723","parentId":"2561"},{"id":"2566","name":"瓮安县","code":"522725","parentId":"2561"},{"id":"2567","name":"独山县","code":"522726","parentId":"2561"},{"id":"2568","name":"平塘县","code":"522727","parentId":"2561"},{"id":"2569","name":"罗甸县","code":"522728","parentId":"2561"},{"id":"2570","name":"长顺县","code":"522729","parentId":"2561"},{"id":"2571","name":"龙里县","code":"522730","parentId":"2561"},{"id":"2572","name":"惠水县","code":"522731","parentId":"2561"},{"id":"2573","name":"三都水族自治县","code":"522732","parentId":"2561"}]}]},{"id":"2574","name":"云南省","code":"530000","parentId":"0","children":[{"id":"2575","name":"昆明市","code":"530100","parentId":"2574","children":[{"id":"2576","name":"五华区","code":"530102","parentId":"2575"},{"id":"2577","name":"盘龙区","code":"530103","parentId":"2575"},{"id":"2578","name":"官渡区","code":"530111","parentId":"2575"},{"id":"2579","name":"西山区","code":"530112","parentId":"2575"},{"id":"2580","name":"东川区","code":"530113","parentId":"2575"},{"id":"2581","name":"呈贡区","code":"530114","parentId":"2575"},{"id":"2582","name":"晋宁区","code":"530115","parentId":"2575"},{"id":"2583","name":"富民县","code":"530124","parentId":"2575"},{"id":"2584","name":"宜良县","code":"530125","parentId":"2575"},{"id":"2585","name":"石林彝族自治县","code":"530126","parentId":"2575"},{"id":"2586","name":"嵩明县","code":"530127","parentId":"2575"},{"id":"2587","name":"禄劝彝族苗族自治县","code":"530128","parentId":"2575"},{"id":"2588","name":"寻甸回族彝族自治县","code":"530129","parentId":"2575"},{"id":"2589","name":"安宁市","code":"530181","parentId":"2575"}]},{"id":"2590","name":"曲靖市","code":"530300","parentId":"2574","children":[{"id":"2591","name":"麒麟区","code":"530302","parentId":"2590"},{"id":"2592","name":"沾益区","code":"530303","parentId":"2590"},{"id":"2593","name":"马龙县","code":"530321","parentId":"2590"},{"id":"2594","name":"陆良县","code":"530322","parentId":"2590"},{"id":"2595","name":"师宗县","code":"530323","parentId":"2590"},{"id":"2596","name":"罗平县","code":"530324","parentId":"2590"},{"id":"2597","name":"富源县","code":"530325","parentId":"2590"},{"id":"2598","name":"会泽县","code":"530326","parentId":"2590"},{"id":"2599","name":"宣威市","code":"530381","parentId":"2590"}]},{"id":"2600","name":"玉溪市","code":"530400","parentId":"2574","children":[{"id":"2601","name":"红塔区","code":"530402","parentId":"2600"},{"id":"2602","name":"江川区","code":"530403","parentId":"2600"},{"id":"2603","name":"澄江县","code":"530422","parentId":"2600"},{"id":"2604","name":"通海县","code":"530423","parentId":"2600"},{"id":"2605","name":"华宁县","code":"530424","parentId":"2600"},{"id":"2606","name":"易门县","code":"530425","parentId":"2600"},{"id":"2607","name":"峨山彝族自治县","code":"530426","parentId":"2600"},{"id":"2608","name":"新平彝族傣族自治县","code":"530427","parentId":"2600"},{"id":"2609","name":"元江哈尼族彝族傣族自治县","code":"530428","parentId":"2600"}]},{"id":"2610","name":"保山市","code":"530500","parentId":"2574","children":[{"id":"2611","name":"隆阳区","code":"530502","parentId":"2610"},{"id":"2612","name":"施甸县","code":"530521","parentId":"2610"},{"id":"2613","name":"龙陵县","code":"530523","parentId":"2610"},{"id":"2614","name":"昌宁县","code":"530524","parentId":"2610"},{"id":"2615","name":"腾冲市","code":"530581","parentId":"2610"}]},{"id":"2616","name":"昭通市","code":"530600","parentId":"2574","children":[{"id":"2617","name":"昭阳区","code":"530602","parentId":"2616"},{"id":"2618","name":"鲁甸县","code":"530621","parentId":"2616"},{"id":"2619","name":"巧家县","code":"530622","parentId":"2616"},{"id":"2620","name":"盐津县","code":"530623","parentId":"2616"},{"id":"2621","name":"大关县","code":"530624","parentId":"2616"},{"id":"2622","name":"永善县","code":"530625","parentId":"2616"},{"id":"2623","name":"绥江县","code":"530626","parentId":"2616"},{"id":"2624","name":"镇雄县","code":"530627","parentId":"2616"},{"id":"2625","name":"彝良县","code":"530628","parentId":"2616"},{"id":"2626","name":"威信县","code":"530629","parentId":"2616"},{"id":"2627","name":"水富县","code":"530630","parentId":"2616"}]},{"id":"2628","name":"丽江市","code":"530700","parentId":"2574","children":[{"id":"2629","name":"古城区","code":"530702","parentId":"2628"},{"id":"2630","name":"玉龙纳西族自治县","code":"530721","parentId":"2628"},{"id":"2631","name":"永胜县","code":"530722","parentId":"2628"},{"id":"2632","name":"华坪县","code":"530723","parentId":"2628"},{"id":"2633","name":"宁蒗彝族自治县","code":"530724","parentId":"2628"}]},{"id":"2634","name":"普洱市","code":"530800","parentId":"2574","children":[{"id":"2635","name":"思茅区","code":"530802","parentId":"2634"},{"id":"2636","name":"宁洱哈尼族彝族自治县","code":"530821","parentId":"2634"},{"id":"2637","name":"墨江哈尼族自治县","code":"530822","parentId":"2634"},{"id":"2638","name":"景东彝族自治县","code":"530823","parentId":"2634"},{"id":"2639","name":"景谷傣族彝族自治县","code":"530824","parentId":"2634"},{"id":"2640","name":"镇沅彝族哈尼族拉祜族自治县","code":"530825","parentId":"2634"},{"id":"2641","name":"江城哈尼族彝族自治县","code":"530826","parentId":"2634"},{"id":"2642","name":"孟连傣族拉祜族佤族自治县","code":"530827","parentId":"2634"},{"id":"2643","name":"澜沧拉祜族自治县","code":"530828","parentId":"2634"},{"id":"2644","name":"西盟佤族自治县","code":"530829","parentId":"2634"}]},{"id":"2645","name":"临沧市","code":"530900","parentId":"2574","children":[{"id":"2646","name":"临翔区","code":"530902","parentId":"2645"},{"id":"2647","name":"凤庆县","code":"530921","parentId":"2645"},{"id":"2648","name":"云县","code":"530922","parentId":"2645"},{"id":"2649","name":"永德县","code":"530923","parentId":"2645"},{"id":"2650","name":"镇康县","code":"530924","parentId":"2645"},{"id":"2651","name":"双江拉祜族佤族布朗族傣族自治县","code":"530925","parentId":"2645"},{"id":"2652","name":"耿马傣族佤族自治县","code":"530926","parentId":"2645"},{"id":"2653","name":"沧源佤族自治县","code":"530927","parentId":"2645"}]},{"id":"2654","name":"楚雄彝族自治州","code":"532300","parentId":"2574","children":[{"id":"2655","name":"楚雄市","code":"532301","parentId":"2654"},{"id":"2656","name":"双柏县","code":"532322","parentId":"2654"},{"id":"2657","name":"牟定县","code":"532323","parentId":"2654"},{"id":"2658","name":"南华县","code":"532324","parentId":"2654"},{"id":"2659","name":"姚安县","code":"532325","parentId":"2654"},{"id":"2660","name":"大姚县","code":"532326","parentId":"2654"},{"id":"2661","name":"永仁县","code":"532327","parentId":"2654"},{"id":"2662","name":"元谋县","code":"532328","parentId":"2654"},{"id":"2663","name":"武定县","code":"532329","parentId":"2654"},{"id":"2664","name":"禄丰县","code":"532331","parentId":"2654"}]},{"id":"2665","name":"红河哈尼族彝族自治州","code":"532500","parentId":"2574","children":[{"id":"2666","name":"个旧市","code":"532501","parentId":"2665"},{"id":"2667","name":"开远市","code":"532502","parentId":"2665"},{"id":"2668","name":"蒙自市","code":"532503","parentId":"2665"},{"id":"2669","name":"弥勒市","code":"532504","parentId":"2665"},{"id":"2670","name":"屏边苗族自治县","code":"532523","parentId":"2665"},{"id":"2671","name":"建水县","code":"532524","parentId":"2665"},{"id":"2672","name":"石屏县","code":"532525","parentId":"2665"},{"id":"2673","name":"泸西县","code":"532527","parentId":"2665"},{"id":"2674","name":"元阳县","code":"532528","parentId":"2665"},{"id":"2675","name":"红河县","code":"532529","parentId":"2665"},{"id":"2676","name":"金平苗族瑶族傣族自治县","code":"532530","parentId":"2665"},{"id":"2677","name":"绿春县","code":"532531","parentId":"2665"},{"id":"2678","name":"河口瑶族自治县","code":"532532","parentId":"2665"}]},{"id":"2679","name":"文山壮族苗族自治州","code":"532600","parentId":"2574","children":[{"id":"2680","name":"文山市","code":"532601","parentId":"2679"},{"id":"2681","name":"砚山县","code":"532622","parentId":"2679"},{"id":"2682","name":"西畴县","code":"532623","parentId":"2679"},{"id":"2683","name":"麻栗坡县","code":"532624","parentId":"2679"},{"id":"2684","name":"马关县","code":"532625","parentId":"2679"},{"id":"2685","name":"丘北县","code":"532626","parentId":"2679"},{"id":"2686","name":"广南县","code":"532627","parentId":"2679"},{"id":"2687","name":"富宁县","code":"532628","parentId":"2679"}]},{"id":"2688","name":"西双版纳傣族自治州","code":"532800","parentId":"2574","children":[{"id":"2689","name":"景洪市","code":"532801","parentId":"2688"},{"id":"2690","name":"勐海县","code":"532822","parentId":"2688"},{"id":"2691","name":"勐腊县","code":"532823","parentId":"2688"}]},{"id":"2692","name":"大理白族自治州","code":"532900","parentId":"2574","children":[{"id":"2693","name":"大理市","code":"532901","parentId":"2692"},{"id":"2694","name":"漾濞彝族自治县","code":"532922","parentId":"2692"},{"id":"2695","name":"祥云县","code":"532923","parentId":"2692"},{"id":"2696","name":"宾川县","code":"532924","parentId":"2692"},{"id":"2697","name":"弥渡县","code":"532925","parentId":"2692"},{"id":"2698","name":"南涧彝族自治县","code":"532926","parentId":"2692"},{"id":"2699","name":"巍山彝族回族自治县","code":"532927","parentId":"2692"},{"id":"2700","name":"永平县","code":"532928","parentId":"2692"},{"id":"2701","name":"云龙县","code":"532929","parentId":"2692"},{"id":"2702","name":"洱源县","code":"532930","parentId":"2692"},{"id":"2703","name":"剑川县","code":"532931","parentId":"2692"},{"id":"2704","name":"鹤庆县","code":"532932","parentId":"2692"}]},{"id":"2705","name":"德宏傣族景颇族自治州","code":"533100","parentId":"2574","children":[{"id":"2706","name":"瑞丽市","code":"533102","parentId":"2705"},{"id":"2707","name":"芒市","code":"533103","parentId":"2705"},{"id":"2708","name":"梁河县","code":"533122","parentId":"2705"},{"id":"2709","name":"盈江县","code":"533123","parentId":"2705"},{"id":"2710","name":"陇川县","code":"533124","parentId":"2705"}]},{"id":"2711","name":"怒江傈僳族自治州","code":"533300","parentId":"2574","children":[{"id":"2712","name":"泸水市","code":"533301","parentId":"2711"},{"id":"2713","name":"福贡县","code":"533323","parentId":"2711"},{"id":"2714","name":"贡山独龙族怒族自治县","code":"533324","parentId":"2711"},{"id":"2715","name":"兰坪白族普米族自治县","code":"533325","parentId":"2711"}]},{"id":"2716","name":"迪庆藏族自治州","code":"533400","parentId":"2574","children":[{"id":"2717","name":"香格里拉市","code":"533401","parentId":"2716"},{"id":"2718","name":"德钦县","code":"533422","parentId":"2716"},{"id":"2719","name":"维西傈僳族自治县","code":"533423","parentId":"2716"}]}]},{"id":"2720","name":"西藏自治区","code":"540000","parentId":"0","children":[{"id":"2721","name":"拉萨市","code":"540100","parentId":"2720","children":[{"id":"2722","name":"城关区","code":"540102","parentId":"2721"},{"id":"2723","name":"堆龙德庆区","code":"540103","parentId":"2721"},{"id":"2724","name":"达孜区","code":"540104","parentId":"2721"},{"id":"2725","name":"林周县","code":"540121","parentId":"2721"},{"id":"2726","name":"当雄县","code":"540122","parentId":"2721"},{"id":"2727","name":"尼木县","code":"540123","parentId":"2721"},{"id":"2728","name":"曲水县","code":"540124","parentId":"2721"},{"id":"2729","name":"墨竹工卡县","code":"540127","parentId":"2721"}]},{"id":"2730","name":"日喀则市","code":"540200","parentId":"2720","children":[{"id":"2731","name":"桑珠孜区","code":"540202","parentId":"2730"},{"id":"2732","name":"南木林县","code":"540221","parentId":"2730"},{"id":"2733","name":"江孜县","code":"540222","parentId":"2730"},{"id":"2734","name":"定日县","code":"540223","parentId":"2730"},{"id":"2735","name":"萨迦县","code":"540224","parentId":"2730"},{"id":"2736","name":"拉孜县","code":"540225","parentId":"2730"},{"id":"2737","name":"昂仁县","code":"540226","parentId":"2730"},{"id":"2738","name":"谢通门县","code":"540227","parentId":"2730"},{"id":"2739","name":"白朗县","code":"540228","parentId":"2730"},{"id":"2740","name":"仁布县","code":"540229","parentId":"2730"},{"id":"2741","name":"康马县","code":"540230","parentId":"2730"},{"id":"2742","name":"定结县","code":"540231","parentId":"2730"},{"id":"2743","name":"仲巴县","code":"540232","parentId":"2730"},{"id":"2744","name":"亚东县","code":"540233","parentId":"2730"},{"id":"2745","name":"吉隆县","code":"540234","parentId":"2730"},{"id":"2746","name":"聂拉木县","code":"540235","parentId":"2730"},{"id":"2747","name":"萨嘎县","code":"540236","parentId":"2730"},{"id":"2748","name":"岗巴县","code":"540237","parentId":"2730"}]},{"id":"2749","name":"昌都市","code":"540300","parentId":"2720","children":[{"id":"2750","name":"卡若区","code":"540302","parentId":"2749"},{"id":"2751","name":"江达县","code":"540321","parentId":"2749"},{"id":"2752","name":"贡觉县","code":"540322","parentId":"2749"},{"id":"2753","name":"类乌齐县","code":"540323","parentId":"2749"},{"id":"2754","name":"丁青县","code":"540324","parentId":"2749"},{"id":"2755","name":"察雅县","code":"540325","parentId":"2749"},{"id":"2756","name":"八宿县","code":"540326","parentId":"2749"},{"id":"2757","name":"左贡县","code":"540327","parentId":"2749"},{"id":"2758","name":"芒康县","code":"540328","parentId":"2749"},{"id":"2759","name":"洛隆县","code":"540329","parentId":"2749"},{"id":"2760","name":"边坝县","code":"540330","parentId":"2749"}]},{"id":"2761","name":"林芝市","code":"540400","parentId":"2720","children":[{"id":"2762","name":"巴宜区","code":"540402","parentId":"2761"},{"id":"2763","name":"工布江达县","code":"540421","parentId":"2761"},{"id":"2764","name":"米林县","code":"540422","parentId":"2761"},{"id":"2765","name":"墨脱县","code":"540423","parentId":"2761"},{"id":"2766","name":"波密县","code":"540424","parentId":"2761"},{"id":"2767","name":"察隅县","code":"540425","parentId":"2761"},{"id":"2768","name":"朗县","code":"540426","parentId":"2761"}]},{"id":"2769","name":"山南市","code":"540500","parentId":"2720","children":[{"id":"2770","name":"乃东区","code":"540502","parentId":"2769"},{"id":"2771","name":"扎囊县","code":"540521","parentId":"2769"},{"id":"2772","name":"贡嘎县","code":"540522","parentId":"2769"},{"id":"2773","name":"桑日县","code":"540523","parentId":"2769"},{"id":"2774","name":"琼结县","code":"540524","parentId":"2769"},{"id":"2775","name":"曲松县","code":"540525","parentId":"2769"},{"id":"2776","name":"措美县","code":"540526","parentId":"2769"},{"id":"2777","name":"洛扎县","code":"540527","parentId":"2769"},{"id":"2778","name":"加查县","code":"540528","parentId":"2769"},{"id":"2779","name":"隆子县","code":"540529","parentId":"2769"},{"id":"2780","name":"错那县","code":"540530","parentId":"2769"},{"id":"2781","name":"浪卡子县","code":"540531","parentId":"2769"}]},{"id":"2782","name":"那曲市","code":"540600","parentId":"2720","children":[{"id":"2783","name":"色尼区","code":"540602","parentId":"2782"},{"id":"2784","name":"嘉黎县","code":"540621","parentId":"2782"},{"id":"2785","name":"比如县","code":"540622","parentId":"2782"},{"id":"2786","name":"聂荣县","code":"540623","parentId":"2782"},{"id":"2787","name":"安多县","code":"540624","parentId":"2782"},{"id":"2788","name":"申扎县","code":"540625","parentId":"2782"},{"id":"2789","name":"索县","code":"540626","parentId":"2782"},{"id":"2790","name":"班戈县","code":"540627","parentId":"2782"},{"id":"2791","name":"巴青县","code":"540628","parentId":"2782"},{"id":"2792","name":"尼玛县","code":"540629","parentId":"2782"},{"id":"2793","name":"双湖县","code":"540630","parentId":"2782"}]},{"id":"2794","name":"阿里地区","code":"542500","parentId":"2720","children":[{"id":"2795","name":"普兰县","code":"542521","parentId":"2794"},{"id":"2796","name":"札达县","code":"542522","parentId":"2794"},{"id":"2797","name":"噶尔县","code":"542523","parentId":"2794"},{"id":"2798","name":"日土县","code":"542524","parentId":"2794"},{"id":"2799","name":"革吉县","code":"542525","parentId":"2794"},{"id":"2800","name":"改则县","code":"542526","parentId":"2794"},{"id":"2801","name":"措勤县","code":"542527","parentId":"2794"}]}]},{"id":"2802","name":"陕西省","code":"610000","parentId":"0","children":[{"id":"2803","name":"西安市","code":"610100","parentId":"2802","children":[{"id":"2804","name":"新城区","code":"610102","parentId":"2803"},{"id":"2805","name":"碑林区","code":"610103","parentId":"2803"},{"id":"2806","name":"莲湖区","code":"610104","parentId":"2803"},{"id":"2807","name":"灞桥区","code":"610111","parentId":"2803"},{"id":"2808","name":"未央区","code":"610112","parentId":"2803"},{"id":"2809","name":"雁塔区","code":"610113","parentId":"2803"},{"id":"2810","name":"阎良区","code":"610114","parentId":"2803"},{"id":"2811","name":"临潼区","code":"610115","parentId":"2803"},{"id":"2812","name":"长安区","code":"610116","parentId":"2803"},{"id":"2813","name":"高陵区","code":"610117","parentId":"2803"},{"id":"2814","name":"鄠邑区","code":"610118","parentId":"2803"},{"id":"2815","name":"蓝田县","code":"610122","parentId":"2803"},{"id":"2816","name":"周至县","code":"610124","parentId":"2803"}]},{"id":"2817","name":"铜川市","code":"610200","parentId":"2802","children":[{"id":"2818","name":"王益区","code":"610202","parentId":"2817"},{"id":"2819","name":"印台区","code":"610203","parentId":"2817"},{"id":"2820","name":"耀州区","code":"610204","parentId":"2817"},{"id":"2821","name":"宜君县","code":"610222","parentId":"2817"}]},{"id":"2822","name":"宝鸡市","code":"610300","parentId":"2802","children":[{"id":"2823","name":"渭滨区","code":"610302","parentId":"2822"},{"id":"2824","name":"金台区","code":"610303","parentId":"2822"},{"id":"2825","name":"陈仓区","code":"610304","parentId":"2822"},{"id":"2826","name":"凤翔县","code":"610322","parentId":"2822"},{"id":"2827","name":"岐山县","code":"610323","parentId":"2822"},{"id":"2828","name":"扶风县","code":"610324","parentId":"2822"},{"id":"2829","name":"眉县","code":"610326","parentId":"2822"},{"id":"2830","name":"陇县","code":"610327","parentId":"2822"},{"id":"2831","name":"千阳县","code":"610328","parentId":"2822"},{"id":"2832","name":"麟游县","code":"610329","parentId":"2822"},{"id":"2833","name":"凤县","code":"610330","parentId":"2822"},{"id":"2834","name":"太白县","code":"610331","parentId":"2822"}]},{"id":"2835","name":"咸阳市","code":"610400","parentId":"2802","children":[{"id":"2836","name":"秦都区","code":"610402","parentId":"2835"},{"id":"2837","name":"杨陵区","code":"610403","parentId":"2835"},{"id":"2838","name":"渭城区","code":"610404","parentId":"2835"},{"id":"2839","name":"三原县","code":"610422","parentId":"2835"},{"id":"2840","name":"泾阳县","code":"610423","parentId":"2835"},{"id":"2841","name":"乾县","code":"610424","parentId":"2835"},{"id":"2842","name":"礼泉县","code":"610425","parentId":"2835"},{"id":"2843","name":"永寿县","code":"610426","parentId":"2835"},{"id":"2844","name":"彬县","code":"610427","parentId":"2835"},{"id":"2845","name":"长武县","code":"610428","parentId":"2835"},{"id":"2846","name":"旬邑县","code":"610429","parentId":"2835"},{"id":"2847","name":"淳化县","code":"610430","parentId":"2835"},{"id":"2848","name":"武功县","code":"610431","parentId":"2835"},{"id":"2849","name":"兴平市","code":"610481","parentId":"2835"}]},{"id":"2850","name":"渭南市","code":"610500","parentId":"2802","children":[{"id":"2851","name":"临渭区","code":"610502","parentId":"2850"},{"id":"2852","name":"华州区","code":"610503","parentId":"2850"},{"id":"2853","name":"潼关县","code":"610522","parentId":"2850"},{"id":"2854","name":"大荔县","code":"610523","parentId":"2850"},{"id":"2855","name":"合阳县","code":"610524","parentId":"2850"},{"id":"2856","name":"澄城县","code":"610525","parentId":"2850"},{"id":"2857","name":"蒲城县","code":"610526","parentId":"2850"},{"id":"2858","name":"白水县","code":"610527","parentId":"2850"},{"id":"2859","name":"富平县","code":"610528","parentId":"2850"},{"id":"2860","name":"韩城市","code":"610581","parentId":"2850"},{"id":"2861","name":"华阴市","code":"610582","parentId":"2850"}]},{"id":"2862","name":"延安市","code":"610600","parentId":"2802","children":[{"id":"2863","name":"宝塔区","code":"610602","parentId":"2862"},{"id":"2864","name":"安塞区","code":"610603","parentId":"2862"},{"id":"2865","name":"延长县","code":"610621","parentId":"2862"},{"id":"2866","name":"延川县","code":"610622","parentId":"2862"},{"id":"2867","name":"子长县","code":"610623","parentId":"2862"},{"id":"2868","name":"志丹县","code":"610625","parentId":"2862"},{"id":"2869","name":"吴起县","code":"610626","parentId":"2862"},{"id":"2870","name":"甘泉县","code":"610627","parentId":"2862"},{"id":"2871","name":"富县","code":"610628","parentId":"2862"},{"id":"2872","name":"洛川县","code":"610629","parentId":"2862"},{"id":"2873","name":"宜川县","code":"610630","parentId":"2862"},{"id":"2874","name":"黄龙县","code":"610631","parentId":"2862"},{"id":"2875","name":"黄陵县","code":"610632","parentId":"2862"}]},{"id":"2876","name":"汉中市","code":"610700","parentId":"2802","children":[{"id":"2877","name":"汉台区","code":"610702","parentId":"2876"},{"id":"2878","name":"南郑区","code":"610703","parentId":"2876"},{"id":"2879","name":"城固县","code":"610722","parentId":"2876"},{"id":"2880","name":"洋县","code":"610723","parentId":"2876"},{"id":"2881","name":"西乡县","code":"610724","parentId":"2876"},{"id":"2882","name":"勉县","code":"610725","parentId":"2876"},{"id":"2883","name":"宁强县","code":"610726","parentId":"2876"},{"id":"2884","name":"略阳县","code":"610727","parentId":"2876"},{"id":"2885","name":"镇巴县","code":"610728","parentId":"2876"},{"id":"2886","name":"留坝县","code":"610729","parentId":"2876"},{"id":"2887","name":"佛坪县","code":"610730","parentId":"2876"}]},{"id":"2888","name":"榆林市","code":"610800","parentId":"2802","children":[{"id":"2889","name":"榆阳区","code":"610802","parentId":"2888"},{"id":"2890","name":"横山区","code":"610803","parentId":"2888"},{"id":"2891","name":"府谷县","code":"610822","parentId":"2888"},{"id":"2892","name":"靖边县","code":"610824","parentId":"2888"},{"id":"2893","name":"定边县","code":"610825","parentId":"2888"},{"id":"2894","name":"绥德县","code":"610826","parentId":"2888"},{"id":"2895","name":"米脂县","code":"610827","parentId":"2888"},{"id":"2896","name":"佳县","code":"610828","parentId":"2888"},{"id":"2897","name":"吴堡县","code":"610829","parentId":"2888"},{"id":"2898","name":"清涧县","code":"610830","parentId":"2888"},{"id":"2899","name":"子洲县","code":"610831","parentId":"2888"},{"id":"2900","name":"神木市","code":"610881","parentId":"2888"}]},{"id":"2901","name":"安康市","code":"610900","parentId":"2802","children":[{"id":"2902","name":"汉滨区","code":"610902","parentId":"2901"},{"id":"2903","name":"汉阴县","code":"610921","parentId":"2901"},{"id":"2904","name":"石泉县","code":"610922","parentId":"2901"},{"id":"2905","name":"宁陕县","code":"610923","parentId":"2901"},{"id":"2906","name":"紫阳县","code":"610924","parentId":"2901"},{"id":"2907","name":"岚皋县","code":"610925","parentId":"2901"},{"id":"2908","name":"平利县","code":"610926","parentId":"2901"},{"id":"2909","name":"镇坪县","code":"610927","parentId":"2901"},{"id":"2910","name":"旬阳县","code":"610928","parentId":"2901"},{"id":"2911","name":"白河县","code":"610929","parentId":"2901"}]},{"id":"2912","name":"商洛市","code":"611000","parentId":"2802","children":[{"id":"2913","name":"商州区","code":"611002","parentId":"2912"},{"id":"2914","name":"洛南县","code":"611021","parentId":"2912"},{"id":"2915","name":"丹凤县","code":"611022","parentId":"2912"},{"id":"2916","name":"商南县","code":"611023","parentId":"2912"},{"id":"2917","name":"山阳县","code":"611024","parentId":"2912"},{"id":"2918","name":"镇安县","code":"611025","parentId":"2912"},{"id":"2919","name":"柞水县","code":"611026","parentId":"2912"}]}]},{"id":"2920","name":"甘肃省","code":"620000","parentId":"0","children":[{"id":"2921","name":"兰州市","code":"620100","parentId":"2920","children":[{"id":"2922","name":"城关区","code":"620102","parentId":"2921"},{"id":"2923","name":"七里河区","code":"620103","parentId":"2921"},{"id":"2924","name":"西固区","code":"620104","parentId":"2921"},{"id":"2925","name":"安宁区","code":"620105","parentId":"2921"},{"id":"2926","name":"红古区","code":"620111","parentId":"2921"},{"id":"2927","name":"永登县","code":"620121","parentId":"2921"},{"id":"2928","name":"皋兰县","code":"620122","parentId":"2921"},{"id":"2929","name":"榆中县","code":"620123","parentId":"2921"}]},{"id":"2930","name":"嘉峪关市","code":"620200","parentId":"2920","children":[{"id":"3470","name":"辖区","code":"-1","parentId":"2930"}]},{"id":"2931","name":"金昌市","code":"620300","parentId":"2920","children":[{"id":"2932","name":"金川区","code":"620302","parentId":"2931"},{"id":"2933","name":"永昌县","code":"620321","parentId":"2931"}]},{"id":"2934","name":"白银市","code":"620400","parentId":"2920","children":[{"id":"2935","name":"白银区","code":"620402","parentId":"2934"},{"id":"2936","name":"平川区","code":"620403","parentId":"2934"},{"id":"2937","name":"靖远县","code":"620421","parentId":"2934"},{"id":"2938","name":"会宁县","code":"620422","parentId":"2934"},{"id":"2939","name":"景泰县","code":"620423","parentId":"2934"}]},{"id":"2940","name":"天水市","code":"620500","parentId":"2920","children":[{"id":"2941","name":"秦州区","code":"620502","parentId":"2940"},{"id":"2942","name":"麦积区","code":"620503","parentId":"2940"},{"id":"2943","name":"清水县","code":"620521","parentId":"2940"},{"id":"2944","name":"秦安县","code":"620522","parentId":"2940"},{"id":"2945","name":"甘谷县","code":"620523","parentId":"2940"},{"id":"2946","name":"武山县","code":"620524","parentId":"2940"},{"id":"2947","name":"张家川回族自治县","code":"620525","parentId":"2940"}]},{"id":"2948","name":"武威市","code":"620600","parentId":"2920","children":[{"id":"2949","name":"凉州区","code":"620602","parentId":"2948"},{"id":"2950","name":"民勤县","code":"620621","parentId":"2948"},{"id":"2951","name":"古浪县","code":"620622","parentId":"2948"},{"id":"2952","name":"天祝藏族自治县","code":"620623","parentId":"2948"}]},{"id":"2953","name":"张掖市","code":"620700","parentId":"2920","children":[{"id":"2954","name":"甘州区","code":"620702","parentId":"2953"},{"id":"2955","name":"肃南裕固族自治县","code":"620721","parentId":"2953"},{"id":"2956","name":"民乐县","code":"620722","parentId":"2953"},{"id":"2957","name":"临泽县","code":"620723","parentId":"2953"},{"id":"2958","name":"高台县","code":"620724","parentId":"2953"},{"id":"2959","name":"山丹县","code":"620725","parentId":"2953"}]},{"id":"2960","name":"平凉市","code":"620800","parentId":"2920","children":[{"id":"2961","name":"崆峒区","code":"620802","parentId":"2960"},{"id":"2962","name":"泾川县","code":"620821","parentId":"2960"},{"id":"2963","name":"灵台县","code":"620822","parentId":"2960"},{"id":"2964","name":"崇信县","code":"620823","parentId":"2960"},{"id":"2965","name":"华亭县","code":"620824","parentId":"2960"},{"id":"2966","name":"庄浪县","code":"620825","parentId":"2960"},{"id":"2967","name":"静宁县","code":"620826","parentId":"2960"}]},{"id":"2968","name":"酒泉市","code":"620900","parentId":"2920","children":[{"id":"2969","name":"肃州区","code":"620902","parentId":"2968"},{"id":"2970","name":"金塔县","code":"620921","parentId":"2968"},{"id":"2971","name":"瓜州县","code":"620922","parentId":"2968"},{"id":"2972","name":"肃北蒙古族自治县","code":"620923","parentId":"2968"},{"id":"2973","name":"阿克塞哈萨克族自治县","code":"620924","parentId":"2968"},{"id":"2974","name":"玉门市","code":"620981","parentId":"2968"},{"id":"2975","name":"敦煌市","code":"620982","parentId":"2968"}]},{"id":"2976","name":"庆阳市","code":"621000","parentId":"2920","children":[{"id":"2977","name":"西峰区","code":"621002","parentId":"2976"},{"id":"2978","name":"庆城县","code":"621021","parentId":"2976"},{"id":"2979","name":"环县","code":"621022","parentId":"2976"},{"id":"2980","name":"华池县","code":"621023","parentId":"2976"},{"id":"2981","name":"合水县","code":"621024","parentId":"2976"},{"id":"2982","name":"正宁县","code":"621025","parentId":"2976"},{"id":"2983","name":"宁县","code":"621026","parentId":"2976"},{"id":"2984","name":"镇原县","code":"621027","parentId":"2976"}]},{"id":"2985","name":"定西市","code":"621100","parentId":"2920","children":[{"id":"2986","name":"安定区","code":"621102","parentId":"2985"},{"id":"2987","name":"通渭县","code":"621121","parentId":"2985"},{"id":"2988","name":"陇西县","code":"621122","parentId":"2985"},{"id":"2989","name":"渭源县","code":"621123","parentId":"2985"},{"id":"2990","name":"临洮县","code":"621124","parentId":"2985"},{"id":"2991","name":"漳县","code":"621125","parentId":"2985"},{"id":"2992","name":"岷县","code":"621126","parentId":"2985"}]},{"id":"2993","name":"陇南市","code":"621200","parentId":"2920","children":[{"id":"2994","name":"武都区","code":"621202","parentId":"2993"},{"id":"2995","name":"成县","code":"621221","parentId":"2993"},{"id":"2996","name":"文县","code":"621222","parentId":"2993"},{"id":"2997","name":"宕昌县","code":"621223","parentId":"2993"},{"id":"2998","name":"康县","code":"621224","parentId":"2993"},{"id":"2999","name":"西和县","code":"621225","parentId":"2993"},{"id":"3000","name":"礼县","code":"621226","parentId":"2993"},{"id":"3001","name":"徽县","code":"621227","parentId":"2993"},{"id":"3002","name":"两当县","code":"621228","parentId":"2993"}]},{"id":"3003","name":"临夏回族自治州","code":"622900","parentId":"2920","children":[{"id":"3004","name":"临夏市","code":"622901","parentId":"3003"},{"id":"3005","name":"临夏县","code":"622921","parentId":"3003"},{"id":"3006","name":"康乐县","code":"622922","parentId":"3003"},{"id":"3007","name":"永靖县","code":"622923","parentId":"3003"},{"id":"3008","name":"广河县","code":"622924","parentId":"3003"},{"id":"3009","name":"和政县","code":"622925","parentId":"3003"},{"id":"3010","name":"东乡族自治县","code":"622926","parentId":"3003"},{"id":"3011","name":"积石山保安族东乡族撒拉族自治县","code":"622927","parentId":"3003"}]},{"id":"3012","name":"甘南藏族自治州","code":"623000","parentId":"2920","children":[{"id":"3013","name":"合作市","code":"623001","parentId":"3012"},{"id":"3014","name":"临潭县","code":"623021","parentId":"3012"},{"id":"3015","name":"卓尼县","code":"623022","parentId":"3012"},{"id":"3016","name":"舟曲县","code":"623023","parentId":"3012"},{"id":"3017","name":"迭部县","code":"623024","parentId":"3012"},{"id":"3018","name":"玛曲县","code":"623025","parentId":"3012"},{"id":"3019","name":"碌曲县","code":"623026","parentId":"3012"},{"id":"3020","name":"夏河县","code":"623027","parentId":"3012"}]}]},{"id":"3021","name":"青海省","code":"630000","parentId":"0","children":[{"id":"3022","name":"西宁市","code":"630100","parentId":"3021","children":[{"id":"3023","name":"城东区","code":"630102","parentId":"3022"},{"id":"3024","name":"城中区","code":"630103","parentId":"3022"},{"id":"3025","name":"城西区","code":"630104","parentId":"3022"},{"id":"3026","name":"城北区","code":"630105","parentId":"3022"},{"id":"3027","name":"大通回族土族自治县","code":"630121","parentId":"3022"},{"id":"3028","name":"湟中县","code":"630122","parentId":"3022"},{"id":"3029","name":"湟源县","code":"630123","parentId":"3022"}]},{"id":"3030","name":"海东市","code":"630200","parentId":"3021","children":[{"id":"3031","name":"乐都区","code":"630202","parentId":"3030"},{"id":"3032","name":"平安区","code":"630203","parentId":"3030"},{"id":"3033","name":"民和回族土族自治县","code":"630222","parentId":"3030"},{"id":"3034","name":"互助土族自治县","code":"630223","parentId":"3030"},{"id":"3035","name":"化隆回族自治县","code":"630224","parentId":"3030"},{"id":"3036","name":"循化撒拉族自治县","code":"630225","parentId":"3030"}]},{"id":"3037","name":"海北藏族自治州","code":"632200","parentId":"3021","children":[{"id":"3038","name":"门源回族自治县","code":"632221","parentId":"3037"},{"id":"3039","name":"祁连县","code":"632222","parentId":"3037"},{"id":"3040","name":"海晏县","code":"632223","parentId":"3037"},{"id":"3041","name":"刚察县","code":"632224","parentId":"3037"}]},{"id":"3042","name":"黄南藏族自治州","code":"632300","parentId":"3021","children":[{"id":"3043","name":"同仁县","code":"632321","parentId":"3042"},{"id":"3044","name":"尖扎县","code":"632322","parentId":"3042"},{"id":"3045","name":"泽库县","code":"632323","parentId":"3042"},{"id":"3046","name":"河南蒙古族自治县","code":"632324","parentId":"3042"}]},{"id":"3047","name":"海南藏族自治州","code":"632500","parentId":"3021","children":[{"id":"3048","name":"共和县","code":"632521","parentId":"3047"},{"id":"3049","name":"同德县","code":"632522","parentId":"3047"},{"id":"3050","name":"贵德县","code":"632523","parentId":"3047"},{"id":"3051","name":"兴海县","code":"632524","parentId":"3047"},{"id":"3052","name":"贵南县","code":"632525","parentId":"3047"}]},{"id":"3053","name":"果洛藏族自治州","code":"632600","parentId":"3021","children":[{"id":"3054","name":"玛沁县","code":"632621","parentId":"3053"},{"id":"3055","name":"班玛县","code":"632622","parentId":"3053"},{"id":"3056","name":"甘德县","code":"632623","parentId":"3053"},{"id":"3057","name":"达日县","code":"632624","parentId":"3053"},{"id":"3058","name":"久治县","code":"632625","parentId":"3053"},{"id":"3059","name":"玛多县","code":"632626","parentId":"3053"}]},{"id":"3060","name":"玉树藏族自治州","code":"632700","parentId":"3021","children":[{"id":"3061","name":"玉树市","code":"632701","parentId":"3060"},{"id":"3062","name":"杂多县","code":"632722","parentId":"3060"},{"id":"3063","name":"称多县","code":"632723","parentId":"3060"},{"id":"3064","name":"治多县","code":"632724","parentId":"3060"},{"id":"3065","name":"囊谦县","code":"632725","parentId":"3060"},{"id":"3066","name":"曲麻莱县","code":"632726","parentId":"3060"}]},{"id":"3067","name":"海西蒙古族藏族自治州","code":"632800","parentId":"3021","children":[{"id":"3068","name":"格尔木市","code":"632801","parentId":"3067"},{"id":"3069","name":"德令哈市","code":"632802","parentId":"3067"},{"id":"3070","name":"乌兰县","code":"632821","parentId":"3067"},{"id":"3071","name":"都兰县","code":"632822","parentId":"3067"},{"id":"3072","name":"天峻县","code":"632823","parentId":"3067"}]}]},{"id":"3073","name":"宁夏回族自治区","code":"640000","parentId":"0","children":[{"id":"3074","name":"银川市","code":"640100","parentId":"3073","children":[{"id":"3075","name":"兴庆区","code":"640104","parentId":"3074"},{"id":"3076","name":"西夏区","code":"640105","parentId":"3074"},{"id":"3077","name":"金凤区","code":"640106","parentId":"3074"},{"id":"3078","name":"永宁县","code":"640121","parentId":"3074"},{"id":"3079","name":"贺兰县","code":"640122","parentId":"3074"},{"id":"3080","name":"灵武市","code":"640181","parentId":"3074"}]},{"id":"3081","name":"石嘴山市","code":"640200","parentId":"3073","children":[{"id":"3082","name":"大武口区","code":"640202","parentId":"3081"},{"id":"3083","name":"惠农区","code":"640205","parentId":"3081"},{"id":"3084","name":"平罗县","code":"640221","parentId":"3081"}]},{"id":"3085","name":"吴忠市","code":"640300","parentId":"3073","children":[{"id":"3086","name":"利通区","code":"640302","parentId":"3085"},{"id":"3087","name":"红寺堡区","code":"640303","parentId":"3085"},{"id":"3088","name":"盐池县","code":"640323","parentId":"3085"},{"id":"3089","name":"同心县","code":"640324","parentId":"3085"},{"id":"3090","name":"青铜峡市","code":"640381","parentId":"3085"}]},{"id":"3091","name":"固原市","code":"640400","parentId":"3073","children":[{"id":"3092","name":"原州区","code":"640402","parentId":"3091"},{"id":"3093","name":"西吉县","code":"640422","parentId":"3091"},{"id":"3094","name":"隆德县","code":"640423","parentId":"3091"},{"id":"3095","name":"泾源县","code":"640424","parentId":"3091"},{"id":"3096","name":"彭阳县","code":"640425","parentId":"3091"}]},{"id":"3097","name":"中卫市","code":"640500","parentId":"3073","children":[{"id":"3098","name":"沙坡头区","code":"640502","parentId":"3097"},{"id":"3099","name":"中宁县","code":"640521","parentId":"3097"},{"id":"3100","name":"海原县","code":"640522","parentId":"3097"}]}]},{"id":"3101","name":"新疆维吾尔自治区","code":"650000","parentId":"0","children":[{"id":"3102","name":"乌鲁木齐市","code":"650100","parentId":"3101","children":[{"id":"3103","name":"天山区","code":"650102","parentId":"3102"},{"id":"3104","name":"沙依巴克区","code":"650103","parentId":"3102"},{"id":"3105","name":"新市区","code":"650104","parentId":"3102"},{"id":"3106","name":"水磨沟区","code":"650105","parentId":"3102"},{"id":"3107","name":"头屯河区","code":"650106","parentId":"3102"},{"id":"3108","name":"达坂城区","code":"650107","parentId":"3102"},{"id":"3109","name":"米东区","code":"650109","parentId":"3102"},{"id":"3110","name":"乌鲁木齐县","code":"650121","parentId":"3102"}]},{"id":"3111","name":"克拉玛依市","code":"650200","parentId":"3101","children":[{"id":"3112","name":"独山子区","code":"650202","parentId":"3111"},{"id":"3113","name":"克拉玛依区","code":"650203","parentId":"3111"},{"id":"3114","name":"白碱滩区","code":"650204","parentId":"3111"},{"id":"3115","name":"乌尔禾区","code":"650205","parentId":"3111"}]},{"id":"3116","name":"吐鲁番市","code":"650400","parentId":"3101","children":[{"id":"3117","name":"高昌区","code":"650402","parentId":"3116"},{"id":"3118","name":"鄯善县","code":"650421","parentId":"3116"},{"id":"3119","name":"托克逊县","code":"650422","parentId":"3116"}]},{"id":"3120","name":"哈密市","code":"650500","parentId":"3101","children":[{"id":"3121","name":"伊州区","code":"650502","parentId":"3120"},{"id":"3122","name":"巴里坤哈萨克自治县","code":"650521","parentId":"3120"},{"id":"3123","name":"伊吾县","code":"650522","parentId":"3120"}]},{"id":"3124","name":"昌吉回族自治州","code":"652300","parentId":"3101","children":[{"id":"3125","name":"昌吉市","code":"652301","parentId":"3124"},{"id":"3126","name":"阜康市","code":"652302","parentId":"3124"},{"id":"3127","name":"呼图壁县","code":"652323","parentId":"3124"},{"id":"3128","name":"玛纳斯县","code":"652324","parentId":"3124"},{"id":"3129","name":"奇台县","code":"652325","parentId":"3124"},{"id":"3130","name":"吉木萨尔县","code":"652327","parentId":"3124"},{"id":"3131","name":"木垒哈萨克自治县","code":"652328","parentId":"3124"}]},{"id":"3132","name":"博尔塔拉蒙古自治州","code":"652700","parentId":"3101","children":[{"id":"3133","name":"博乐市","code":"652701","parentId":"3132"},{"id":"3134","name":"阿拉山口市","code":"652702","parentId":"3132"},{"id":"3135","name":"精河县","code":"652722","parentId":"3132"},{"id":"3136","name":"温泉县","code":"652723","parentId":"3132"}]},{"id":"3137","name":"巴音郭楞蒙古自治州","code":"652800","parentId":"3101","children":[{"id":"3138","name":"库尔勒市","code":"652801","parentId":"3137"},{"id":"3139","name":"轮台县","code":"652822","parentId":"3137"},{"id":"3140","name":"尉犁县","code":"652823","parentId":"3137"},{"id":"3141","name":"若羌县","code":"652824","parentId":"3137"},{"id":"3142","name":"且末县","code":"652825","parentId":"3137"},{"id":"3143","name":"焉耆回族自治县","code":"652826","parentId":"3137"},{"id":"3144","name":"和静县","code":"652827","parentId":"3137"},{"id":"3145","name":"和硕县","code":"652828","parentId":"3137"},{"id":"3146","name":"博湖县","code":"652829","parentId":"3137"}]},{"id":"3147","name":"阿克苏地区","code":"652900","parentId":"3101","children":[{"id":"3148","name":"阿克苏市","code":"652901","parentId":"3147"},{"id":"3149","name":"温宿县","code":"652922","parentId":"3147"},{"id":"3150","name":"库车县","code":"652923","parentId":"3147"},{"id":"3151","name":"沙雅县","code":"652924","parentId":"3147"},{"id":"3152","name":"新和县","code":"652925","parentId":"3147"},{"id":"3153","name":"拜城县","code":"652926","parentId":"3147"},{"id":"3154","name":"乌什县","code":"652927","parentId":"3147"},{"id":"3155","name":"阿瓦提县","code":"652928","parentId":"3147"},{"id":"3156","name":"柯坪县","code":"652929","parentId":"3147"}]},{"id":"3157","name":"克孜勒苏柯尔克孜自治州","code":"653000","parentId":"3101","children":[{"id":"3158","name":"阿图什市","code":"653001","parentId":"3157"},{"id":"3159","name":"阿克陶县","code":"653022","parentId":"3157"},{"id":"3160","name":"阿合奇县","code":"653023","parentId":"3157"},{"id":"3161","name":"乌恰县","code":"653024","parentId":"3157"}]},{"id":"3162","name":"喀什地区","code":"653100","parentId":"3101","children":[{"id":"3163","name":"喀什市","code":"653101","parentId":"3162"},{"id":"3164","name":"疏附县","code":"653121","parentId":"3162"},{"id":"3165","name":"疏勒县","code":"653122","parentId":"3162"},{"id":"3166","name":"英吉沙县","code":"653123","parentId":"3162"},{"id":"3167","name":"泽普县","code":"653124","parentId":"3162"},{"id":"3168","name":"莎车县","code":"653125","parentId":"3162"},{"id":"3169","name":"叶城县","code":"653126","parentId":"3162"},{"id":"3170","name":"麦盖提县","code":"653127","parentId":"3162"},{"id":"3171","name":"岳普湖县","code":"653128","parentId":"3162"},{"id":"3172","name":"伽师县","code":"653129","parentId":"3162"},{"id":"3173","name":"巴楚县","code":"653130","parentId":"3162"},{"id":"3174","name":"塔什库尔干塔吉克自治县","code":"653131","parentId":"3162"}]},{"id":"3175","name":"和田地区","code":"653200","parentId":"3101","children":[{"id":"3176","name":"和田市","code":"653201","parentId":"3175"},{"id":"3177","name":"和田县","code":"653221","parentId":"3175"},{"id":"3178","name":"墨玉县","code":"653222","parentId":"3175"},{"id":"3179","name":"皮山县","code":"653223","parentId":"3175"},{"id":"3180","name":"洛浦县","code":"653224","parentId":"3175"},{"id":"3181","name":"策勒县","code":"653225","parentId":"3175"},{"id":"3182","name":"于田县","code":"653226","parentId":"3175"},{"id":"3183","name":"民丰县","code":"653227","parentId":"3175"}]},{"id":"3184","name":"伊犁哈萨克自治州","code":"654000","parentId":"3101","children":[{"id":"3185","name":"伊宁市","code":"654002","parentId":"3184"},{"id":"3186","name":"奎屯市","code":"654003","parentId":"3184"},{"id":"3187","name":"霍尔果斯市","code":"654004","parentId":"3184"},{"id":"3188","name":"伊宁县","code":"654021","parentId":"3184"},{"id":"3189","name":"察布查尔锡伯自治县","code":"654022","parentId":"3184"},{"id":"3190","name":"霍城县","code":"654023","parentId":"3184"},{"id":"3191","name":"巩留县","code":"654024","parentId":"3184"},{"id":"3192","name":"新源县","code":"654025","parentId":"3184"},{"id":"3193","name":"昭苏县","code":"654026","parentId":"3184"},{"id":"3194","name":"特克斯县","code":"654027","parentId":"3184"},{"id":"3195","name":"尼勒克县","code":"654028","parentId":"3184"}]},{"id":"3196","name":"塔城地区","code":"654200","parentId":"3101","children":[{"id":"3197","name":"塔城市","code":"654201","parentId":"3196"},{"id":"3198","name":"乌苏市","code":"654202","parentId":"3196"},{"id":"3199","name":"额敏县","code":"654221","parentId":"3196"},{"id":"3200","name":"沙湾县","code":"654223","parentId":"3196"},{"id":"3201","name":"托里县","code":"654224","parentId":"3196"},{"id":"3202","name":"裕民县","code":"654225","parentId":"3196"},{"id":"3203","name":"和布克赛尔蒙古自治县","code":"654226","parentId":"3196"}]},{"id":"3204","name":"阿勒泰地区","code":"654300","parentId":"3101","children":[{"id":"3205","name":"阿勒泰市","code":"654301","parentId":"3204"},{"id":"3206","name":"布尔津县","code":"654321","parentId":"3204"},{"id":"3207","name":"富蕴县","code":"654322","parentId":"3204"},{"id":"3208","name":"福海县","code":"654323","parentId":"3204"},{"id":"3209","name":"哈巴河县","code":"654324","parentId":"3204"},{"id":"3210","name":"青河县","code":"654325","parentId":"3204"},{"id":"3211","name":"吉木乃县","code":"654326","parentId":"3204"}]},{"id":"3212","name":"石河子市","code":"659001","parentId":"3101","children":[{"id":"3472","name":"辖区","code":"-1","parentId":"3212"}]},{"id":"3213","name":"阿拉尔市","code":"659002","parentId":"3101","children":[{"id":"3474","name":"辖区","code":"-1","parentId":"3213"}]},{"id":"3214","name":"图木舒克市","code":"659003","parentId":"3101","children":[{"id":"3476","name":"辖区","code":"-1","parentId":"3214"}]},{"id":"3215","name":"五家渠市","code":"659004","parentId":"3101","children":[{"id":"3478","name":"辖区","code":"-1","parentId":"3215"}]},{"id":"3216","name":"北屯市","code":"659005","parentId":"3101","children":[{"id":"3480","name":"辖区","code":"-1","parentId":"3216"}]},{"id":"3217","name":"铁门关市","code":"659006","parentId":"3101","children":[{"id":"3482","name":"辖区","code":"-1","parentId":"3217"}]},{"id":"3218","name":"双河市","code":"659007","parentId":"3101","children":[{"id":"3484","name":"辖区","code":"-1","parentId":"3218"}]},{"id":"3219","name":"可克达拉市","code":"659008","parentId":"3101","children":[{"id":"3486","name":"辖区","code":"-1","parentId":"3219"}]},{"id":"3220","name":"昆玉市","code":"659009","parentId":"3101","children":[{"id":"3488","name":"辖区","code":"-1","parentId":"3220"}]}]},{"id":"3221","name":"台湾省","code":"710000","parentId":"0","children":[{"id":"3222","name":"台北市","code":"710100","parentId":"3221","children":[{"id":"3223","name":"中正区","code":"710101","parentId":"3222"},{"id":"3224","name":"大同区","code":"710102","parentId":"3222"},{"id":"3225","name":"中山区","code":"710103","parentId":"3222"},{"id":"3226","name":"万华区","code":"710104","parentId":"3222"},{"id":"3227","name":"信义区","code":"710105","parentId":"3222"},{"id":"3228","name":"松山区","code":"710106","parentId":"3222"},{"id":"3229","name":"大安区","code":"710107","parentId":"3222"},{"id":"3230","name":"南港区","code":"710108","parentId":"3222"},{"id":"3231","name":"北投区","code":"710109","parentId":"3222"},{"id":"3232","name":"内湖区","code":"710110","parentId":"3222"},{"id":"3233","name":"士林区","code":"710111","parentId":"3222"},{"id":"3234","name":"文山区","code":"710112","parentId":"3222"}]},{"id":"3235","name":"新北市","code":"710200","parentId":"3221","children":[{"id":"3236","name":"板桥区","code":"710201","parentId":"3235"},{"id":"3237","name":"土城区","code":"710202","parentId":"3235"},{"id":"3238","name":"新庄区","code":"710203","parentId":"3235"},{"id":"3239","name":"新店区","code":"710204","parentId":"3235"},{"id":"3240","name":"深坑区","code":"710205","parentId":"3235"},{"id":"3241","name":"石碇区","code":"710206","parentId":"3235"},{"id":"3242","name":"坪林区","code":"710207","parentId":"3235"},{"id":"3243","name":"乌来区","code":"710208","parentId":"3235"},{"id":"3244","name":"五股区","code":"710209","parentId":"3235"},{"id":"3245","name":"八里区","code":"710210","parentId":"3235"},{"id":"3246","name":"林口区","code":"710211","parentId":"3235"},{"id":"3247","name":"淡水区","code":"710212","parentId":"3235"},{"id":"3248","name":"中和区","code":"710213","parentId":"3235"},{"id":"3249","name":"永和区","code":"710214","parentId":"3235"},{"id":"3250","name":"三重区","code":"710215","parentId":"3235"},{"id":"3251","name":"芦洲区","code":"710216","parentId":"3235"},{"id":"3252","name":"泰山区","code":"710217","parentId":"3235"},{"id":"3253","name":"树林区","code":"710218","parentId":"3235"},{"id":"3254","name":"莺歌区","code":"710219","parentId":"3235"},{"id":"3255","name":"三峡区","code":"710220","parentId":"3235"},{"id":"3256","name":"汐止区","code":"710221","parentId":"3235"},{"id":"3257","name":"金山区","code":"710222","parentId":"3235"},{"id":"3258","name":"万里区","code":"710223","parentId":"3235"},{"id":"3259","name":"三芝区","code":"710224","parentId":"3235"},{"id":"3260","name":"石门区","code":"710225","parentId":"3235"},{"id":"3261","name":"瑞芳区","code":"710226","parentId":"3235"},{"id":"3262","name":"贡寮区","code":"710227","parentId":"3235"},{"id":"3263","name":"双溪区","code":"710228","parentId":"3235"},{"id":"3264","name":"平溪区","code":"710229","parentId":"3235"}]},{"id":"3265","name":"桃园市","code":"710300","parentId":"3221","children":[{"id":"3266","name":"桃园区","code":"710301","parentId":"3265"},{"id":"3267","name":"中坜区","code":"710302","parentId":"3265"},{"id":"3268","name":"平镇区","code":"710303","parentId":"3265"},{"id":"3269","name":"八德区","code":"710304","parentId":"3265"},{"id":"3270","name":"杨梅区","code":"710305","parentId":"3265"},{"id":"3271","name":"芦竹区","code":"710306","parentId":"3265"},{"id":"3272","name":"大溪区","code":"710307","parentId":"3265"},{"id":"3273","name":"龙潭区","code":"710308","parentId":"3265"},{"id":"3274","name":"龟山区","code":"710309","parentId":"3265"},{"id":"3275","name":"大园区","code":"710310","parentId":"3265"},{"id":"3276","name":"观音区","code":"710311","parentId":"3265"},{"id":"3277","name":"新屋区","code":"710312","parentId":"3265"},{"id":"3278","name":"复兴区","code":"710313","parentId":"3265"}]},{"id":"3279","name":"台中市","code":"710400","parentId":"3221","children":[{"id":"3280","name":"中区","code":"710401","parentId":"3279"},{"id":"3281","name":"东区","code":"710402","parentId":"3279"},{"id":"3282","name":"西区","code":"710403","parentId":"3279"},{"id":"3283","name":"南区","code":"710404","parentId":"3279"},{"id":"3284","name":"北区","code":"710405","parentId":"3279"},{"id":"3285","name":"西屯区","code":"710406","parentId":"3279"},{"id":"3286","name":"南屯区","code":"710407","parentId":"3279"},{"id":"3287","name":"北屯区","code":"710408","parentId":"3279"},{"id":"3288","name":"丰原区","code":"710409","parentId":"3279"},{"id":"3289","name":"大里区","code":"710410","parentId":"3279"},{"id":"3290","name":"太平区","code":"710411","parentId":"3279"},{"id":"3291","name":"东势区","code":"710412","parentId":"3279"},{"id":"3292","name":"大甲区","code":"710413","parentId":"3279"},{"id":"3293","name":"清水区","code":"710414","parentId":"3279"},{"id":"3294","name":"沙鹿区","code":"710415","parentId":"3279"},{"id":"3295","name":"梧栖区","code":"710416","parentId":"3279"},{"id":"3296","name":"后里区","code":"710417","parentId":"3279"},{"id":"3297","name":"神冈区","code":"710418","parentId":"3279"},{"id":"3298","name":"潭子区","code":"710419","parentId":"3279"},{"id":"3299","name":"大雅区","code":"710420","parentId":"3279"},{"id":"3300","name":"新小区","code":"710421","parentId":"3279"},{"id":"3301","name":"石冈区","code":"710422","parentId":"3279"},{"id":"3302","name":"外埔区","code":"710423","parentId":"3279"},{"id":"3303","name":"大安区","code":"710424","parentId":"3279"},{"id":"3304","name":"乌日区","code":"710425","parentId":"3279"},{"id":"3305","name":"大肚区","code":"710426","parentId":"3279"},{"id":"3306","name":"龙井区","code":"710427","parentId":"3279"},{"id":"3307","name":"雾峰区","code":"710428","parentId":"3279"},{"id":"3308","name":"和平区","code":"710429","parentId":"3279"}]},{"id":"3309","name":"台南市","code":"710500","parentId":"3221","children":[{"id":"3310","name":"中西区","code":"710501","parentId":"3309"},{"id":"3311","name":"东区","code":"710502","parentId":"3309"},{"id":"3312","name":"南区","code":"710503","parentId":"3309"},{"id":"3313","name":"北区","code":"710504","parentId":"3309"},{"id":"3314","name":"安平区","code":"710505","parentId":"3309"},{"id":"3315","name":"安南区","code":"710506","parentId":"3309"},{"id":"3316","name":"永康区","code":"710507","parentId":"3309"},{"id":"3317","name":"归仁区","code":"710508","parentId":"3309"},{"id":"3318","name":"新化区","code":"710509","parentId":"3309"},{"id":"3319","name":"左镇区","code":"710510","parentId":"3309"},{"id":"3320","name":"玉井区","code":"710511","parentId":"3309"},{"id":"3321","name":"楠西区","code":"710512","parentId":"3309"},{"id":"3322","name":"南化区","code":"710513","parentId":"3309"},{"id":"3323","name":"仁德区","code":"710514","parentId":"3309"},{"id":"3324","name":"关庙区","code":"710515","parentId":"3309"},{"id":"3325","name":"龙崎区","code":"710516","parentId":"3309"},{"id":"3326","name":"官田区","code":"710517","parentId":"3309"},{"id":"3327","name":"麻豆区","code":"710518","parentId":"3309"},{"id":"3328","name":"佳里区","code":"710519","parentId":"3309"},{"id":"3329","name":"西港区","code":"710520","parentId":"3309"},{"id":"3330","name":"七股区","code":"710521","parentId":"3309"},{"id":"3331","name":"将军区","code":"710522","parentId":"3309"},{"id":"3332","name":"学甲区","code":"710523","parentId":"3309"},{"id":"3333","name":"北门区","code":"710524","parentId":"3309"},{"id":"3334","name":"新营区","code":"710525","parentId":"3309"},{"id":"3335","name":"后壁区","code":"710526","parentId":"3309"},{"id":"3336","name":"白河区","code":"710527","parentId":"3309"},{"id":"3337","name":"东山区","code":"710528","parentId":"3309"},{"id":"3338","name":"六甲区","code":"710529","parentId":"3309"},{"id":"3339","name":"下营区","code":"710530","parentId":"3309"},{"id":"3340","name":"柳营区","code":"710531","parentId":"3309"},{"id":"3341","name":"盐水区","code":"710532","parentId":"3309"},{"id":"3342","name":"善化区","code":"710533","parentId":"3309"},{"id":"3343","name":"大内区","code":"710534","parentId":"3309"},{"id":"3344","name":"山上区","code":"710535","parentId":"3309"},{"id":"3345","name":"新市区","code":"710536","parentId":"3309"},{"id":"3346","name":"安定区","code":"710537","parentId":"3309"}]},{"id":"3347","name":"高雄市","code":"710600","parentId":"3221","children":[{"id":"3348","name":"楠梓区","code":"710601","parentId":"3347"},{"id":"3349","name":"左营区","code":"710602","parentId":"3347"},{"id":"3350","name":"鼓山区","code":"710603","parentId":"3347"},{"id":"3351","name":"三民区","code":"710604","parentId":"3347"},{"id":"3352","name":"盐埕区","code":"710605","parentId":"3347"},{"id":"3353","name":"前金区","code":"710606","parentId":"3347"},{"id":"3354","name":"新兴区","code":"710607","parentId":"3347"},{"id":"3355","name":"苓雅区","code":"710608","parentId":"3347"},{"id":"3356","name":"前镇区","code":"710609","parentId":"3347"},{"id":"3357","name":"旗津区","code":"710610","parentId":"3347"},{"id":"3358","name":"小港区","code":"710611","parentId":"3347"},{"id":"3359","name":"凤山区","code":"710612","parentId":"3347"},{"id":"3360","name":"大寮区","code":"710613","parentId":"3347"},{"id":"3361","name":"鸟松区","code":"710614","parentId":"3347"},{"id":"3362","name":"林园区","code":"710615","parentId":"3347"},{"id":"3363","name":"仁武区","code":"710616","parentId":"3347"},{"id":"3364","name":"大树区","code":"710617","parentId":"3347"},{"id":"3365","name":"大社区","code":"710618","parentId":"3347"},{"id":"3366","name":"冈山区","code":"710619","parentId":"3347"},{"id":"3367","name":"路竹区","code":"710620","parentId":"3347"},{"id":"3368","name":"桥头区","code":"710621","parentId":"3347"},{"id":"3369","name":"梓官区","code":"710622","parentId":"3347"},{"id":"3370","name":"弥陀区","code":"710623","parentId":"3347"},{"id":"3371","name":"永安区","code":"710624","parentId":"3347"},{"id":"3372","name":"燕巢区","code":"710625","parentId":"3347"},{"id":"3373","name":"阿莲区","code":"710626","parentId":"3347"},{"id":"3374","name":"茄萣区","code":"710627","parentId":"3347"},{"id":"3375","name":"湖内区","code":"710628","parentId":"3347"},{"id":"3376","name":"旗山区","code":"710629","parentId":"3347"},{"id":"3377","name":"美浓区","code":"710630","parentId":"3347"},{"id":"3378","name":"内门区","code":"710631","parentId":"3347"},{"id":"3379","name":"杉林区","code":"710632","parentId":"3347"},{"id":"3380","name":"甲仙区","code":"710633","parentId":"3347"},{"id":"3381","name":"六龟区","code":"710634","parentId":"3347"},{"id":"3382","name":"茂林区","code":"710635","parentId":"3347"},{"id":"3383","name":"桃源区","code":"710636","parentId":"3347"},{"id":"3384","name":"那玛夏区","code":"710637","parentId":"3347"}]},{"id":"3385","name":"基隆市","code":"710700","parentId":"3221","children":[{"id":"3386","name":"中正区","code":"710701","parentId":"3385"},{"id":"3387","name":"七堵区","code":"710702","parentId":"3385"},{"id":"3388","name":"暖暖区","code":"710703","parentId":"3385"},{"id":"3389","name":"仁爱区","code":"710704","parentId":"3385"},{"id":"3390","name":"中山区","code":"710705","parentId":"3385"},{"id":"3391","name":"安乐区","code":"710706","parentId":"3385"},{"id":"3392","name":"信义区","code":"710707","parentId":"3385"}]},{"id":"3393","name":"新竹市","code":"710800","parentId":"3221","children":[{"id":"3394","name":"东区","code":"710801","parentId":"3393"},{"id":"3395","name":"北区","code":"710802","parentId":"3393"},{"id":"3396","name":"香山区","code":"710803","parentId":"3393"}]},{"id":"3397","name":"嘉义市","code":"710900","parentId":"3221","children":[{"id":"3398","name":"东区","code":"710901","parentId":"3397"},{"id":"3399","name":"西区","code":"710902","parentId":"3397"}]},{"id":"3400","name":"宜兰县","code":"719001","parentId":"3221","children":[]},{"id":"3401","name":"新竹县","code":"719002","parentId":"3221","children":[]},{"id":"3402","name":"苗栗县","code":"719003","parentId":"3221","children":[]},{"id":"3403","name":"彰化县","code":"719004","parentId":"3221","children":[]},{"id":"3404","name":"南投县","code":"719005","parentId":"3221","children":[]},{"id":"3405","name":"嘉义县","code":"719006","parentId":"3221","children":[]},{"id":"3406","name":"云林县","code":"719007","parentId":"3221","children":[]},{"id":"3407","name":"屏东县","code":"719008","parentId":"3221","children":[]},{"id":"3408","name":"台东县","code":"719009","parentId":"3221","children":[]},{"id":"3409","name":"花莲县","code":"719010","parentId":"3221","children":[]},{"id":"3410","name":"澎湖县","code":"719011","parentId":"3221","children":[]},{"id":"3411","name":"金门县","code":"719012","parentId":"3221","children":[]},{"id":"3412","name":"连江县","code":"719013","parentId":"3221","children":[]}]},{"id":"3432","name":"中国澳门","code":"820000","parentId":"0","children":[{"id":"3446","name":"澳门半岛","code":"8201","parentId":"3432","children":[{"id":"3433","name":"花地玛堂区","code":"820101","parentId":"3446"},{"id":"3434","name":"圣安多尼堂区","code":"820102","parentId":"3446"},{"id":"3435","name":"大堂区","code":"820103","parentId":"3446"},{"id":"3436","name":"望德堂区","code":"820104","parentId":"3446"},{"id":"3437","name":"风顺堂区","code":"820105","parentId":"3446"},{"id":"3441","name":"澳门新城","code":"820109","parentId":"3446"}]},{"id":"3447","name":"离岛","code":"8202","parentId":"3432","children":[{"id":"3438","name":"嘉模堂区","code":"820106","parentId":"3447"},{"id":"3439","name":"圣方济各堂区","code":"820107","parentId":"3447"},{"id":"3440","name":"路氹城","code":"820108","parentId":"3447"}]}]},{"id":"3442","name":"北京","code":"100","parentId":"0","children":[{"id":"1","name":"北京市","code":"110000","parentId":"3442","children":[{"id":"2","name":"东城区","code":"110101","parentId":"1"},{"id":"3","name":"西城区","code":"110102","parentId":"1"},{"id":"4","name":"朝阳区","code":"110105","parentId":"1"},{"id":"5","name":"丰台区","code":"110106","parentId":"1"},{"id":"6","name":"石景山区","code":"110107","parentId":"1"},{"id":"7","name":"海淀区","code":"110108","parentId":"1"},{"id":"8","name":"门头沟区","code":"110109","parentId":"1"},{"id":"9","name":"房山区","code":"110111","parentId":"1"},{"id":"10","name":"通州区","code":"110112","parentId":"1"},{"id":"11","name":"顺义区","code":"110113","parentId":"1"},{"id":"12","name":"昌平区","code":"110114","parentId":"1"},{"id":"13","name":"大兴区","code":"110115","parentId":"1"},{"id":"14","name":"怀柔区","code":"110116","parentId":"1"},{"id":"15","name":"平谷区","code":"110117","parentId":"1"},{"id":"16","name":"密云区","code":"110118","parentId":"1"},{"id":"17","name":"延庆区","code":"110119","parentId":"1"}]}]},{"id":"3443","name":"天津","code":"120","parentId":"0","children":[{"id":"18","name":"天津市","code":"120000","parentId":"3443","children":[{"id":"19","name":"和平区","code":"120101","parentId":"18"},{"id":"20","name":"河东区","code":"120102","parentId":"18"},{"id":"21","name":"河西区","code":"120103","parentId":"18"},{"id":"22","name":"南开区","code":"120104","parentId":"18"},{"id":"23","name":"河北区","code":"120105","parentId":"18"},{"id":"24","name":"红桥区","code":"120106","parentId":"18"},{"id":"25","name":"东丽区","code":"120110","parentId":"18"},{"id":"26","name":"西青区","code":"120111","parentId":"18"},{"id":"27","name":"津南区","code":"120112","parentId":"18"},{"id":"28","name":"北辰区","code":"120113","parentId":"18"},{"id":"29","name":"武清区","code":"120114","parentId":"18"},{"id":"30","name":"宝坻区","code":"120115","parentId":"18"},{"id":"31","name":"滨海新区","code":"120116","parentId":"18"},{"id":"32","name":"宁河区","code":"120117","parentId":"18"},{"id":"33","name":"静海区","code":"120118","parentId":"18"},{"id":"34","name":"蓟州区","code":"120119","parentId":"18"}]}]},{"id":"3444","name":"重庆","code":"500","parentId":"0","children":[{"id":"2232","name":"重庆市","code":"500000","parentId":"3444","children":[{"id":"2233","name":"万州区","code":"500101","parentId":"2232"},{"id":"2234","name":"涪陵区","code":"500102","parentId":"2232"},{"id":"2235","name":"渝中区","code":"500103","parentId":"2232"},{"id":"2236","name":"大渡口区","code":"500104","parentId":"2232"},{"id":"2237","name":"江北区","code":"500105","parentId":"2232"},{"id":"2238","name":"沙坪坝区","code":"500106","parentId":"2232"},{"id":"2239","name":"九龙坡区","code":"500107","parentId":"2232"},{"id":"2240","name":"南岸区","code":"500108","parentId":"2232"},{"id":"2241","name":"北碚区","code":"500109","parentId":"2232"},{"id":"2242","name":"綦江区","code":"500110","parentId":"2232"},{"id":"2243","name":"大足区","code":"500111","parentId":"2232"},{"id":"2244","name":"渝北区","code":"500112","parentId":"2232"},{"id":"2245","name":"巴南区","code":"500113","parentId":"2232"},{"id":"2246","name":"黔江区","code":"500114","parentId":"2232"},{"id":"2247","name":"长寿区","code":"500115","parentId":"2232"},{"id":"2248","name":"江津区","code":"500116","parentId":"2232"},{"id":"2249","name":"合川区","code":"500117","parentId":"2232"},{"id":"2250","name":"永川区","code":"500118","parentId":"2232"},{"id":"2251","name":"南川区","code":"500119","parentId":"2232"},{"id":"2252","name":"璧山区","code":"500120","parentId":"2232"},{"id":"2253","name":"铜梁区","code":"500151","parentId":"2232"},{"id":"2254","name":"潼南区","code":"500152","parentId":"2232"},{"id":"2255","name":"荣昌区","code":"500153","parentId":"2232"},{"id":"2256","name":"开州区","code":"500154","parentId":"2232"},{"id":"2257","name":"梁平区","code":"500155","parentId":"2232"},{"id":"2258","name":"武隆区","code":"500156","parentId":"2232"},{"id":"2259","name":"城口县","code":"500229","parentId":"2232"},{"id":"2260","name":"丰都县","code":"500230","parentId":"2232"},{"id":"2261","name":"垫江县","code":"500231","parentId":"2232"},{"id":"2262","name":"忠县","code":"500233","parentId":"2232"},{"id":"2263","name":"云阳县","code":"500235","parentId":"2232"},{"id":"2264","name":"奉节县","code":"500236","parentId":"2232"},{"id":"2265","name":"巫山县","code":"500237","parentId":"2232"},{"id":"2266","name":"巫溪县","code":"500238","parentId":"2232"},{"id":"2267","name":"石柱土家族自治县","code":"500240","parentId":"2232"},{"id":"2268","name":"秀山土家族苗族自治县","code":"500241","parentId":"2232"},{"id":"2269","name":"酉阳土家族苗族自治县","code":"500242","parentId":"2232"},{"id":"2270","name":"彭水苗族土家族自治县","code":"500243","parentId":"2232"}]}]},{"id":"3445","name":"上海","code":"140","parentId":"0","children":[{"id":"789","name":"上海市","code":"310000","parentId":"3445","children":[{"id":"790","name":"黄浦区","code":"310101","parentId":"789"},{"id":"791","name":"徐汇区","code":"310104","parentId":"789"},{"id":"792","name":"长宁区","code":"310105","parentId":"789"},{"id":"793","name":"静安区","code":"310106","parentId":"789"},{"id":"794","name":"普陀区","code":"310107","parentId":"789"},{"id":"795","name":"虹口区","code":"310109","parentId":"789"},{"id":"796","name":"杨浦区","code":"310110","parentId":"789"},{"id":"797","name":"闵行区","code":"310112","parentId":"789"},{"id":"798","name":"宝山区","code":"310113","parentId":"789"},{"id":"799","name":"嘉定区","code":"310114","parentId":"789"},{"id":"800","name":"浦东新区","code":"310115","parentId":"789"},{"id":"801","name":"金山区","code":"310116","parentId":"789"},{"id":"802","name":"松江区","code":"310117","parentId":"789"},{"id":"803","name":"青浦区","code":"310118","parentId":"789"},{"id":"804","name":"奉贤区","code":"310120","parentId":"789"},{"id":"805","name":"崇明区","code":"310151","parentId":"789"}]}]},{"id":"3448","name":"中国香港","code":"810","parentId":"0","children":[{"id":"3413","name":"香港特别行政区","code":"810000","parentId":"3448","children":[{"id":"3414","name":"中西区","code":"810101","parentId":"3413"},{"id":"3415","name":"湾仔区","code":"810102","parentId":"3413"},{"id":"3416","name":"东区","code":"810103","parentId":"3413"},{"id":"3417","name":"南区","code":"810104","parentId":"3413"},{"id":"3418","name":"油尖旺区","code":"810105","parentId":"3413"},{"id":"3419","name":"深水埗区","code":"810106","parentId":"3413"},{"id":"3420","name":"九龙城区","code":"810107","parentId":"3413"},{"id":"3421","name":"黄大仙区","code":"810108","parentId":"3413"},{"id":"3422","name":"观塘区","code":"810109","parentId":"3413"},{"id":"3423","name":"北区","code":"810110","parentId":"3413"},{"id":"3424","name":"大埔区","code":"810111","parentId":"3413"},{"id":"3425","name":"沙田区","code":"810112","parentId":"3413"},{"id":"3426","name":"西贡区","code":"810113","parentId":"3413"},{"id":"3427","name":"荃湾区","code":"810114","parentId":"3413"},{"id":"3428","name":"屯门区","code":"810115","parentId":"3413"},{"id":"3429","name":"元朗区","code":"810116","parentId":"3413"},{"id":"3430","name":"葵青区","code":"810117","parentId":"3413"},{"id":"3431","name":"离岛区","code":"810118","parentId":"3413"}]}]}] \ No newline at end of file diff --git a/static/tabbar/appointment.png b/static/tabbar/appointment.png new file mode 100644 index 0000000000000000000000000000000000000000..bce22f4da9729765cd7105ff635c44bb5adf1506 GIT binary patch literal 4455 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 J3L4|;zW{KQ_`3iA literal 0 HcmV?d00001 diff --git a/static/tabbar/index_HL.png b/static/tabbar/index_HL.png new file mode 100644 index 0000000000000000000000000000000000000000..720fd2c05491303387976a3b6be0acea5eef31be GIT binary patch literal 4230 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 literal 0 HcmV?d00001 diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..3cc02ea --- /dev/null +++ b/store/index.js @@ -0,0 +1,12 @@ +import { createPinia } from "pinia"; + +const store = createPinia(); + +export function setupStore(app) { + app.use(store); +} + +export { store }; + +export * from "./modules/user"; +export * from "./modules/auth"; diff --git a/store/modules/auth.js b/store/modules/auth.js new file mode 100644 index 0000000..7efae03 --- /dev/null +++ b/store/modules/auth.js @@ -0,0 +1,69 @@ +import AuthAPI from "@/api/modules/auth"; +import { store } from "@/store"; +import { cache } from "@/utils/cache"; +import { defineStore } from "pinia"; +import { computed, ref, watch } from "vue"; + +export const useAuthStore = defineStore("auth", () => { + const ACCESS_TOKEN_KEY = "accessToken"; + const REFRESH_TOKEN_KEY = "refreshToken"; + const accessToken = ref(cache(ACCESS_TOKEN_KEY) ?? ""); + const refreshToken = ref(cache(REFRESH_TOKEN_KEY) ?? ""); + const isLoggedIn = computed(() => !!accessToken.value); + + watch(accessToken, (newValue) => cache(ACCESS_TOKEN_KEY, newValue || null)); + watch(refreshToken, (newValue) => cache(REFRESH_TOKEN_KEY, newValue || null)); + + // 注册 + async function signUp(payload) { + const response = await AuthAPI.signUp(payload); + const prefix = response.tokenType ? `${response.tokenType} ` : ""; + accessToken.value = prefix + response.accessToken; + refreshToken.value = prefix + response.refreshToken; + return response; + } + + // 登录 + async function signIn(payload) { + const response = await AuthAPI.signIn(payload); + const prefix = response.tokenType ? `${response.tokenType} ` : ""; + accessToken.value = prefix + response.accessToken; + refreshToken.value = prefix + response.refreshToken; + return response; + } + + // 登出 + function signOut() { + accessToken.value = ""; + refreshToken.value = ""; + } + + // 刷新token + async function refresh(payload) { + const response = await AuthAPI.refreshToken(payload); + const prefix = response.tokenType ? `${response.tokenType} ` : ""; + accessToken.value = prefix + response.accessToken; + return response; + } + + function setAccessToken(payload) { + accessToken.value = payload; + } + + return { + accessToken, + refreshToken, + isLoggedIn, + signUp, + signIn, + signOut, + refresh, + setAccessToken + }; +}); + +// 手动提供给 useStore() 函数 pinia 实例 +// https://pinia.vuejs.org/zh/core-concepts/outside-component-usage.html#using-a-store-outside-of-a-component +export function useAuthStoreHook() { + return useAuthStore(store); +} diff --git a/store/modules/user.js b/store/modules/user.js new file mode 100644 index 0000000..4f7f219 --- /dev/null +++ b/store/modules/user.js @@ -0,0 +1,32 @@ +import { defineStore } from "pinia"; +import { ref, watch } from "vue"; +import { cache } from "@/utils/cache"; + +export const useUserStore = defineStore("user", () => { + const userInfo = ref(cache('USERINFO_KEY') ? JSON.parse(cache('USERINFO_KEY')) : { + username: "", + }); + +const adressInfo = ref(cache('ADRESS_KEY') ? JSON.parse(cache('ADRESS_KEY')) : { + latitude: "", + longitude: "", + adress: "", + }); + +watch(userInfo, (newValue) => cache('USERINFO_KEY', newValue ? JSON.stringify(newValue) : null)); +watch(adressInfo, (newValue) => cache('ADRESS_KEY', newValue ? JSON.stringify(newValue) : null)); + +function setUserInfo(payload) { + userInfo.value = payload; +} +function setAdressInfo(payload) { + adressInfo.value = payload; +} + + return { + userInfo, + setUserInfo, + adressInfo, + setAdressInfo + }; +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..8e0f510 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "allowJs": true, + "allowSyntheticDefaultImports": true, + "baseUrl": ".", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "jsx": "preserve", + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment", + "jsxImportSource": "vue", + "lib": ["esnext", "dom"], + "module": "esnext", + "moduleResolution": "bundler", + "noEmit": true, + "noImplicitThis": true, + "noLib": false, + "paths": { + "@/*": ["./*"] + }, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "esnext", + "types": ["@dcloudio/types"], + "useDefineForClassFields": true, + "verbatimModuleSyntax": true + }, + "exclude": ["node_modules", "uni_modules", "unpackage", "**/*.js"], + "include": ["**/*.{ts,vue}"] +} diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..519260d --- /dev/null +++ b/uni.scss @@ -0,0 +1,79 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color: #333; //基本色 +$uni-text-color-inverse: #fff; //反色 +$uni-text-color-grey: #999; //辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable: #c0c0c0; + +/* 背景颜色 */ +$uni-bg-color: #ffffff; +$uni-bg-color-grey: #f8f8f8; +$uni-bg-color-hover: #f1f1f1; //点击状态颜色 +$uni-bg-color-mask: rgba(0, 0, 0, 0.4); //遮罩颜色 + +/* 边框颜色 */ +$uni-border-color: #c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm: 12px; +$uni-font-size-base: 14px; +$uni-font-size-lg: 16px; + +/* 图片尺寸 */ +$uni-img-size-sm: 20px; +$uni-img-size-base: 26px; +$uni-img-size-lg: 40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2c405a; // 文章标题颜色 +$uni-font-size-title: 20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle: 26px; +$uni-color-paragraph: #3f536e; // 文章段落颜色 +$uni-font-size-paragraph: 15px; + +/* uv-ui主题 */ +@import "@/uni_modules/uv-ui-tools/theme.scss"; diff --git a/uni_modules/uv-action-sheet/changelog.md b/uni_modules/uv-action-sheet/changelog.md new file mode 100644 index 0000000..ab3545e --- /dev/null +++ b/uni_modules/uv-action-sheet/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-07-02) +uv-action-sheet 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/actionSheet.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-action-sheet 底部操作菜单 diff --git a/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js b/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js new file mode 100644 index 0000000..8adffee --- /dev/null +++ b/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js @@ -0,0 +1,50 @@ +export default { + props: { + // 标题,有值则显示,同时会显示关闭按钮 + title: { + type: String, + default: '' + }, + // 选项上方的描述信息 + description: { + type: String, + default: '' + }, + // 数据 + actions: { + type: Array, + default: () => [] + }, + // 取消按钮的文字,不为空时显示按钮 + cancelText: { + type: String, + default: '' + }, + // 点击某个菜单项时是否关闭弹窗 + closeOnClickAction: { + type: Boolean, + default: true + }, + // 处理底部安全区(默认true) + safeAreaInsetBottom: { + type: Boolean, + default: true + }, + // 小程序的打开方式 + openType: { + type: String, + default: '' + }, + // 点击遮罩是否允许关闭 (默认true) + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: 0 + }, + ...uni.$uv?.props?.actionSheet + } +} \ No newline at end of file diff --git a/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue b/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue new file mode 100644 index 0000000..edca089 --- /dev/null +++ b/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue @@ -0,0 +1,280 @@ + + + + + + diff --git a/uni_modules/uv-action-sheet/package.json b/uni_modules/uv-action-sheet/package.json new file mode 100644 index 0000000..e7b6173 --- /dev/null +++ b/uni_modules/uv-action-sheet/package.json @@ -0,0 +1,92 @@ +{ + "id": "uv-action-sheet", + "displayName": "uv-action-sheet 底部操作菜单 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "该组件用于从底部弹出一个操作菜单,供用户选择并返回结果。本组件功能类似于uni的uni.showActionSheet API,配置更加灵活,所有平台都表现一致。", + "keywords": [ + "action-sheet", + "uvui", + "uv-ui", + "操作菜单", + "菜单选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-icon", + "uv-line", + "uv-loading-icon", + "uv-gap" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-action-sheet/readme.md b/uni_modules/uv-action-sheet/readme.md new file mode 100644 index 0000000..9ea5487 --- /dev/null +++ b/uni_modules/uv-action-sheet/readme.md @@ -0,0 +1,13 @@ +## ActionSheet 操作菜单 + +> **组件名:uv-action-sheet** + +本组件用于从底部弹出一个操作菜单,供用户选择并返回结果。 + +本组件功能类似于uni的uni.showActionSheet API,配置更加灵活,所有平台都表现一致。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-album/changelog.md b/uni_modules/uv-album/changelog.md new file mode 100644 index 0000000..42ab5e2 --- /dev/null +++ b/uni_modules/uv-album/changelog.md @@ -0,0 +1,10 @@ +## 1.0.4(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.3(2023-10-23) +1. 修复报错的BUG +## 1.0.2(2023-10-23) +1. 修复设置singleSize、multipleSize、space等值带单位,存在不显示的BUG +## 1.0.1(2023-09-13) +1. 添加依赖 +## 1.0.0(2023-08-30) +1. 新增uv-album相册组件 diff --git a/uni_modules/uv-album/components/uv-album/uv-album.vue b/uni_modules/uv-album/components/uv-album/uv-album.vue new file mode 100644 index 0000000..835d792 --- /dev/null +++ b/uni_modules/uv-album/components/uv-album/uv-album.vue @@ -0,0 +1,312 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-album/package.json b/uni_modules/uv-album/package.json new file mode 100644 index 0000000..700602f --- /dev/null +++ b/uni_modules/uv-album/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-album", + "displayName": "uv-album 相册 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.4", + "description": "本组件提供一个类似相册的功能,让开发者开发起来更加得心应手,功能齐全,灵活配置可以,开箱即用。减少重复的模板代码", + "keywords": [ + "album", + "uv-ui", + "uvui", + "相册", + "图片" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-text" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-album/readme.md b/uni_modules/uv-album/readme.md new file mode 100644 index 0000000..edd2f0b --- /dev/null +++ b/uni_modules/uv-album/readme.md @@ -0,0 +1,21 @@ +# Album 相册 + +> **组件名:uv-album** + +本组件提供一个类似相册的功能,让开发者开发起来更加得心应手。 + +功能齐全,灵活配置可以,开箱即用。减少重复的模板代码。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-alert/changelog.md b/uni_modules/uv-alert/changelog.md new file mode 100644 index 0000000..71cca03 --- /dev/null +++ b/uni_modules/uv-alert/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-01) +1. 修复点击触发两次实践的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-alert 警告提示组件 diff --git a/uni_modules/uv-alert/components/uv-alert/props.js b/uni_modules/uv-alert/components/uv-alert/props.js new file mode 100644 index 0000000..cc8edc1 --- /dev/null +++ b/uni_modules/uv-alert/components/uv-alert/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 显示文字 + title: { + type: String, + default: '' + }, + // 主题,success/warning/info/error + type: { + type: String, + default: 'warning' + }, + // 辅助性文字 + description: { + type: String, + default: '' + }, + // 是否可关闭 + closable: { + type: Boolean, + default: false + }, + // 是否显示图标 + showIcon: { + type: Boolean, + default: false + }, + // 浅或深色调,light-浅色,dark-深色 + effect: { + type: String, + default: 'light' + }, + // 文字是否居中 + center: { + type: Boolean, + default: false + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + ...uni.$uv?.props?.alert + } +} \ No newline at end of file diff --git a/uni_modules/uv-alert/components/uv-alert/uv-alert.vue b/uni_modules/uv-alert/components/uv-alert/uv-alert.vue new file mode 100644 index 0000000..ba3965e --- /dev/null +++ b/uni_modules/uv-alert/components/uv-alert/uv-alert.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/uni_modules/uv-alert/package.json b/uni_modules/uv-alert/package.json new file mode 100644 index 0000000..34bec20 --- /dev/null +++ b/uni_modules/uv-alert/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-alert", + "displayName": "uv-alert 警告提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-alert 警告提示,展现需要关注的信息。灵活配置,功能齐全,兼容全端", + "keywords": [ + "alert", + "uvui", + "uv-ui", + "警告提示" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-alert/readme.md b/uni_modules/uv-alert/readme.md new file mode 100644 index 0000000..63dda76 --- /dev/null +++ b/uni_modules/uv-alert/readme.md @@ -0,0 +1,15 @@ +## Alert 警告提示 + +> **组件名:uv-alert** + +警告提示,展现需要关注的信息。 + +当某个页面需要向用户显示警告的信息时。 + +非浮层的静态展现形式,始终展现,不会自动消失,用户可以点击关闭。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-avatar/changelog.md b/uni_modules/uv-avatar/changelog.md new file mode 100644 index 0000000..8631c86 --- /dev/null +++ b/uni_modules/uv-avatar/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-06) +1. 优化 +## 1.0.4(2023-12-06) +1. 优化 +## 1.0.3(2023-12-06) +1. 阻止事件冒泡处理,单个头像模式 +## 1.0.2(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-avatar 头像组件 diff --git a/uni_modules/uv-avatar/components/uv-avatar-group/props.js b/uni_modules/uv-avatar/components/uv-avatar-group/props.js new file mode 100644 index 0000000..a610ab4 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar-group/props.js @@ -0,0 +1,53 @@ +export default { + props: { + // 头像图片组 + urls: { + type: Array, + default: () => [] + }, + // 最多展示的头像数量 + maxCount: { + type: [String, Number], + default: 5 + }, + // 头像形状 + shape: { + type: String, + default: 'circle' + }, + // 图片裁剪模式 + mode: { + type: String, + default: 'scaleToFill' + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: true + }, + // 头像大小 + size: { + type: [String, Number], + default: 40 + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: '' + }, + // 头像之间的遮挡比例 + gap: { + type: [String, Number], + validator(value) { + return value >= 0 && value <= 1 + }, + default: 0.5 + }, + // 需额外显示的值 + extraValue: { + type: [Number, String], + default: 0 + }, + ...uni.$uv?.props?.avatarGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue b/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue new file mode 100644 index 0000000..59481f6 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/uni_modules/uv-avatar/components/uv-avatar/props.js b/uni_modules/uv-avatar/components/uv-avatar/props.js new file mode 100644 index 0000000..6c8d725 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar/props.js @@ -0,0 +1,80 @@ +import { range } from '@/uni_modules/uv-ui-tools/libs/function/test.js' +export default { + props: { + // 头像图片路径(不能为相对路径) + src: { + type: String, + default: '' + }, + // 头像形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'circle' + }, + // 头像尺寸 + size: { + type: [String, Number], + default: 40 + }, + // 裁剪模式 + mode: { + type: String, + default: 'scaleToFill' + }, + // 显示的文字 + text: { + type: String, + default: '' + }, + // 背景色 + bgColor: { + type: String, + default: '#c0c4cc' + }, + // 文字颜色 + color: { + type: String, + default: '#fff' + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: 18 + }, + // 显示的图标 + icon: { + type: String, + default: '' + }, + // 显示小程序头像,只对百度,微信,QQ小程序有效 + mpAvatar: { + type: Boolean, + default: false + }, + // 是否使用随机背景色 + randomBgColor: { + type: Boolean, + default: false + }, + // 加载失败的默认头像(组件有内置默认图片) + defaultUrl: { + type: String, + default: '' + }, + // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 + colorIndex: { + type: [String, Number], + // 校验参数规则,索引在0-19之间 + validator(n) { + return range(n, [0, 19]) || n === '' + }, + default: '' + }, + // 组件标识符 + name: { + type: String, + default: '' + }, + ...uni.$uv?.props?.avatar + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue b/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue new file mode 100644 index 0000000..0959d6a --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/uni_modules/uv-avatar/package.json b/uni_modules/uv-avatar/package.json new file mode 100644 index 0000000..e77ab68 --- /dev/null +++ b/uni_modules/uv-avatar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-avatar", + "displayName": "uv-avatar 头像 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.5", + "description": "uv-avatar 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。", + "keywords": [ + "uv-avatar", + "uvui", + "uv-ui", + "avatar", + "头像" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-text" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/readme.md b/uni_modules/uv-avatar/readme.md new file mode 100644 index 0000000..1f068eb --- /dev/null +++ b/uni_modules/uv-avatar/readme.md @@ -0,0 +1,11 @@ +## Avatar 头像 + +> **组件名:uv-avatar** + +本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-back-top/changelog.md b/uni_modules/uv-back-top/changelog.md new file mode 100644 index 0000000..9772262 --- /dev/null +++ b/uni_modules/uv-back-top/changelog.md @@ -0,0 +1,8 @@ +## 1.0.2(2023-07-03) +1. 优化插槽自定义内容部分 +2. 增加backToTop方法说明 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-back-top 返回顶部 diff --git a/uni_modules/uv-back-top/components/uv-back-top/props.js b/uni_modules/uv-back-top/components/uv-back-top/props.js new file mode 100644 index 0000000..74daff4 --- /dev/null +++ b/uni_modules/uv-back-top/components/uv-back-top/props.js @@ -0,0 +1,58 @@ +export default { + props: { + // 返回顶部的形状,circle-圆形,square-方形 + mode: { + type: String, + default: 'circle' + }, + // 自定义图标 + icon: { + type: String, + default: 'arrow-upward' + }, + // 提示文字 + text: { + type: String, + default: '' + }, + // 返回顶部滚动时间 + duration: { + type: [String, Number], + default: 100 + }, + // 滚动距离 + scrollTop: { + type: [String, Number], + default: 0 + }, + // 距离顶部多少距离显示,单位px + top: { + type: [String, Number], + default: 400 + }, + // 返回顶部按钮到底部的距离,单位px + bottom: { + type: [String, Number], + default: 100 + }, + // 返回顶部按钮到右边的距离,单位px + right: { + type: [String, Number], + default: 20 + }, + // 层级 + zIndex: { + type: [String, Number], + default: 9 + }, + // 图标的样式,对象形式 + iconStyle: { + type: Object, + default: () => ({ + color: '#909399', + fontSize: '19px' + }) + }, + ...uni.$uv?.props?.backtop + } +} \ No newline at end of file diff --git a/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue b/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue new file mode 100644 index 0000000..fad73d4 --- /dev/null +++ b/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-back-top/package.json b/uni_modules/uv-back-top/package.json new file mode 100644 index 0000000..a2035a5 --- /dev/null +++ b/uni_modules/uv-back-top/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-back-top", + "displayName": "uv-back-top 返回顶部 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "返回顶部 组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。", + "keywords": [ + "uv-back-top", + "uvui", + "uv-ui", + "avatar", + "返回顶部" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-back-top/readme.md b/uni_modules/uv-back-top/readme.md new file mode 100644 index 0000000..d6a2aec --- /dev/null +++ b/uni_modules/uv-back-top/readme.md @@ -0,0 +1,11 @@ +## BackTop 返回顶部 + +> **组件名:uv-back-top** + +该组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-badge/changelog.md b/uni_modules/uv-badge/changelog.md new file mode 100644 index 0000000..b0ba104 --- /dev/null +++ b/uni_modules/uv-badge/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-04) +1. 修复type等属性为null的时候不显示徽标的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-badge 徽标数,数字角标 diff --git a/uni_modules/uv-badge/components/uv-badge/props.js b/uni_modules/uv-badge/components/uv-badge/props.js new file mode 100644 index 0000000..c6369c3 --- /dev/null +++ b/uni_modules/uv-badge/components/uv-badge/props.js @@ -0,0 +1,73 @@ +export default { + props: { + // 是否显示圆点 + isDot: { + type: Boolean, + default: false + }, + // 显示的内容 + value: { + type: [Number, String], + default: '' + }, + // 是否显示 + show: { + type: Boolean, + default: true + }, + // 最大值,超过最大值会显示 '{max}+' + max: { + type: [Number, String], + default: 999 + }, + // 主题类型,error|warning|success|primary + type: { + type: [String,undefined,null], + default: 'error' + }, + // 当数值为 0 时,是否展示 Badge + showZero: { + type: Boolean, + default: false + }, + // 背景颜色,优先级比type高,如设置,type参数会失效 + bgColor: { + type: [String, null], + default: null + }, + // 字体颜色 + color: { + type: [String, null], + default: null + }, + // 徽标形状,circle-四角均为圆角,horn-左下角为直角 + shape: { + type: [String,undefined,null], + default: 'circle' + }, + // 设置数字的显示方式,overflow|ellipsis|limit + // overflow会根据max字段判断,超出显示`${max}+` + // ellipsis会根据max判断,超出显示`${max}...` + // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数 + numberType: { + type: [String,undefined,null], + default: 'overflow' + }, + // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效 + offset: { + type: Array, + default: () => [] + }, + // 是否反转背景和字体颜色 + inverted: { + type: Boolean, + default: false + }, + // 是否绝对定位 + absolute: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.badge + } +} \ No newline at end of file diff --git a/uni_modules/uv-badge/components/uv-badge/uv-badge.vue b/uni_modules/uv-badge/components/uv-badge/uv-badge.vue new file mode 100644 index 0000000..f7d3911 --- /dev/null +++ b/uni_modules/uv-badge/components/uv-badge/uv-badge.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/uni_modules/uv-badge/package.json b/uni_modules/uv-badge/package.json new file mode 100644 index 0000000..5a81386 --- /dev/null +++ b/uni_modules/uv-badge/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-badge", + "displayName": "uv-badge 徽标数,数字角标 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "徽标数一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。", + "keywords": [ + "uv-badge", + "uvui", + "uv-ui", + "徽标数", + "数字角标" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-badge/readme.md b/uni_modules/uv-badge/readme.md new file mode 100644 index 0000000..cf597eb --- /dev/null +++ b/uni_modules/uv-badge/readme.md @@ -0,0 +1,11 @@ +## Badge 徽标数 + +> **组件名:uv-badge** + +该组件一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-button/changelog.md b/uni_modules/uv-button/changelog.md new file mode 100644 index 0000000..11e954e --- /dev/null +++ b/uni_modules/uv-button/changelog.md @@ -0,0 +1,33 @@ +## 1.0.15(2023-12-20) +1. 优化 +## 1.0.14(2023-12-06) +1. 优化 +## 1.0.13(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.12(2023-10-19) +1. 增加后置插槽 +## 1.0.11(2023-09-21) +1. 修复通过customStyle修改按钮宽度,组件中最外层节点不改变的问题 +## 1.0.10(2023-09-15) +1. 按钮支持open-type="agreePrivacyAuthorization" +## 1.0.9(2023-09-11) +1. 增加参数iconSize,用于控制图标的大小 +## 1.0.8(2023-09-10) +1. 修复多个按钮在一行宽度不正常的BUG +## 1.0.7(2023-09-07) +1. 修复warning颜色对应错误的BUG +## 1.0.6(2023-07-25) +1. 增加customTextStyle属性,方便自定义文字样式 +## 1.0.5(2023-07-20) +1. 解决微信小程序动态设置hover-class点击态不消失的BUG +## 1.0.4(2023-06-29) +1. 修改上次更新出现nvue报错异常 +## 1.0.3(2023-06-28) + 修复:设置open-type="chooseAvatar"等值不生效的BUG +## 1.0.2(2023-06-01) +1. 修复按钮点击触发两次的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-button 按钮 diff --git a/uni_modules/uv-button/components/uv-button/nvue.scss b/uni_modules/uv-button/components/uv-button/nvue.scss new file mode 100644 index 0000000..be6c16e --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/nvue.scss @@ -0,0 +1,46 @@ +$uv-button-active-opacity:0.75 !default; +$uv-button-loading-text-margin-left:4px !default; +$uv-button-text-color: #FFFFFF !default; +$uv-button-text-plain-error-color:$uv-error !default; +$uv-button-text-plain-warning-color:$uv-warning !default; +$uv-button-text-plain-success-color:$uv-success !default; +$uv-button-text-plain-info-color:$uv-info !default; +$uv-button-text-plain-primary-color:$uv-primary !default; +.uv-button { + &--active { + opacity: $uv-button-active-opacity; + } + + &--active--plain { + background-color: rgb(217, 217, 217); + } + + &__loading-text { + margin-left:$uv-button-loading-text-margin-left; + } + + &__text, + &__loading-text { + color:$uv-button-text-color; + } + + &__text--plain--error { + color:$uv-button-text-plain-error-color; + } + + &__text--plain--warning { + color:$uv-button-text-plain-warning-color; + } + + &__text--plain--success{ + color:$uv-button-text-plain-success-color; + } + + &__text--plain--info { + color:$uv-button-text-plain-info-color; + } + + &__text--plain--primary { + color:$uv-button-text-plain-primary-color; + } +} \ No newline at end of file diff --git a/uni_modules/uv-button/components/uv-button/props.js b/uni_modules/uv-button/components/uv-button/props.js new file mode 100644 index 0000000..6275ad5 --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/props.js @@ -0,0 +1,163 @@ +export default { + props: { + // 是否细边框 + hairline: { + type: Boolean, + default: true + }, + // 按钮的预置样式,info,primary,error,warning,success + type: { + type: String, + default: 'info' + }, + // 按钮尺寸,large,normal,small,mini + size: { + type: String, + default: 'normal' + }, + // 按钮形状,circle(两边为半圆),square(带圆角) + shape: { + type: String, + default: 'square' + }, + // 按钮是否镂空 + plain: { + type: Boolean, + default: false + }, + // 是否禁止状态 + disabled: { + type: Boolean, + default: false + }, + // 是否加载中 + loading: { + type: Boolean, + default: false + }, + // 加载中提示文字 + loadingText: { + type: [String, Number], + default: '' + }, + // 加载状态图标类型 + loadingMode: { + type: String, + default: 'spinner' + }, + // 加载图标大小 + loadingSize: { + type: [String, Number], + default: 14 + }, + // 开放能力,具体请看uniapp稳定关于button组件部分说明 + // https://uniapp.dcloud.io/component/button + openType: { + type: String, + default: '' + }, + // 用于

组件,点击分别会触发 组件的 submit/reset 事件 + // 取值为submit(提交表单),reset(重置表单) + formType: { + type: String, + default: '' + }, + // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 + // 只微信小程序、QQ小程序有效 + appParameter: { + type: String, + default: '' + }, + // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 + hoverStopPropagation: { + type: Boolean, + default: true + }, + // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 + lang: { + type: String, + default: 'en' + }, + // 会话来源,open-type="contact"时有效。只微信小程序有效 + sessionFrom: { + type: String, + default: '' + }, + // 会话内消息卡片标题,open-type="contact"时有效 + // 默认当前标题,只微信小程序有效 + sendMessageTitle: { + type: String, + default: '' + }, + // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 + // 默认当前分享路径,只微信小程序有效 + sendMessagePath: { + type: String, + default: '' + }, + // 会话内消息卡片图片,open-type="contact"时有效 + // 默认当前页面截图,只微信小程序有效 + sendMessageImg: { + type: String, + default: '' + }, + // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示, + // 用户点击后可以快速发送小程序消息,open-type="contact"时有效 + showMessageCard: { + type: Boolean, + default: true + }, + // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 + dataName: { + type: String, + default: '' + }, + // 节流,一定时间内只能触发一次 + throttleTime: { + type: [String, Number], + default: 0 + }, + // 按住后多久出现点击态,单位毫秒 + hoverStartTime: { + type: [String, Number], + default: 0 + }, + // 手指松开后点击态保留时间,单位毫秒 + hoverStayTime: { + type: [String, Number], + default: 200 + }, + // 按钮文字,之所以通过props传入,是因为slot传入的话 + // nvue中无法控制文字的样式 + text: { + type: [String, Number], + default: '' + }, + // 按钮图标 + icon: { + type: String, + default: '' + }, + // 按钮图标大小 + iconSize: { + type: [String, Number], + default: '' + }, + // 按钮图标颜色 + iconColor: { + type: String, + default: '#000000' + }, + // 按钮颜色,支持传入linear-gradient渐变色 + color: { + type: String, + default: '' + }, + // 自定义按钮文本样式 + customTextStyle: { + type: [Object,String], + default: '' + }, + ...uni.$uv?.props?.button + } +} diff --git a/uni_modules/uv-button/components/uv-button/uv-button.vue b/uni_modules/uv-button/components/uv-button/uv-button.vue new file mode 100644 index 0000000..3a2470a --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/uv-button.vue @@ -0,0 +1,528 @@ + + + + + diff --git a/uni_modules/uv-button/components/uv-button/vue.scss b/uni_modules/uv-button/components/uv-button/vue.scss new file mode 100644 index 0000000..7a089be --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/vue.scss @@ -0,0 +1,93 @@ +@import '@/uni_modules/uv-ui-tools/libs/css/color.scss'; +// nvue下hover-class无效 +$uv-button-before-top:50% !default; +$uv-button-before-left:50% !default; +$uv-button-before-width:100% !default; +$uv-button-before-height:100% !default; +$uv-button-before-transform:translate(-50%, -50%) !default; +$uv-button-before-opacity:0 !default; +$uv-button-before-background-color:#000 !default; +$uv-button-before-border-color:#000 !default; +$uv-button-active-before-opacity:.15 !default; +$uv-button-icon-margin-left:4px !default; +$uv-button-plain-uv-button-info-color:$uv-info; +$uv-button-plain-uv-button-success-color:$uv-success; +$uv-button-plain-uv-button-error-color:$uv-error; +$uv-button-plain-uv-button-warning-color:$uv-warning; + +.uv-button-wrapper { + position: relative; + &--dis { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + z-index: 9; + } +} + +.uv-button { + width: 100%; + + &__text { + white-space: nowrap; + line-height: 1; + } + + &:before { + position: absolute; + top:$uv-button-before-top; + left:$uv-button-before-left; + width:$uv-button-before-width; + height:$uv-button-before-height; + border: inherit; + border-radius: inherit; + transform:$uv-button-before-transform; + opacity:$uv-button-before-opacity; + content: " "; + background-color:$uv-button-before-background-color; + border-color:$uv-button-before-border-color; + } + + &--active { + &:before { + opacity: .15 + } + } + + &__icon+&__text:not(:empty), + &__loading-text { + margin-left:$uv-button-icon-margin-left; + } + + &--plain { + &.uv-button--primary { + color: $uv-primary; + } + } + + &--plain { + &.uv-button--info { + color:$uv-button-plain-uv-button-info-color; + } + } + + &--plain { + &.uv-button--success { + color:$uv-button-plain-uv-button-success-color; + } + } + + &--plain { + &.uv-button--error { + color:$uv-button-plain-uv-button-error-color; + } + } + + &--plain { + &.uv-button--warning { + color:$uv-button-plain-uv-button-warning-color; + } + } +} diff --git a/uni_modules/uv-button/package.json b/uni_modules/uv-button/package.json new file mode 100644 index 0000000..c2a4a17 --- /dev/null +++ b/uni_modules/uv-button/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-button", + "displayName": "uv-button 按钮 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.15", + "description": "按钮组件内部实现以uni-app的button组件为基础,进行二次封装,灵活配置,功能齐全,兼容全端。", + "keywords": [ + "uv-button", + "uvui", + "uv-ui", + "button", + "按钮" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-loading-icon", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-button/readme.md b/uni_modules/uv-button/readme.md new file mode 100644 index 0000000..124a7f4 --- /dev/null +++ b/uni_modules/uv-button/readme.md @@ -0,0 +1,19 @@ +## Button 按钮 + +> **组件名:uv-button** + +该组件内部实现以`uni-app`的`button`组件为基础,进行二次封装,灵活配置,功能齐全,兼容全端。灵活配置,内置状态设置,开箱即用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-calendar/changelog.md b/uni_modules/uv-calendar/changelog.md new file mode 100644 index 0000000..581562a --- /dev/null +++ b/uni_modules/uv-calendar/changelog.md @@ -0,0 +1,16 @@ +## 1.0.6(2023-11-03) +1. **该版本不再维护**,推荐使用新版本[https://ext.dcloud.net.cn/plugin?name=uv-calendars](https://ext.dcloud.net.cn/plugin?name=uv-calendars) +## 1.0.5(2023-07-02) +uv-calendar 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/calendar.html +## 1.0.4(2023-06-15) +1. formatter格式化中增加topInfo参数 +## 1.0.3(2023-06-08) +1. 增加点击日期change回调 +2. 优化 +## 1.0.2(2023-06-05) +1. 修改多个时间选择的时候存在反选的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-calendar 日历 diff --git a/uni_modules/uv-calendar/components/uv-calendar/calendar.js b/uni_modules/uv-calendar/components/uv-calendar/calendar.js new file mode 100644 index 0000000..e006dea --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default: + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uv-calendar/components/uv-calendar/header.vue b/uni_modules/uv-calendar/components/uv-calendar/header.vue new file mode 100644 index 0000000..d7daa7b --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/header.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/uni_modules/uv-calendar/components/uv-calendar/month.vue b/uni_modules/uv-calendar/components/uv-calendar/month.vue new file mode 100644 index 0000000..1a649bc --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/month.vue @@ -0,0 +1,616 @@ + + + + + diff --git a/uni_modules/uv-calendar/components/uv-calendar/props.js b/uni_modules/uv-calendar/components/uv-calendar/props.js new file mode 100644 index 0000000..c359293 --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/props.js @@ -0,0 +1,145 @@ +export default { + props: { + // 日历顶部标题 + title: { + type: String, + default: '日期选择' + }, + // 是否显示标题 + showTitle: { + type: Boolean, + default: true + }, + // 是否显示副标题 + showSubtitle: { + type: Boolean, + default: true + }, + // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 + mode: { + type: String, + default: 'single' + }, + // mode=range时,第一个日期底部的提示文字 + startText: { + type: String, + default: '开始' + }, + // mode=range时,最后一个日期底部的提示文字 + endText: { + type: String, + default: '结束' + }, + // 自定义列表 + customList: { + type: Array, + default: () => [] + }, + // 主题色,对底部按钮和选中日期有效 + color: { + type: String, + default: '#3c9cff' + }, + // 最小的可选日期 + minDate: { + type: [String, Number], + default: 0 + }, + // 最大可选日期 + maxDate: { + type: [String, Number], + default: 0 + }, + // 默认选中的日期,mode为multiple或range是必须为数组格式 + defaultDate: { + type: [Array, String, Date, null], + default: null + }, + // mode=multiple时,最多可选多少个日期 + maxCount: { + type: [String, Number], + default: Number.MAX_SAFE_INTEGER + }, + // 日期行高 + rowHeight: { + type: [String, Number], + default: 56 + }, + // 日期格式化函数 + formatter: { + type: [Function, null], + default: null + }, + // 是否显示农历 + showLunar: { + type: Boolean, + default: false + }, + // 是否显示月份背景色 + showMark: { + type: Boolean, + default: true + }, + // 确定按钮的文字 + confirmText: { + type: String, + default: '确定' + }, + // 确认按钮处于禁用状态时的文字 + confirmDisabledText: { + type: String, + default: '确定' + }, + // 是否允许点击遮罩关闭日历 + closeOnClickOverlay: { + type: Boolean, + default: false + }, + // 是否允许点击确认按钮关闭日历 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否为只读状态,只读状态下禁止选择日期 + readonly: { + type: Boolean, + default: false + }, + // 是否展示确认按钮 + showConfirm: { + type: Boolean, + default: true + }, + // 日期区间最多可选天数,默认无限制,mode = range时有效 Infinity + maxRange: { + type: [Number, String], + default: Number.MAX_SAFE_INTEGER + }, + // 范围选择超过最多可选天数时的提示文案,mode = range时有效 + rangePrompt: { + type: String, + default: '' + }, + // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 + showRangePrompt: { + type: Boolean, + default: true + }, + // 是否允许日期范围的起止时间为同一天,mode = range时有效 + allowSameDay: { + type: Boolean, + default: false + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: 0 + }, + // 最多展示月份数量 + monthNum: { + type: [Number, String], + default: 3 + }, + ...uni.$uv?.props?.calendar + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue b/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue new file mode 100644 index 0000000..626e833 --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue @@ -0,0 +1,390 @@ + + + + + diff --git a/uni_modules/uv-calendar/package.json b/uni_modules/uv-calendar/package.json new file mode 100644 index 0000000..03d8812 --- /dev/null +++ b/uni_modules/uv-calendar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-calendar", + "displayName": "uv-calendar 日历 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.6", + "description": "日历组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中,灵活配置,功能齐全,兼容全端。强烈推荐使用最新版日历组件,在下方跳入。", + "keywords": [ + "uv-calendar", + "uvui", + "uv-ui", + "calendar", + "日历" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-button", + "uv-popup" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendar/readme.md b/uni_modules/uv-calendar/readme.md new file mode 100644 index 0000000..3c2de54 --- /dev/null +++ b/uni_modules/uv-calendar/readme.md @@ -0,0 +1,21 @@ +## Calendar 日历 + +> **组件名:uv-calendar** + +此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中。灵活配置,功能齐全,兼容全端。 + +## 温馨提示:该组件不再更新,强烈推荐使用最新版日历组件:[https://www.uvui.cn/components/calendars.html](https://www.uvui.cn/components/calendars.html)。基于 `uv-ui` 插件市场首款多功能日历组件,不仅可以查看、选择日期,还可以选择任意范围内的日期、打点操作、自定义主题颜色、自定义文案、农历显示等。追求的就是完美。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-calendars/changelog.md b/uni_modules/uv-calendars/changelog.md new file mode 100644 index 0000000..b3b2e38 --- /dev/null +++ b/uni_modules/uv-calendars/changelog.md @@ -0,0 +1,40 @@ +## 1.0.15(2023-11-08) +1. 增加readonly属性,是否为只读状态,只读状态下禁止选择日期 +## 1.0.14(2023-10-12) +1. 修复selected没有设置了info或者info设置为空字符串后,文本则无法恢复BUG +## 1.0.13(2023-09-19) +1. 修复range模式下,selected设置了info后选中后,导致文本不恢复的问题 +2. 修复multiple模式下,selected自定义信息的颜色没变,依然是白色 +## 1.0.12(2023-09-14) +1. 优化 +## 1.0.11(2023-09-14) +1. 增加allowSameDay参数,是否允许日期范围的起止时间为同一天,mode = range时有效 +2. 修复在vue2+小程序渲染时闪烁的问题 +## 1.0.10(2023-09-07) +1. 修复国际化失效的BUG +## 1.0.9(2023-09-01) +1. 修复在pages.json中设置easycom会报错的BUG +## 1.0.8(2023-08-29) +1. 修复mainjs中设置setConfig修改属性不生效的问题,出自评论区:https://ext.dcloud.net.cn/plugin?id=12287 +## 1.0.7(2023-08-26) +1. 去除range参数,由mode="range"替换 +2. 新增mode参数,不传 / multiple / range,分别为单日期, 多个日期,选择日期范围 +3. 与uv-calendar选择日期的功能保持一致 +## 1.0.6(2023-08-25) +1. 修复点击返回今天按钮时,monthSwitch方法回调参数返回月份不是当天对应月份:https://github.com/climblee/uv-ui/issues/7 +## 1.0.5(2023-08-13) +1. 修复选择月份弹窗层级的问题 +## 1.0.4(2023-08-06) +1. 优化 +## 1.0.3(2023-08-06) +1. 修复高度不对的BUG +2. 修复文案在小屏幕的BUG +## 1.0.2(2023-08-05) +1. 增加startText参数 +2. 增加endText参数 +3. 增加selected中的参数 +4. 优化日历范围选择 +## 1.0.1(2023-08-04) +1. 修复 自定义主题时 颜色错误的BUG +## 1.0.0(2023-08-03) +1. 新增 uv-calendars 新版日历发布 diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue b/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue new file mode 100644 index 0000000..b675fbd --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue @@ -0,0 +1,376 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue b/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue new file mode 100644 index 0000000..862d068 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue @@ -0,0 +1,248 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar.js b/uni_modules/uv-calendars/components/uv-calendars/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json new file mode 100644 index 0000000..c83e8b2 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "ok", + "uv-calender.cancel": "cancel", + "uv-calender.today": "today", + "uv-calender.MON": "MON", + "uv-calender.TUE": "TUE", + "uv-calender.WED": "WED", + "uv-calender.THU": "THU", + "uv-calender.FRI": "FRI", + "uv-calender.SAT": "SAT", + "uv-calender.SUN": "SUN" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js b/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json new file mode 100644 index 0000000..03c5486 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "确定", + "uv-calender.cancel": "取消", + "uv-calender.today": "今日", + "uv-calender.SUN": "日", + "uv-calender.MON": "一", + "uv-calender.TUE": "二", + "uv-calender.WED": "三", + "uv-calender.THU": "四", + "uv-calender.FRI": "五", + "uv-calender.SAT": "六" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json new file mode 100644 index 0000000..95cf29e --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "確定", + "uv-calender.cancel": "取消", + "uv-calender.today": "今日", + "uv-calender.SUN": "日", + "uv-calender.MON": "一", + "uv-calender.TUE": "二", + "uv-calender.WED": "三", + "uv-calender.THU": "四", + "uv-calender.FRI": "五", + "uv-calender.SAT": "六" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/util.js b/uni_modules/uv-calendars/components/uv-calendars/util.js new file mode 100644 index 0000000..ae1c6d6 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/util.js @@ -0,0 +1,435 @@ +import CALENDAR from './calendar.js' +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range, + multiple, + allowSameDay + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + this.multiple = multiple + this.allowSameDay = allowSameDay + // 多选状态 + this.cleanRangeStatus() + // 范围状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date, status) { + if (this.range && status == 'init') { + this.cleanRangeStatus(); + if (Array.isArray(date)) { + this.rangeStatus.before = date[0]; + this.rangeStatus.after = date.length > 1 ? date[date.length - 1] : ''; + if (this.rangeStatus.after && this.dateCompare(this.rangeStatus.before, this.rangeStatus.after)) { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.before, this.rangeStatus.after) + } + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this.rangeStatus.before = this.selectDate.fullDate; + this._getWeek(this.selectDate.fullDate) + } + } else if (this.multiple && status == 'init') { + this.cleanMultipleStatus(); + if (Array.isArray(date)) { + this.multipleStatus.data = date; + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this.multipleStatus.data = [this.selectDate.fullDate]; + this._getWeek(this.selectDate.fullDate) + } + } else { + if (Array.isArray(date)) { + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + } + } + /** + * 清理多选状态 + */ + cleanRangeStatus() { + this.rangeStatus = { + before: '', + after: '', + data: [] + } + } + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + data: [] + } + } + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + } + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31 && AddDayCount > 0) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + const preMonth = dd.getMonth() + dd.setMonth(preMonth + AddDayCount) // 获取AddDayCount天后的日期 + const nextMonth = dd.getMonth() + // 处理 pre 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if (AddDayCount < 0 && preMonth !== 0 && nextMonth - preMonth > AddDayCount) { + dd.setMonth(nextMonth + (nextMonth - preMonth + AddDayCount)) + } + // 处理 next 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if (AddDayCount > 0 && nextMonth - preMonth > AddDayCount) { + dd.setMonth(nextMonth - (nextMonth - preMonth - AddDayCount)) + } + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let nowDate = full.year + '-' + (full.month < 10 ? full.month : full.month) + '-' + (i < 10 ? '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let ranges = this.rangeStatus.data + let checked = false + let rangesStatus = -1 + if (this.range) { + if (ranges) { + rangesStatus = ranges.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (rangesStatus !== -1) { + checked = true + } + } + let multiples = this.multipleStatus.data + let checked_multiple = false + let multiplesStatus = -1 + if (this.multiple) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked_multiple = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + range: this.range ? checked : false, + multiple: this.multiple ? checked_multiple : false, + beforeRange: this.dateEqual(this.rangeStatus.before, nowDate), + afterRange: this.dateEqual(this.rangeStatus.after, nowDate), + dateEqual: this.range && checked && this.dateEqual(this.rangeStatus.before, this.rangeStatus.after), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !(disableBefore && disableAfter), + isDay + } + if (info) { + data.extraInfo = info + } + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } else if (Array.isArray(date)) { + date = date[0] + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + /** + * 比较after时间是否大于before时间 + */ + dateAfterLgBefore(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (after.getTime() - before.getTime() > 0) { + return true + } else { + return false + } + } + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + if (!this.multiple) return + let multiples = this.multipleStatus.data; + const findIndex = multiples.findIndex(item => this.dateEqual(fullDate, item)); + if (findIndex < 0) { + this.multipleStatus.data = this.multipleStatus.data.concat([fullDate]); + } else { + this.multipleStatus.data.splice(findIndex, 1); + } + this._getWeek(fullDate) + } + /** + * 获取范围状态 + */ + setRange(fullDate) { + let { + before, + after + } = this.rangeStatus + if (!this.range) return + if (before && after) { + this.cleanRangeStatus(); + this.rangeStatus.before = fullDate + } else { + if (!before) { + this.rangeStatus.before = fullDate + } else { + if (this.allowSameDay && this.dateEqual(before, fullDate)) { + this.rangeStatus.after = fullDate + } else if (!this.dateAfterLgBefore(this.rangeStatus.before, fullDate)) { + this.cleanRangeStatus(); + this.rangeStatus.before = fullDate + this._getWeek(fullDate) + return; + } + this.rangeStatus.after = fullDate + if (this.dateCompare(this.rangeStatus.before, this.rangeStatus.after)) { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.before, this.rangeStatus.after); + } else { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.after, this.rangeStatus.before); + } + } + } + this._getWeek(fullDate) + } + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + year, + month + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} +export default Calendar \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue b/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue new file mode 100644 index 0000000..8d5b377 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue @@ -0,0 +1,452 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/package.json b/uni_modules/uv-calendars/package.json new file mode 100644 index 0000000..7153510 --- /dev/null +++ b/uni_modules/uv-calendars/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-calendars", + "displayName": "uv-calendars 最新日历 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.15", + "description": "新版本uv-calendars,不仅拥有老版本的所有功能,还增加了更加适用的插入页面等强大功能,且更加简洁。查看日期、选择单个或多个或任意范围日期,打点操作,自定义文案,自定义主题等强大功能。", + "keywords": [ + "uv-ui", + "uvui", + "日历", + "打卡", + "日历选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration":{ + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-toolbar" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendars/readme.md b/uni_modules/uv-calendars/readme.md new file mode 100644 index 0000000..d986eb9 --- /dev/null +++ b/uni_modules/uv-calendars/readme.md @@ -0,0 +1,23 @@ +## Calendars 全新日历 + +> **组件名:uv-calendars** + +为了解决老版本`uv-calendar`性能问题,特别是对日期选择范围有很大限制,体验不友好等缺点。于是有了新版日历组件。 + +新版本`uv-calendars`,不仅拥有老版本的所有功能,还增加了更加适用的插入页面等强大功能,且更加简洁。查看日期、选择单个或多个或任意范围日期,打点操作,自定义文案,自定义主题等强大功能。 + +常用场景:酒店日期预订、火车机票选择购买日期、上下班打卡等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-cell/changelog.md b/uni_modules/uv-cell/changelog.md new file mode 100644 index 0000000..c342b0c --- /dev/null +++ b/uni_modules/uv-cell/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-06) +1. 修复uv-cell right-icon插槽编译到APP端不显示的BUG,问题来源:https://gitee.com/climblee/uv-ui/issues/I8LXZI +## 1.0.4(2023-09-19) +1. 增加cellStyle参数,方便自定义单元格的样式 +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-06-21) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-cell 单元格 diff --git a/uni_modules/uv-cell/components/uv-cell-group/props.js b/uni_modules/uv-cell/components/uv-cell-group/props.js new file mode 100644 index 0000000..57deb4c --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell-group/props.js @@ -0,0 +1,15 @@ +export default { + props: { + // 分组标题 + title: { + type: String, + default: '' + }, + // 是否显示外边框 + border: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.cellGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue b/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue new file mode 100644 index 0000000..0f17865 --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/uni_modules/uv-cell/components/uv-cell/props.js b/uni_modules/uv-cell/components/uv-cell/props.js new file mode 100644 index 0000000..6579636 --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell/props.js @@ -0,0 +1,116 @@ +export default { + props: { + // 标题 + title: { + type: [String, Number], + default: '' + }, + // 标题下方的描述信息 + label: { + type: [String, Number], + default: '' + }, + // 右侧的内容 + value: { + type: [String, Number], + default: '' + }, + // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) + icon: { + type: String, + default: '' + }, + // 是否禁用cell + disabled: { + type: Boolean, + default: false + }, + // 是否显示下边框 + border: { + type: Boolean, + default: true + }, + // 内容是否垂直居中(主要是针对右侧的value部分) + center: { + type: Boolean, + default: true + }, + // 点击后跳转的URL地址 + url: { + type: String, + default: '' + }, + // 链接跳转的方式,内部使用的是uvui封装的route方法,可能会进行拦截操作 + linkType: { + type: String, + default: 'navigateTo' + }, + // 是否开启点击反馈(表现为点击时加上灰色背景) + clickable: { + type: Boolean, + default: false + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: false + }, + // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) + required: { + type: Boolean, + default: false + }, + // 右侧的图标箭头 + rightIcon: { + type: String, + default: 'arrow-right' + }, + // 右侧箭头的方向,可选值为:left,up,down + arrowDirection: { + type: String, + default: '' + }, + // 左侧图标样式 + iconStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 右侧箭头图标的样式 + rightIconStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 标题的样式 + titleStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 单位元的大小,可选值为large + size: { + type: String, + default: '' + }, + // 点击cell是否阻止事件传播 + stop: { + type: Boolean, + default: true + }, + // 标识符,cell被点击时返回 + name: { + type: [Number, String], + default: '' + }, + // 单元格自定义样式 + cellStyle: { + type: [Object, String], + default: () => {} + }, + ...uni.$uv?.props?.cell + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/components/uv-cell/uv-cell.vue b/uni_modules/uv-cell/components/uv-cell/uv-cell.vue new file mode 100644 index 0000000..bdd268e --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell/uv-cell.vue @@ -0,0 +1,209 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-cell/package.json b/uni_modules/uv-cell/package.json new file mode 100644 index 0000000..8ff5cf6 --- /dev/null +++ b/uni_modules/uv-cell/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-cell", + "displayName": "uv-cell 单元格 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.5", + "description": "cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。", + "keywords": [ + "uv-cell", + "uvui", + "uv-ui", + "单元格", + "设置页" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-line" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/readme.md b/uni_modules/uv-cell/readme.md new file mode 100644 index 0000000..3ea9937 --- /dev/null +++ b/uni_modules/uv-cell/readme.md @@ -0,0 +1,11 @@ +## Cell 单元格 + +> **组件名:uv-cell** + +cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-checkbox/changelog.md b/uni_modules/uv-checkbox/changelog.md new file mode 100644 index 0000000..2a142ce --- /dev/null +++ b/uni_modules/uv-checkbox/changelog.md @@ -0,0 +1,34 @@ +## 1.0.14(2023-11-04) +1. 修复label文字较多不分行的问题 +## 1.0.13(2023-10-11) +1. 优化同类问题:https://gitee.com/climblee/uv-ui/issues/I872VD +## 1.0.12(2023-09-22) +1. 修复change回调中v-model值不更新的BUG +## 1.0.11(2023-09-01) +1. 修复点击空隙处无效的问题 +2. label支持插槽下可点击 +## 1.0.10(2023-08-27) +1. 修复label设置布尔值不生效的BUG +## 1.0.9(2023-08-16) +1. 解决数据多不换行的BUG +## 1.0.8(2023-07-13) +1. 修复 uv-checkbox设置value属性不生效的BUG +## 1.0.7(2023-07-05) +修复vue3模式下,动态修改v-model绑定的值无效的BUG +## 1.0.6(2023-06-29) +1. 增加label插槽,与radio保持一致 +2. 优化文档 +## 1.0.5(2023-06-12) +1. 修复1.0.4改出的问题 +## 1.0.4(2023-06-08) +1. 复选框修复全局设置不生效的BUG +## 1.0.3(2023-06-06) +1. uv-checkbox-group 兼容自定义样式customStyle,方便通过样式调整整体位置等; +2. .uv-checkbox-group--row增加flex-wrap: wrap;允许换行 +## 1.0.2(2023-05-30) +1. 修复error报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-checkbox 复选框 diff --git a/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js b/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js new file mode 100644 index 0000000..47bf005 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 绑定的值 + value: { + type: Array, + default: () => [] + }, + modelValue: { + type: Array, + default: () => [] + }, + // 标识符 + name: { + type: String, + default: '' + }, + // 形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 是否禁用全部checkbox + disabled: { + type: Boolean, + default: false + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: '#2979ff' + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: '#c8c9cc' + }, + // 整个组件的尺寸,默认px + size: { + type: [String, Number], + default: 18 + }, + // 布局方式,row-横向,column-纵向 + placement: { + type: String, + default: 'row' + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: 14 + }, + // label的字体颜色 + labelColor: { + type: [String], + default: '#303133' + }, + // 是否禁止点击文本操作 + labelDisabled: { + type: Boolean, + default: false + }, + // 图标颜色 + iconColor: { + type: String, + default: '#fff' + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: 12 + }, + // 勾选图标的对齐方式,left-左边,right-右边 + iconPlacement: { + type: String, + default: 'left' + }, + // 竖向配列时,是否显示下划线 + borderBottom: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.checkboxGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue b/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue new file mode 100644 index 0000000..d5ea81f --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/uni_modules/uv-checkbox/components/uv-checkbox/props.js b/uni_modules/uv-checkbox/components/uv-checkbox/props.js new file mode 100644 index 0000000..58ec890 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox/props.js @@ -0,0 +1,70 @@ +export default { + props: { + // checkbox的名称 + name: { + type: [String, Number, Boolean], + default: '' + }, + // 形状,square为方形,circle为圆型 + shape: { + type: String, + default: '' + }, + // 整体的大小 + size: { + type: [String, Number], + default: '' + }, + // 是否默认选中 + checked: { + type: Boolean, + default: false + }, + // 是否禁用 + disabled: { + type: [String, Boolean], + default: '' + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: '' + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: '' + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: '' + }, + // 图标颜色 + iconColor: { + type: String, + default: '' + }, + // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式 + label: { + type: [String, Number, Boolean], + default: '' + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: '' + }, + // label的颜色 + labelColor: { + type: String, + default: '' + }, + // 是否禁止点击提示语选中复选框 + labelDisabled: { + type: [String, Boolean], + default: '' + }, + ...uni.$uv?.props?.checkbox + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue b/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue new file mode 100644 index 0000000..dfd1912 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue @@ -0,0 +1,370 @@ + + + + + diff --git a/uni_modules/uv-checkbox/package.json b/uni_modules/uv-checkbox/package.json new file mode 100644 index 0000000..44944d9 --- /dev/null +++ b/uni_modules/uv-checkbox/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-checkbox", + "displayName": "uv-checkbox 复选框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.14", + "description": "复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便。", + "keywords": [ + "uv-checkbox", + "uvui", + "uv-ui", + "checkbox", + "复选框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/readme.md b/uni_modules/uv-checkbox/readme.md new file mode 100644 index 0000000..43b6f2e --- /dev/null +++ b/uni_modules/uv-checkbox/readme.md @@ -0,0 +1,19 @@ +## Checkbox 复选框 + +> **组件名:uv-checkbox** + +复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便。可配合 `uv-form` 组件进行表单验证等场景使用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-code-input/changelog.md b/uni_modules/uv-code-input/changelog.md new file mode 100644 index 0000000..1fefc03 --- /dev/null +++ b/uni_modules/uv-code-input/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-08-05) +在vue2模式下,v-model设置为0时不生效的BUG +## 1.0.4(2023-07-13) +1. 修复value/v-model更改不生效的BUG +## 1.0.3(2023-06-28) +修复:使用:disabledKeyboard="true"属性,事件全部失效的BUG +## 1.0.2(2023-06-23) +优化下边框 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-code-input 验证码输入 diff --git a/uni_modules/uv-code-input/components/uv-code-input/props.js b/uni_modules/uv-code-input/components/uv-code-input/props.js new file mode 100644 index 0000000..4a5e460 --- /dev/null +++ b/uni_modules/uv-code-input/components/uv-code-input/props.js @@ -0,0 +1,83 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: true + }, + // 最大输入长度 + maxlength: { + type: [String, Number], + default: 6 + }, + // 是否用圆点填充 + dot: { + type: Boolean, + default: false + }, + // 显示模式,box-盒子模式,line-底部横线模式 + mode: { + type: String, + default: 'box' + }, + // 是否细边框 + hairline: { + type: Boolean, + default: false + }, + // 字符间的距离 + space: { + type: [String, Number], + default: 10 + }, + // 是否自动获取焦点 + focus: { + type: Boolean, + default: false + }, + // 字体是否加粗 + bold: { + type: Boolean, + default: false + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 18 + }, + // 输入框的大小,宽等于高 + size: { + type: [String, Number], + default: 35 + }, + // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true + disabledKeyboard: { + type: Boolean, + default: false + }, + // 边框和线条颜色 + borderColor: { + type: String, + default: '#c9cacc' + }, + // 是否禁止输入"."符号 + disabledDot: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.codeInput + } +} \ No newline at end of file diff --git a/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue b/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue new file mode 100644 index 0000000..14ad8a2 --- /dev/null +++ b/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue @@ -0,0 +1,272 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-code-input/package.json b/uni_modules/uv-code-input/package.json new file mode 100644 index 0000000..ab8762c --- /dev/null +++ b/uni_modules/uv-code-input/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-code-input", + "displayName": "uv-code-input 验证码输入 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "验证码输入组件一般用于验证用户短信验证码的场景,输入框或横线多种模式可选。", + "keywords": [ + "uv-code-input", + "uvui", + "uv-ui", + "code", + "验证码输入" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-code-input/readme.md b/uni_modules/uv-code-input/readme.md new file mode 100644 index 0000000..aa5b0a1 --- /dev/null +++ b/uni_modules/uv-code-input/readme.md @@ -0,0 +1,19 @@ +## CodeInput 验证码输入框 + +> **组件名:uv-code-input** + +该组件一般用于验证用户短信验证码的场景,输入框或横线多种模式可选。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-code/changelog.md b/uni_modules/uv-code/changelog.md new file mode 100644 index 0000000..7054a25 --- /dev/null +++ b/uni_modules/uv-code/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. 优化 +## 1.0.2(2023-10-13) +1. unmounted兼容vue3 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-code 验证码倒计时 diff --git a/uni_modules/uv-code/components/uv-code/props.js b/uni_modules/uv-code/components/uv-code/props.js new file mode 100644 index 0000000..afc9d3c --- /dev/null +++ b/uni_modules/uv-code/components/uv-code/props.js @@ -0,0 +1,35 @@ +export default { + props: { + // 倒计时总秒数 + seconds: { + type: [String, Number], + default: 60 + }, + // 尚未开始时提示 + startText: { + type: String, + default: '获取验证码' + }, + // 正在倒计时中的提示 + changeText: { + type: String, + default: 'X秒重新获取' + }, + // 倒计时结束时的提示 + endText: { + type: String, + default: '重新获取' + }, + // 是否在H5刷新或各端返回再进入时继续倒计时 + keepRunning: { + type: Boolean, + default: false + }, + // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了 + uniqueKey: { + type: String, + default: '' + }, + ...uni.$uv?.props?.code + } +} \ No newline at end of file diff --git a/uni_modules/uv-code/components/uv-code/uv-code.vue b/uni_modules/uv-code/components/uv-code/uv-code.vue new file mode 100644 index 0000000..de02c83 --- /dev/null +++ b/uni_modules/uv-code/components/uv-code/uv-code.vue @@ -0,0 +1,136 @@ + + \ No newline at end of file diff --git a/uni_modules/uv-code/package.json b/uni_modules/uv-code/package.json new file mode 100644 index 0000000..d4392c0 --- /dev/null +++ b/uni_modules/uv-code/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-code", + "displayName": "uv-code 验证码倒计时 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "考虑到用户实际发送验证码的场景,可能是一个按钮,也可能是一段文字,提示语各有不同,所以本组件不提供界面显示,只提供倒计时文本,由用户将文本嵌入到具体的场景。", + "keywords": [ + "uv-code", + "uvui", + "uv-ui", + "code", + "验证码倒计时" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-code/readme.md b/uni_modules/uv-code/readme.md new file mode 100644 index 0000000..cf2eb51 --- /dev/null +++ b/uni_modules/uv-code/readme.md @@ -0,0 +1,11 @@ +## Code 验证码输入框 + +> **组件名:uv-code** + +考虑到用户实际发送验证码的场景,可能是一个按钮,也可能是一段文字,提示语各有不同,所以本组件不提供界面显示,只提供倒计时文本,由用户将文本嵌入到具体的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-collapse/changelog.md b/uni_modules/uv-collapse/changelog.md new file mode 100644 index 0000000..0219560 --- /dev/null +++ b/uni_modules/uv-collapse/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-collapse 折叠面板 diff --git a/uni_modules/uv-collapse/components/uv-collapse-item/props.js b/uni_modules/uv-collapse/components/uv-collapse-item/props.js new file mode 100644 index 0000000..18983c1 --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse-item/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 标题 + title: { + type: String, + default: '' + }, + // 标题右侧内容 + value: { + type: String, + default: '' + }, + // 标题下方的描述信息 + label: { + type: String, + default: '' + }, + // 是否禁用折叠面板 + disabled: { + type: Boolean, + default: false + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: true + }, + // 是否开启点击反馈 + clickable: { + type: Boolean, + default: true + }, + // 是否显示内边框 + border: { + type: Boolean, + default: true + }, + // 标题的对齐方式 + align: { + type: String, + default: 'left' + }, + // 唯一标识符 + name: { + type: [String, Number], + default: '' + }, + // 标题左侧图片,可为绝对路径的图片或内置图标 + icon: { + type: String, + default: '' + }, + // 面板展开收起的过渡时间,单位ms + duration: { + type: Number, + default: 300 + }, + ...uni.$uv?.props?.collapseItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue b/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue new file mode 100644 index 0000000..840f28d --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/uni_modules/uv-collapse/components/uv-collapse/props.js b/uni_modules/uv-collapse/components/uv-collapse/props.js new file mode 100644 index 0000000..70fa04c --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 当前展开面板的name,非手风琴模式:[],手风琴模式:string | number + value: { + type: [String, Number, Array, null], + default: null + }, + // 是否手风琴模式 + accordion: { + type: Boolean, + default: false + }, + // 是否显示外边框 + border: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.collapse + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue b/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue new file mode 100644 index 0000000..5e5c96d --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue @@ -0,0 +1,86 @@ + + + diff --git a/uni_modules/uv-collapse/package.json b/uni_modules/uv-collapse/package.json new file mode 100644 index 0000000..cf9565f --- /dev/null +++ b/uni_modules/uv-collapse/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-collapse", + "displayName": "uv-collapse 折叠面板 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "折叠面板组件,通过折叠面板收纳内容区域,点击可展开收起,多功能参数可配置。", + "keywords": [ + "uv-collapse", + "uvui", + "uv-ui", + "collapse", + "折叠面板" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line", + "uv-cell" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/readme.md b/uni_modules/uv-collapse/readme.md new file mode 100644 index 0000000..cb340ba --- /dev/null +++ b/uni_modules/uv-collapse/readme.md @@ -0,0 +1,11 @@ +## Collapse 折叠面板 + +> **组件名:uv-collapse** + +通过折叠面板收纳内容区域,点击可展开收起,多功能参数可配置。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-count-down/changelog.md b/uni_modules/uv-count-down/changelog.md new file mode 100644 index 0000000..44392c2 --- /dev/null +++ b/uni_modules/uv-count-down/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. unmounted兼容vue3 +## 1.0.2(2023-06-20) +1. 增加外部样式customStyle参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-count-down 倒计时 diff --git a/uni_modules/uv-count-down/components/uv-count-down/props.js b/uni_modules/uv-count-down/components/uv-count-down/props.js new file mode 100644 index 0000000..c5b5461 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 倒计时时长,单位ms + time: { + type: [String, Number], + default: 0 + }, + // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 + format: { + type: String, + default: 'HH:mm:ss' + }, + // 是否自动开始倒计时 + autoStart: { + type: Boolean, + default: true + }, + // 是否展示毫秒倒计时 + millisecond: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.countDown + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-down/components/uv-count-down/utils.js b/uni_modules/uv-count-down/components/uv-count-down/utils.js new file mode 100644 index 0000000..8c75005 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue b/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue new file mode 100644 index 0000000..a758d31 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue @@ -0,0 +1,169 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-count-down/package.json b/uni_modules/uv-count-down/package.json new file mode 100644 index 0000000..da501f1 --- /dev/null +++ b/uni_modules/uv-count-down/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-count-down", + "displayName": "uv-count-down 倒计时 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "该倒计时组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。", + "keywords": [ + "uv-count-down", + "uvui", + "uv-ui", + "countDown", + "倒计时" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-down/readme.md b/uni_modules/uv-count-down/readme.md new file mode 100644 index 0000000..0f326a8 --- /dev/null +++ b/uni_modules/uv-count-down/readme.md @@ -0,0 +1,11 @@ +## CountDown 倒计时 + +> **组件名:uv-count-down** + +该组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-count-to/changelog.md b/uni_modules/uv-count-to/changelog.md new file mode 100644 index 0000000..cf323f9 --- /dev/null +++ b/uni_modules/uv-count-to/changelog.md @@ -0,0 +1,13 @@ +## 1.0.4(2023-06-20) +1. 优化 +## 1.0.3(2023-06-20) +1. 修复继续滚动的函数 +2. 修复其他 +## 1.0.2(2023-06-20) +1. 适配px和rpx的单位 +2. 适配customStyle参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-count-to 数字滚动 diff --git a/uni_modules/uv-count-to/components/uv-count-to/props.js b/uni_modules/uv-count-to/components/uv-count-to/props.js new file mode 100644 index 0000000..498371a --- /dev/null +++ b/uni_modules/uv-count-to/components/uv-count-to/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 开始的数值,默认从0增长到某一个数 + startVal: { + type: [String, Number], + default: 0 + }, + // 要滚动的目标数值,必须 + endVal: { + type: [String, Number], + default: 0 + }, + // 滚动到目标数值的动画持续时间,单位为毫秒(ms) + duration: { + type: [String, Number], + default: 2000 + }, + // 设置数值后是否自动开始滚动 + autoplay: { + type: Boolean, + default: true + }, + // 要显示的小数位数 + decimals: { + type: [String, Number], + default: 0 + }, + // 是否在即将到达目标数值的时候,使用缓慢滚动的效果 + useEasing: { + type: Boolean, + default: true + }, + // 十进制分割 + decimal: { + type: [String, Number], + default: '.' + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 22 + }, + // 是否加粗字体 + bold: { + type: Boolean, + default: false + }, + // 千位分隔符,类似金额的分割(¥23,321.05中的",") + separator: { + type: String, + default: '' + }, + ...uni.$uv?.props?.countTo + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue b/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue new file mode 100644 index 0000000..5f34167 --- /dev/null +++ b/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/uni_modules/uv-count-to/package.json b/uni_modules/uv-count-to/package.json new file mode 100644 index 0000000..1ed07dc --- /dev/null +++ b/uni_modules/uv-count-to/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-count-to", + "displayName": "uv-count-to 数字滚动 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "该数字滚动组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值,一种数字上升的视觉冲击效果。", + "keywords": [ + "countTo", + "uvui", + "uv-ui", + "数字滚动", + "数字变化" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-to/readme.md b/uni_modules/uv-count-to/readme.md new file mode 100644 index 0000000..5d5f996 --- /dev/null +++ b/uni_modules/uv-count-to/readme.md @@ -0,0 +1,11 @@ +## CountTo 数字滚动 + +> **组件名:uv-count-to** + +该组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-datetime-picker/changelog.md b/uni_modules/uv-datetime-picker/changelog.md new file mode 100644 index 0000000..44784c6 --- /dev/null +++ b/uni_modules/uv-datetime-picker/changelog.md @@ -0,0 +1,28 @@ +## 1.0.12(2023-11-27) +1. 增加round圆角属性 +## 1.0.11(2023-10-11) +1. 修复设置minDate出现选择错乱的BUG +## 1.0.10(2023-09-01) +1. 增加clearDate参数,是否清除上次选择,默认false +## 1.0.9(2023-08-31) +1. 增加mode="year",方便只选择年 +## 1.0.8(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.7(2023-07-13) +1. 修复 uv-datetime-picker 设置value属性不生效的BUG +## 1.0.6(2023-07-05) +修复vue3模式下,动态修改v-model绑定的值无效的BUG +## 1.0.5(2023-07-02) +uv-datetime-picker 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/datetimePicker.html +## 1.0.4(2023-06-29) +1. 修复抖音小程序报错的BUG +## 1.0.3(2023-06-07) +1. 取消defaultIndex参数,传该值没实际意义,后续更新文档 +## 1.0.2(2023-06-02) +1. 修复v-model重新赋值不更新的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-datetime-picker 时间选择器 diff --git a/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js new file mode 100644 index 0000000..6031d84 --- /dev/null +++ b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js @@ -0,0 +1,130 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 是否打开组件 + show: { + type: Boolean, + default: false + }, + // 是否展示顶部的操作栏 + showToolbar: { + type: Boolean, + default: true + }, + // 顶部标题 + title: { + type: String, + default: '' + }, + // 展示格式,mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择 + mode: { + type: String, + default: 'datetime' + }, + // 可选的最大时间 + maxDate: { + type: Number, + // 最大默认值为后10年 + default: new Date(new Date().getFullYear() + 10, 0, 1).getTime() + }, + // 可选的最小时间 + minDate: { + type: Number, + // 最小默认值为前10年 + default: new Date(new Date().getFullYear() - 10, 0, 1).getTime() + }, + // 可选的最小小时,仅mode=time有效 + minHour: { + type: Number, + default: 0 + }, + // 可选的最大小时,仅mode=time有效 + maxHour: { + type: Number, + default: 23 + }, + // 可选的最小分钟,仅mode=time有效 + minMinute: { + type: Number, + default: 0 + }, + // 可选的最大分钟,仅mode=time有效 + maxMinute: { + type: Number, + default: 59 + }, + // 选项过滤函数 + filter: { + type: [Function, null], + default: null + }, + // 选项格式化函数 + formatter: { + type: [Function, null], + default: null + }, + // 是否显示加载中状态 + loading: { + type: Boolean, + default: false + }, + // 各列中,单个选项的高度 + itemHeight: { + type: [String, Number], + default: 44 + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: '取消' + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: '确认' + }, + // 取消按钮的颜色 + cancelColor: { + type: String, + default: '#909193' + }, + // 确认按钮的颜色 + confirmColor: { + type: String, + default: '#3c9cff' + }, + // 每列中可见选项的数量 + visibleItemCount: { + type: [String, Number], + default: 5 + }, + // 是否允许点击遮罩关闭选择器 + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 是否允许点击确认关闭选择器 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否清空上次选择内容 + clearDate: { + type: Boolean, + default: false + }, + // 圆角 + round: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.datetimePicker + } +} \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue new file mode 100644 index 0000000..45600dd --- /dev/null +++ b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue @@ -0,0 +1,355 @@ + + \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/package.json b/uni_modules/uv-datetime-picker/package.json new file mode 100644 index 0000000..adbba14 --- /dev/null +++ b/uni_modules/uv-datetime-picker/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-datetime-picker", + "displayName": "uv-datetime-picker 时间选择器 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.12", + "description": "时间选择器组件用于时间日期,主要用于年月日时分的选择,具体选择的精确度由参数控制。", + "keywords": [ + "datetime-picker", + "uvui", + "uv-ui", + "datetime", + "时间选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-picker" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/readme.md b/uni_modules/uv-datetime-picker/readme.md new file mode 100644 index 0000000..0db9d9c --- /dev/null +++ b/uni_modules/uv-datetime-picker/readme.md @@ -0,0 +1,19 @@ +## DatetimePicker 时间选择器 + +> **组件名:uv-datetime-picker** + +此选择器用于时间日期,主要用于年月日时分的选择,具体选择的精确度由参数控制。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-divider/changelog.md b/uni_modules/uv-divider/changelog.md new file mode 100644 index 0000000..9ff8c52 --- /dev/null +++ b/uni_modules/uv-divider/changelog.md @@ -0,0 +1,11 @@ +## 1.0.4(2023-12-06) +1. 优化 +## 1.0.3(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.2(2023-06-01) +1. 修复点击触发两次事件的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-divider 分割线 diff --git a/uni_modules/uv-divider/components/uv-divider/props.js b/uni_modules/uv-divider/components/uv-divider/props.js new file mode 100644 index 0000000..7b97c2c --- /dev/null +++ b/uni_modules/uv-divider/components/uv-divider/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 是否虚线 + dashed: { + type: Boolean, + default: false + }, + // 是否细线 + hairline: { + type: Boolean, + default: true + }, + // 是否以点替代文字,优先于text字段起作用 + dot: { + type: Boolean, + default: false + }, + // 内容文本的位置,left-左边,center-中间,right-右边 + textPosition: { + type: String, + default: 'center' + }, + // 文本内容 + text: { + type: [String, Number], + default: '' + }, + // 文本大小 + textSize: { + type: [String, Number], + default: 14 + }, + // 文本颜色 + textColor: { + type: String, + default: '#909399' + }, + // 线条颜色 + lineColor: { + type: String, + default: '#dcdfe6' + }, + ...uni.$uv?.props?.divider + } +} \ No newline at end of file diff --git a/uni_modules/uv-divider/components/uv-divider/uv-divider.vue b/uni_modules/uv-divider/components/uv-divider/uv-divider.vue new file mode 100644 index 0000000..ba0dfa7 --- /dev/null +++ b/uni_modules/uv-divider/components/uv-divider/uv-divider.vue @@ -0,0 +1,113 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-divider/package.json b/uni_modules/uv-divider/package.json new file mode 100644 index 0000000..a54b458 --- /dev/null +++ b/uni_modules/uv-divider/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-divider", + "displayName": "uv-divider 分割线 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "区隔内容的分割线,一般用于页面底部没有更多的提示。", + "keywords": [ + "divider", + "uvui", + "uv-ui", + "分割线", + "没有更多" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-divider/readme.md b/uni_modules/uv-divider/readme.md new file mode 100644 index 0000000..2384cba --- /dev/null +++ b/uni_modules/uv-divider/readme.md @@ -0,0 +1,11 @@ +## Divider 分割线 + +> **组件名:uv-divider** + +区隔内容的分割线,一般用于页面底部"没有更多"的提示。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-drop-down/changelog.md b/uni_modules/uv-drop-down/changelog.md new file mode 100644 index 0000000..637c605 --- /dev/null +++ b/uni_modules/uv-drop-down/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2024-01-02) +1. 修复parentData不变的BUG +## 1.0.4(2023-09-28) +1. 增加uv-sticky依赖 +## 1.0.3(2023-08-29) +1. 修复自定义内容,点击自定义内容时会自动关闭弹窗的问题 +## 1.0.2(2023-08-22) +1. 优化 +## 1.0.1(2023-08-22) +1. 增加@change回调,返回弹窗关闭状态 +2. 增加init方法,方便位置改变进行调整 +## 1.0.0(2023-07-30) +新增uv-drop-down 下拉筛选组件 diff --git a/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue b/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue new file mode 100644 index 0000000..9438a57 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue @@ -0,0 +1,169 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue b/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue new file mode 100644 index 0000000..6a1efc8 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue @@ -0,0 +1,242 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue b/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue new file mode 100644 index 0000000..9978b40 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue @@ -0,0 +1,135 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/package.json b/uni_modules/uv-drop-down/package.json new file mode 100644 index 0000000..f4ad683 --- /dev/null +++ b/uni_modules/uv-drop-down/package.json @@ -0,0 +1,91 @@ +{ + "id": "uv-drop-down", + "displayName": "uv-drop-down 下拉筛选 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "该组件主要提供筛选下拉筛选框,内置基础筛选功能,可以根据自己的需求自定义筛选项", + "keywords": [ + "uv-drop-down", + "uvui", + "uv-ui", + "下拉筛选", + "筛选" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-text", + "uv-transition", + "uv-sticky" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-drop-down/readme.md b/uni_modules/uv-drop-down/readme.md new file mode 100644 index 0000000..31cbd24 --- /dev/null +++ b/uni_modules/uv-drop-down/readme.md @@ -0,0 +1,23 @@ +## DropDown 下拉筛选 + +> **组件名:uv-drop-down** + +该组件主要提供筛选下拉筛选框,内置基础筛选功能,可以根据自己的需求自定义筛选项。 + +为了兼容app-nvue,需要内置三个组件进行配合使用,uv-drop-down属于菜单项(其实还包括子组件uv-drop-down-item),uv-drop-down-popup属于筛选框。 + +只需要做简单的约定式配置,即可使用该功能,兼容性良好,已经在多端进行了多次测试。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-empty/changelog.md b/uni_modules/uv-empty/changelog.md new file mode 100644 index 0000000..a1cc2ad --- /dev/null +++ b/uni_modules/uv-empty/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-20) +1. 优化 +## 1.0.4(2023-08-04) +1. icon支持base64图片 +## 1.0.3(2023-07-17) +1. 修复 uv-empty 恢复设置mode属性的内置图标 +## 1.0.2(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-empty 内容为空 diff --git a/uni_modules/uv-empty/components/uv-empty/props.js b/uni_modules/uv-empty/components/uv-empty/props.js new file mode 100644 index 0000000..26c282d --- /dev/null +++ b/uni_modules/uv-empty/components/uv-empty/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 内置图标名称,或图片路径,建议绝对路径 + icon: { + type: String, + default: '' + }, + // 提示文字 + text: { + type: String, + default: '' + }, + // 文字颜色 + textColor: { + type: String, + default: '#c0c4cc' + }, + // 文字大小 + textSize: { + type: [String, Number], + default: 14 + }, + // 图标的颜色 + iconColor: { + type: String, + default: '#c0c4cc' + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: 90 + }, + // 选择预置的图标类型 + mode: { + type: String, + default: 'data' + }, + // 图标宽度,单位px + width: { + type: [String, Number], + default: 160 + }, + // 图标高度,单位px + height: { + type: [String, Number], + default: 160 + }, + // 是否显示组件 + show: { + type: Boolean, + default: true + }, + // 组件距离上一个元素之间的距离,默认px单位 + marginTop: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.empty + } +} \ No newline at end of file diff --git a/uni_modules/uv-empty/components/uv-empty/uv-empty.vue b/uni_modules/uv-empty/components/uv-empty/uv-empty.vue new file mode 100644 index 0000000..22a9264 --- /dev/null +++ b/uni_modules/uv-empty/components/uv-empty/uv-empty.vue @@ -0,0 +1,126 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-empty/package.json b/uni_modules/uv-empty/package.json new file mode 100644 index 0000000..e10f451 --- /dev/null +++ b/uni_modules/uv-empty/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-empty", + "displayName": "uv-empty 内容为空 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个 没有内容 的场景, 我们精心挑选了十几个场景的图标,方便您使用。", + "keywords": [ + "empty", + "uvui", + "uv-ui", + "空数据", + "暂无数据" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-empty/readme.md b/uni_modules/uv-empty/readme.md new file mode 100644 index 0000000..ecef14d --- /dev/null +++ b/uni_modules/uv-empty/readme.md @@ -0,0 +1,19 @@ +## Empty 内容为空 + +> **组件名:uv-empty** + +该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, 我们精心挑选了十几个场景的图标,方便您使用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-form/changelog.md b/uni_modules/uv-form/changelog.md new file mode 100644 index 0000000..b229bca --- /dev/null +++ b/uni_modules/uv-form/changelog.md @@ -0,0 +1,23 @@ +## 1.0.9(2023-08-14) +1. 修复设置labelWidth属性时,节点渲染有闪动的BUG +## 1.0.8(2023-08-13) +1. 修复未设置rules的情况下报错的BUG +2. 优化错误提示 +## 1.0.7(2023-08-10) +1. 修复在vue3+setup语法糖中错误文字动画错乱 +## 1.0.6(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.5(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.4(2023-07-02) +uv-form 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.3(2023-06-18) +1. 修改某些情况下的BUG +## 1.0.2(2023-06-15) +1. 修复支付宝报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-form 表单 diff --git a/uni_modules/uv-form/components/uv-form-item/props.js b/uni_modules/uv-form/components/uv-form-item/props.js new file mode 100644 index 0000000..00a26bc --- /dev/null +++ b/uni_modules/uv-form/components/uv-form-item/props.js @@ -0,0 +1,49 @@ +export default { + props: { + // input的label提示语 + label: { + type: String, + default: '' + }, + // 绑定的值 + prop: { + type: String, + default: '' + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: [Boolean], + default: false + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: '' + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: '' + }, + // 右侧图标 + rightIcon: { + type: String, + default: '' + }, + // 左侧图标 + leftIcon: { + type: String, + default: '' + }, + // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 + required: { + type: Boolean, + default: false + }, + leftIconStyle: { + type: [String, Object], + default: '' + }, + ...uni.$uv?.props?.formItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue b/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue new file mode 100644 index 0000000..25d93ea --- /dev/null +++ b/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue @@ -0,0 +1,226 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/props.js b/uni_modules/uv-form/components/uv-form/props.js new file mode 100644 index 0000000..6cffb95 --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/props.js @@ -0,0 +1,46 @@ +export default { + props: { + // 当前form的需要验证字段的集合 + model: { + type: Object, + default: () => ({}) + }, + // 验证规则 + rules: { + type: [Object, Function, Array], + default: () => ({}) + }, + // 有错误时的提示方式,message-提示信息,toast-进行toast提示 + // border-bottom-下边框呈现红色,none-无提示 + errorType: { + type: String, + default: 'message' + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: Boolean, + default: true + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: 'left' + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: 45 + }, + // lable字体的对齐方式 + labelAlign: { + type: String, + default: 'left' + }, + // lable的样式,对象形式 + labelStyle: { + type: Object, + default: () => ({}) + }, + ...uni.$uv?.props?.form + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/uv-form.vue b/uni_modules/uv-form/components/uv-form/uv-form.vue new file mode 100644 index 0000000..bc0876f --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/uv-form.vue @@ -0,0 +1,209 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/valid.js b/uni_modules/uv-form/components/uv-form/valid.js new file mode 100644 index 0000000..9e114df --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/valid.js @@ -0,0 +1,1343 @@ +function _extends() { + _extends = Object.assign || function (target) { + for (let i = 1; i < arguments.length; i++) { + const source = arguments[i] + + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target + } + + return _extends.apply(this, arguments) +} + +/* eslint no-console:0 */ +const formatRegExp = /%[sdj%]/g +let warning = function warning() {} // don't print warning message when in production env or node runtime + +if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window + !== 'undefined' && typeof document !== 'undefined') { + warning = function warning(type, errors) { + if (typeof console !== 'undefined' && console.warn) { + if (errors.every((e) => typeof e === 'string')) { + console.warn(type, errors) + } + } + } +} + +function convertFieldsError(errors) { + if (!errors || !errors.length) return null + const fields = {} + errors.forEach((error) => { + const { field } = error + fields[field] = fields[field] || [] + fields[field].push(error) + }) + return fields +} + +function format() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key] + } + + let i = 1 + const f = args[0] + const len = args.length + + if (typeof f === 'function') { + return f.apply(null, args.slice(1)) + } + + if (typeof f === 'string') { + let str = String(f).replace(formatRegExp, (x) => { + if (x === '%%') { + return '%' + } + + if (i >= len) { + return x + } + + switch (x) { + case '%s': + return String(args[i++]) + + case '%d': + return Number(args[i++]) + + case '%j': + try { + return JSON.stringify(args[i++]) + } catch (_) { + return '[Circular]' + } + + break + + default: + return x + } + }) + + for (let arg = args[i]; i < len; arg = args[++i]) { + str += ` ${arg}` + } + + return str + } + + return f +} + +function isNativeStringType(type) { + return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern' +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true + } + + if (type === 'array' && Array.isArray(value) && !value.length) { + return true + } + + if (isNativeStringType(type) && typeof value === 'string' && !value) { + return true + } + + return false +} + +function asyncParallelArray(arr, func, callback) { + const results = [] + let total = 0 + const arrLength = arr.length + + function count(errors) { + results.push.apply(results, errors) + total++ + + if (total === arrLength) { + callback(results) + } + } + + arr.forEach((a) => { + func(a, count) + }) +} + +function asyncSerialArray(arr, func, callback) { + let index = 0 + const arrLength = arr.length + + function next(errors) { + if (errors && errors.length) { + callback(errors) + return + } + + const original = index + index += 1 + + if (original < arrLength) { + func(arr[original], next) + } else { + callback([]) + } + } + + next([]) +} + +function flattenObjArr(objArr) { + const ret = [] + Object.keys(objArr).forEach((k) => { + ret.push.apply(ret, objArr[k]) + }) + return ret +} + +function asyncMap(objArr, option, func, callback) { + if (option.first) { + const _pending = new Promise((resolve, reject) => { + const next = function next(errors) { + callback(errors) + return errors.length ? reject({ + errors, + fields: convertFieldsError(errors) + }) : resolve() + } + + const flattenArr = flattenObjArr(objArr) + asyncSerialArray(flattenArr, func, next) + }) + + _pending.catch((e) => e) + + return _pending + } + + let firstFields = option.firstFields || [] + + if (firstFields === true) { + firstFields = Object.keys(objArr) + } + + const objArrKeys = Object.keys(objArr) + const objArrLength = objArrKeys.length + let total = 0 + const results = [] + const pending = new Promise((resolve, reject) => { + const next = function next(errors) { + results.push.apply(results, errors) + total++ + + if (total === objArrLength) { + callback(results) + return results.length ? reject({ + errors: results, + fields: convertFieldsError(results) + }) : resolve() + } + } + + if (!objArrKeys.length) { + callback(results) + resolve() + } + + objArrKeys.forEach((key) => { + const arr = objArr[key] + + if (firstFields.indexOf(key) !== -1) { + asyncSerialArray(arr, func, next) + } else { + asyncParallelArray(arr, func, next) + } + }) + }) + pending.catch((e) => e) + return pending +} + +function complementError(rule) { + return function (oe) { + if (oe && oe.message) { + oe.field = oe.field || rule.fullField + return oe + } + + return { + message: typeof oe === 'function' ? oe() : oe, + field: oe.field || rule.fullField + } + } +} + +function deepMerge(target, source) { + if (source) { + for (const s in source) { + if (source.hasOwnProperty(s)) { + const value = source[s] + + if (typeof value === 'object' && typeof target[s] === 'object') { + target[s] = { ...target[s], ...value } + } else { + target[s] = value + } + } + } + } + + return target +} + +/** + * Rule for validating required fields. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function required(rule, value, source, errors, options, type) { + if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) { + errors.push(format(options.messages.required, rule.fullField)) + } +} + +/** + * Rule for validating whitespace. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function whitespace(rule, value, source, errors, options) { + if (/^\s+$/.test(value) || value === '') { + errors.push(format(options.messages.whitespace, rule.fullField)) + } +} + +/* eslint max-len:0 */ + +const pattern = { + // http://emailregex.com/ + email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + url: new RegExp( + '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', + 'i' + ), + hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i +} +var types = { + integer: function integer(value) { + return /^(-)?\d+$/.test(value); + }, + float: function float(value) { + return /^(-)?\d+(\.\d+)?$/.test(value); + }, + array: function array(value) { + return Array.isArray(value) + }, + regexp: function regexp(value) { + if (value instanceof RegExp) { + return true + } + + try { + return !!new RegExp(value) + } catch (e) { + return false + } + }, + date: function date(value) { + return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear + === 'function' + }, + number: function number(value) { + if (isNaN(value)) { + return false + } + + // 修改源码,将字符串数值先转为数值 + return typeof +value === 'number' + }, + object: function object(value) { + return typeof value === 'object' && !types.array(value) + }, + method: function method(value) { + return typeof value === 'function' + }, + email: function email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255 + }, + url: function url(value) { + return typeof value === 'string' && !!value.match(pattern.url) + }, + hex: function hex(value) { + return typeof value === 'string' && !!value.match(pattern.hex) + } +} +/** + * Rule for validating the type of a value. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function type(rule, value, source, errors, options) { + if (rule.required && value === undefined) { + required(rule, value, source, errors, options) + return + } + + const custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'] + const ruleType = rule.type + + if (custom.indexOf(ruleType) > -1) { + if (!types[ruleType](value)) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)) + } // straight typeof check + } else if (ruleType && typeof value !== rule.type) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)) + } +} + +/** + * Rule for validating minimum and maximum allowed values. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function range(rule, value, source, errors, options) { + const len = typeof rule.len === 'number' + const min = typeof rule.min === 'number' + const max = typeof rule.max === 'number' // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane) + + const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g + let val = value + let key = null + const num = typeof value === 'number' + const str = typeof value === 'string' + const arr = Array.isArray(value) + + if (num) { + key = 'number' + } else if (str) { + key = 'string' + } else if (arr) { + key = 'array' + } // if the value is not of a supported type for range validation + // the validation rule rule should use the + // type property to also test for a particular type + + if (!key) { + return false + } + + if (arr) { + val = value.length + } + + if (str) { + // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3 + val = value.replace(spRegexp, '_').length + } + + if (len) { + if (val !== rule.len) { + errors.push(format(options.messages[key].len, rule.fullField, rule.len)) + } + } else if (min && !max && val < rule.min) { + errors.push(format(options.messages[key].min, rule.fullField, rule.min)) + } else if (max && !min && val > rule.max) { + errors.push(format(options.messages[key].max, rule.fullField, rule.max)) + } else if (min && max && (val < rule.min || val > rule.max)) { + errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)) + } +} + +const ENUM = 'enum' +/** + * Rule for validating a value exists in an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable(rule, value, source, errors, options) { + rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [] + + if (rule[ENUM].indexOf(value) === -1) { + errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', '))) + } +} + +/** + * Rule for validating a regular expression pattern. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$1(rule, value, source, errors, options) { + if (rule.pattern) { + if (rule.pattern instanceof RegExp) { + // if a RegExp instance is passed, reset `lastIndex` in case its `global` + // flag is accidentally set to `true`, which in a validation scenario + // is not necessary and the result might be misleading + rule.pattern.lastIndex = 0 + + if (!rule.pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)) + } + } else if (typeof rule.pattern === 'string') { + const _pattern = new RegExp(rule.pattern) + + if (!_pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)) + } + } + } +} + +const rules = { + required, + whitespace, + type, + range, + enum: enumerable, + pattern: pattern$1 +} + +/** + * Performs validation for string types. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function string(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, 'string') + + if (!isEmptyValue(value, 'string')) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + rules.pattern(rule, value, source, errors, options) + + if (rule.whitespace === true) { + rules.whitespace(rule, value, source, errors, options) + } + } + } + + callback(errors) +} + +/** + * Validates a function. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function method(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function number(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (value === '') { + value = undefined + } + + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a boolean. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function _boolean(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates the regular expression type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function regexp(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value)) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number is an integer. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function integer(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number is a floating point number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function floatFn(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates an array. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function array(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'array') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, 'array') + + if (!isEmptyValue(value, 'array')) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates an object. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function object(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +const ENUM$1 = 'enum' +/** + * Validates an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable$1(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules[ENUM$1](rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a regular expression pattern. + * + * Performs validation when a rule only contains + * a pattern property but is not declared as a string type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$2(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value, 'string')) { + rules.pattern(rule, value, source, errors, options) + } + } + + callback(errors) +} + +function date(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value)) { + let dateObject + + if (typeof value === 'number') { + dateObject = new Date(value) + } else { + dateObject = value + } + + rules.type(rule, dateObject, source, errors, options) + + if (dateObject) { + rules.range(rule, dateObject.getTime(), source, errors, options) + } + } + } + + callback(errors) +} + +function required$1(rule, value, callback, source, options) { + const errors = [] + const type = Array.isArray(value) ? 'array' : typeof value + rules.required(rule, value, source, errors, options, type) + callback(errors) +} + +function type$1(rule, value, callback, source, options) { + const ruleType = rule.type + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, ruleType) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, ruleType) + + if (!isEmptyValue(value, ruleType)) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Performs validation for any type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function any(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + } + + callback(errors) +} + +const validators = { + string, + method, + number, + boolean: _boolean, + regexp, + integer, + float: floatFn, + array, + object, + enum: enumerable$1, + pattern: pattern$2, + date, + url: type$1, + hex: type$1, + email: type$1, + required: required$1, + any +} + +function newMessages() { + return { + default: 'Validation error on field %s', + required: '%s is required', + enum: '%s must be one of %s', + whitespace: '%s cannot be empty', + date: { + format: '%s date %s is invalid for format %s', + parse: '%s date could not be parsed, %s is invalid ', + invalid: '%s date %s is invalid' + }, + types: { + string: '%s is not a %s', + method: '%s is not a %s (function)', + array: '%s is not an %s', + object: '%s is not an %s', + number: '%s is not a %s', + date: '%s is not a %s', + boolean: '%s is not a %s', + integer: '%s is not an %s', + float: '%s is not a %s', + regexp: '%s is not a valid %s', + email: '%s is not a valid %s', + url: '%s is not a valid %s', + hex: '%s is not a valid %s' + }, + string: { + len: '%s must be exactly %s characters', + min: '%s must be at least %s characters', + max: '%s cannot be longer than %s characters', + range: '%s must be between %s and %s characters' + }, + number: { + len: '%s must equal %s', + min: '%s cannot be less than %s', + max: '%s cannot be greater than %s', + range: '%s must be between %s and %s' + }, + array: { + len: '%s must be exactly %s in length', + min: '%s cannot be less than %s in length', + max: '%s cannot be greater than %s in length', + range: '%s must be between %s and %s in length' + }, + pattern: { + mismatch: '%s value %s does not match pattern %s' + }, + clone: function clone() { + const cloned = JSON.parse(JSON.stringify(this)) + cloned.clone = this.clone + return cloned + } + } +} +const messages = newMessages() + +/** + * Encapsulates a validation schema. + * + * @param descriptor An object declaring validation rules + * for this schema. + */ + +function Schema(descriptor) { + this.rules = null + this._messages = messages + this.define(descriptor) +} + +Schema.prototype = { + messages: function messages(_messages) { + if (_messages) { + this._messages = deepMerge(newMessages(), _messages) + } + + return this._messages + }, + define: function define(rules) { + if (!rules) { + throw new Error('Cannot configure a schema with no rules') + } + + if (typeof rules !== 'object' || Array.isArray(rules)) { + throw new Error('Rules must be an object') + } + + this.rules = {} + let z + let item + + for (z in rules) { + if (rules.hasOwnProperty(z)) { + item = rules[z] + this.rules[z] = Array.isArray(item) ? item : [item] + } + } + }, + validate: function validate(source_, o, oc) { + const _this = this + + if (o === void 0) { + o = {} + } + + if (oc === void 0) { + oc = function oc() {} + } + + let source = source_ + let options = o + let callback = oc + + if (typeof options === 'function') { + callback = options + options = {} + } + + if (!this.rules || Object.keys(this.rules).length === 0) { + if (callback) { + callback() + } + + return Promise.resolve() + } + + function complete(results) { + let i + let errors = [] + let fields = {} + + function add(e) { + if (Array.isArray(e)) { + let _errors + + errors = (_errors = errors).concat.apply(_errors, e) + } else { + errors.push(e) + } + } + + for (i = 0; i < results.length; i++) { + add(results[i]) + } + + if (!errors.length) { + errors = null + fields = null + } else { + fields = convertFieldsError(errors) + } + + callback(errors, fields) + } + + if (options.messages) { + let messages$1 = this.messages() + + if (messages$1 === messages) { + messages$1 = newMessages() + } + + deepMerge(messages$1, options.messages) + options.messages = messages$1 + } else { + options.messages = this.messages() + } + + let arr + let value + const series = {} + const keys = options.keys || Object.keys(this.rules) + keys.forEach((z) => { + arr = _this.rules[z] + value = source[z] + arr.forEach((r) => { + let rule = r + + if (typeof rule.transform === 'function') { + if (source === source_) { + source = { ...source } + } + + value = source[z] = rule.transform(value) + } + + if (typeof rule === 'function') { + rule = { + validator: rule + } + } else { + rule = { ...rule } + } + + rule.validator = _this.getValidationMethod(rule) + rule.field = z + rule.fullField = rule.fullField || z + rule.type = _this.getType(rule) + + if (!rule.validator) { + return + } + + series[z] = series[z] || [] + series[z].push({ + rule, + value, + source, + field: z + }) + }) + }) + const errorFields = {} + return asyncMap(series, options, (data, doIt) => { + const { rule } = data + let deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField + === 'object') + deep = deep && (rule.required || !rule.required && data.value) + rule.field = data.field + + function addFullfield(key, schema) { + return { ...schema, fullField: `${rule.fullField}.${key}` } + } + + function cb(e) { + if (e === void 0) { + e = [] + } + + let errors = e + + if (!Array.isArray(errors)) { + errors = [errors] + } + + if (!options.suppressWarning && errors.length) { + Schema.warning('async-validator:', errors) + } + + if (errors.length && rule.message) { + errors = [].concat(rule.message) + } + + errors = errors.map(complementError(rule)) + + if (options.first && errors.length) { + errorFields[rule.field] = 1 + return doIt(errors) + } + + if (!deep) { + doIt(errors) + } else { + // if rule is required but the target object + // does not exist fail at the rule level and don't + // go deeper + if (rule.required && !data.value) { + if (rule.message) { + errors = [].concat(rule.message).map(complementError(rule)) + } else if (options.error) { + errors = [options.error(rule, format(options.messages.required, rule.field))] + } else { + errors = [] + } + + return doIt(errors) + } + + let fieldsSchema = {} + + if (rule.defaultField) { + for (const k in data.value) { + if (data.value.hasOwnProperty(k)) { + fieldsSchema[k] = rule.defaultField + } + } + } + + fieldsSchema = { ...fieldsSchema, ...data.rule.fields } + + for (const f in fieldsSchema) { + if (fieldsSchema.hasOwnProperty(f)) { + const fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]] + fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f)) + } + } + + const schema = new Schema(fieldsSchema) + schema.messages(options.messages) + + if (data.rule.options) { + data.rule.options.messages = options.messages + data.rule.options.error = options.error + } + + schema.validate(data.value, data.rule.options || options, (errs) => { + const finalErrors = [] + + if (errors && errors.length) { + finalErrors.push.apply(finalErrors, errors) + } + + if (errs && errs.length) { + finalErrors.push.apply(finalErrors, errs) + } + + doIt(finalErrors.length ? finalErrors : null) + }) + } + } + + let res + + if (rule.asyncValidator) { + res = rule.asyncValidator(rule, data.value, cb, data.source, options) + } else if (rule.validator) { + res = rule.validator(rule, data.value, cb, data.source, options) + + if (res === true) { + cb() + } else if (res === false) { + cb(rule.message || `${rule.field} fails`) + } else if (res instanceof Array) { + cb(res) + } else if (res instanceof Error) { + cb(res.message) + } + } + + if (res && res.then) { + res.then(() => cb(), (e) => cb(e)) + } + }, (results) => { + complete(results) + }) + }, + getType: function getType(rule) { + if (rule.type === undefined && rule.pattern instanceof RegExp) { + rule.type = 'pattern' + } + + if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) { + throw new Error(format('Unknown rule type %s', rule.type)) + } + + return rule.type || 'string' + }, + getValidationMethod: function getValidationMethod(rule) { + if (typeof rule.validator === 'function') { + return rule.validator + } + + const keys = Object.keys(rule) + const messageIndex = keys.indexOf('message') + + if (messageIndex !== -1) { + keys.splice(messageIndex, 1) + } + + if (keys.length === 1 && keys[0] === 'required') { + return validators.required + } + + return validators[this.getType(rule)] || false + } +} + +Schema.register = function register(type, validator) { + if (typeof validator !== 'function') { + throw new Error('Cannot register a validator by type, validator is not a function') + } + + validators[type] = validator +} + +Schema.warning = warning +Schema.messages = messages + +export default Schema +// # sourceMappingURL=index.js.map diff --git a/uni_modules/uv-form/package.json b/uni_modules/uv-form/package.json new file mode 100644 index 0000000..5e612c2 --- /dev/null +++ b/uni_modules/uv-form/package.json @@ -0,0 +1,93 @@ +{ + "id": "uv-form", + "displayName": "uv-form 表单 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "此组件一般用于表单场景,可以配置Input输入框,Textarea文本域,Checkbox复选框,Radio单选框,开关选择器等,进行表单验证等。", + "keywords": [ + "form", + "uvui", + "uv-ui", + "表单", + "表单验证" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-line", + "uv-transition", + "uv-action-sheet", + "uv-input", + "uv-button" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/readme.md b/uni_modules/uv-form/readme.md new file mode 100644 index 0000000..0458a6a --- /dev/null +++ b/uni_modules/uv-form/readme.md @@ -0,0 +1,19 @@ +## Form 表单 + +> **组件名:uv-form** + +此组件一般用于表单场景,可以配置`Input`输入框,`Textarea`文本域,`Checkbox`复选框,`Radio`单选框,开关选择器等,进行表单验证等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-gap/changelog.md b/uni_modules/uv-gap/changelog.md new file mode 100644 index 0000000..7d603b4 --- /dev/null +++ b/uni_modules/uv-gap/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增间隔槽组件 diff --git a/uni_modules/uv-gap/components/uv-gap/props.js b/uni_modules/uv-gap/components/uv-gap/props.js new file mode 100644 index 0000000..0ad787c --- /dev/null +++ b/uni_modules/uv-gap/components/uv-gap/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 背景颜色(默认transparent) + bgColor: { + type: String, + default: 'transparent' + }, + // 分割槽高度,单位px(默认20) + height: { + type: [String, Number], + default: 20 + }, + // 与上一个组件的距离 + marginTop: { + type: [String, Number], + default: 0 + }, + // 与下一个组件的距离 + marginBottom: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.gap + } +} \ No newline at end of file diff --git a/uni_modules/uv-gap/components/uv-gap/uv-gap.vue b/uni_modules/uv-gap/components/uv-gap/uv-gap.vue new file mode 100644 index 0000000..55720a1 --- /dev/null +++ b/uni_modules/uv-gap/components/uv-gap/uv-gap.vue @@ -0,0 +1,36 @@ + + + diff --git a/uni_modules/uv-gap/package.json b/uni_modules/uv-gap/package.json new file mode 100644 index 0000000..3a17ec3 --- /dev/null +++ b/uni_modules/uv-gap/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-gap", + "displayName": "uv-gap 间隔槽 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "该组件一般用于内容块之间的用一个灰色块隔开的场景,方便用户风格统一,减少工作量。", + "keywords": [ + "gap", + "uvui", + "uv-ui", + "间隔槽", + "内容块" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-gap/readme.md b/uni_modules/uv-gap/readme.md new file mode 100644 index 0000000..dedd565 --- /dev/null +++ b/uni_modules/uv-gap/readme.md @@ -0,0 +1,12 @@ +## Gap 间隔槽 + +> **组件名:uv-gap** + +该组件一般用于内容块之间的用一个灰色块隔开的场景,方便用户风格统一,减少工作量。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 + diff --git a/uni_modules/uv-grid/changelog.md b/uni_modules/uv-grid/changelog.md new file mode 100644 index 0000000..8c61261 --- /dev/null +++ b/uni_modules/uv-grid/changelog.md @@ -0,0 +1,21 @@ +## 1.0.9(2023-12-06) +1. 优化 +## 1.0.8(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.7(2023-10-13) +1. unmounted兼容vue3 +## 1.0.6(2023-08-14) +1. 修复初始的时候闪动的BUG +## 1.0.5(2023-06-22) +1. 优化修改 +## 1.0.4(2023-06-21) +1. 修复BUG +## 1.0.3(2023-06-01) +1. 修复点击触发两次事件的BUG +## 1.0.2(2023-05-23) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-grid 宫格布局 diff --git a/uni_modules/uv-grid/components/uv-grid-item/props.js b/uni_modules/uv-grid/components/uv-grid-item/props.js new file mode 100644 index 0000000..6b86298 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid-item/props.js @@ -0,0 +1,15 @@ +export default { + props: { + // 宫格的name + name: { + type: [String, Number, null], + default: null + }, + // 背景颜色 + bgColor: { + type: String, + default: 'transparent' + }, + ...uni.$uv?.props?.gridItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue b/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue new file mode 100644 index 0000000..9412852 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/uni_modules/uv-grid/components/uv-grid/props.js b/uni_modules/uv-grid/components/uv-grid/props.js new file mode 100644 index 0000000..d5f8474 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 分成几列 + col: { + type: [String, Number], + default: 3 + }, + // 是否显示边框 + border: { + type: Boolean, + default: false + }, + // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 + align: { + type: String, + default: 'left' + }, + ...uni.$uv?.props?.grid + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/components/uv-grid/uv-grid.vue b/uni_modules/uv-grid/components/uv-grid/uv-grid.vue new file mode 100644 index 0000000..0314b18 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid/uv-grid.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/uni_modules/uv-grid/package.json b/uni_modules/uv-grid/package.json new file mode 100644 index 0000000..0c93379 --- /dev/null +++ b/uni_modules/uv-grid/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-grid", + "displayName": "uv-grid 宫格布局 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "uv-grid 宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。", + "keywords": [ + "uv-grid", + "uvui", + "uv-ui", + "宫格布局", + "grid" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/readme.md b/uni_modules/uv-grid/readme.md new file mode 100644 index 0000000..cd13cef --- /dev/null +++ b/uni_modules/uv-grid/readme.md @@ -0,0 +1,17 @@ +## Grid 宫格布局 + +> **组件名:uv-grid** + +宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。 + +# 查看文档 + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-icon/changelog.md b/uni_modules/uv-icon/changelog.md new file mode 100644 index 0000000..c610827 --- /dev/null +++ b/uni_modules/uv-icon/changelog.md @@ -0,0 +1,31 @@ +## 1.0.13(2023-12-06) +1. 优化 +## 1.0.12(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.11(2023-10-29) +1. imgMode默认值改成aspectFit +## 1.0.10(2023-08-13) +1. 优化nvue,方便自定义图标 +## 1.0.9(2023-07-28) +1. 修改几个对应错误图标的BUG +## 1.0.8(2023-07-24) +1. 优化 支持base64图片 +## 1.0.7(2023-07-17) +1. 修复 uv-icon 恢复uv-empty相关的图标 +## 1.0.6(2023-07-13) +1. 修复icon设置name属性对应图标错误的BUG +## 1.0.5(2023-07-04) +1. 更新图标,删除一些不常用的图标 +2. 删除base64,修改成ttf文件引入读取图标 +3. 自定义图标文档说明:https://www.uvui.cn/guide/customIcon.html +## 1.0.4(2023-07-03) +1. 修复主题颜色在APP不生效的BUG +## 1.0.3(2023-05-24) +1. 将线上ttf字体包替换成base64,避免加载时或者网络差时候显示白色方块 +## 1.0.2(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.1(2023-05-10) +1. 修复小程序中异常显示 +## 1.0.0(2023-05-04) +新发版 diff --git a/uni_modules/uv-icon/components/uv-icon/icons.js b/uni_modules/uv-icon/components/uv-icon/icons.js new file mode 100644 index 0000000..8469a2d --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/icons.js @@ -0,0 +1,160 @@ +export default { + 'uvicon-level': 'e68f', + 'uvicon-checkbox-mark': 'e659', + 'uvicon-folder': 'e694', + 'uvicon-movie': 'e67c', + 'uvicon-star-fill': 'e61e', + 'uvicon-star': 'e618', + 'uvicon-phone-fill': 'e6ac', + 'uvicon-phone': 'e6ba', + 'uvicon-apple-fill': 'e635', + 'uvicon-backspace': 'e64d', + 'uvicon-attach': 'e640', + 'uvicon-empty-data': 'e671', + 'uvicon-empty-address': 'e68a', + 'uvicon-empty-favor': 'e662', + 'uvicon-empty-car': 'e657', + 'uvicon-empty-order': 'e66b', + 'uvicon-empty-list': 'e672', + 'uvicon-empty-search': 'e677', + 'uvicon-empty-permission': 'e67d', + 'uvicon-empty-news': 'e67e', + 'uvicon-empty-history': 'e685', + 'uvicon-empty-coupon': 'e69b', + 'uvicon-empty-page': 'e60e', + 'uvicon-empty-wifi-off': 'e6cc', + 'uvicon-reload': 'e627', + 'uvicon-order': 'e695', + 'uvicon-server-man': 'e601', + 'uvicon-search': 'e632', + 'uvicon-more-dot-fill': 'e66f', + 'uvicon-scan': 'e631', + 'uvicon-map': 'e665', + 'uvicon-map-fill': 'e6a8', + 'uvicon-tags': 'e621', + 'uvicon-tags-fill': 'e613', + 'uvicon-eye': 'e664', + 'uvicon-eye-fill': 'e697', + 'uvicon-eye-off': 'e69c', + 'uvicon-eye-off-outline': 'e688', + 'uvicon-mic': 'e66d', + 'uvicon-mic-off': 'e691', + 'uvicon-calendar': 'e65c', + 'uvicon-trash': 'e623', + 'uvicon-trash-fill': 'e6ce', + 'uvicon-play-left': 'e6bf', + 'uvicon-play-right': 'e6b3', + 'uvicon-minus': 'e614', + 'uvicon-plus': 'e625', + 'uvicon-info-circle': 'e69f', + 'uvicon-info-circle-fill': 'e6a7', + 'uvicon-question-circle': 'e622', + 'uvicon-question-circle-fill': 'e6bc', + 'uvicon-close': 'e65a', + 'uvicon-checkmark': 'e64a', + 'uvicon-checkmark-circle': 'e643', + 'uvicon-checkmark-circle-fill': 'e668', + 'uvicon-setting': 'e602', + 'uvicon-setting-fill': 'e6d0', + 'uvicon-heart': 'e6a2', + 'uvicon-heart-fill': 'e68b', + 'uvicon-camera': 'e642', + 'uvicon-camera-fill': 'e650', + 'uvicon-more-circle': 'e69e', + 'uvicon-more-circle-fill': 'e684', + 'uvicon-chat': 'e656', + 'uvicon-chat-fill': 'e63f', + 'uvicon-bag': 'e647', + 'uvicon-error-circle': 'e66e', + 'uvicon-error-circle-fill': 'e655', + 'uvicon-close-circle': 'e64e', + 'uvicon-close-circle-fill': 'e666', + 'uvicon-share': 'e629', + 'uvicon-share-fill': 'e6bb', + 'uvicon-share-square': 'e6c4', + 'uvicon-shopping-cart': 'e6cb', + 'uvicon-shopping-cart-fill': 'e630', + 'uvicon-bell': 'e651', + 'uvicon-bell-fill': 'e604', + 'uvicon-list': 'e690', + 'uvicon-list-dot': 'e6a9', + 'uvicon-zhifubao-circle-fill': 'e617', + 'uvicon-weixin-circle-fill': 'e6cd', + 'uvicon-weixin-fill': 'e620', + 'uvicon-qq-fill': 'e608', + 'uvicon-qq-circle-fill': 'e6b9', + 'uvicon-moments-circel-fill': 'e6c2', + 'uvicon-moments': 'e6a0', + 'uvicon-car': 'e64f', + 'uvicon-car-fill': 'e648', + 'uvicon-warning-fill': 'e6c7', + 'uvicon-warning': 'e6c1', + 'uvicon-clock-fill': 'e64b', + 'uvicon-clock': 'e66c', + 'uvicon-edit-pen': 'e65d', + 'uvicon-edit-pen-fill': 'e679', + 'uvicon-email': 'e673', + 'uvicon-email-fill': 'e683', + 'uvicon-minus-circle': 'e6a5', + 'uvicon-plus-circle': 'e603', + 'uvicon-plus-circle-fill': 'e611', + 'uvicon-file-text': 'e687', + 'uvicon-file-text-fill': 'e67f', + 'uvicon-pushpin': 'e6d1', + 'uvicon-pushpin-fill': 'e6b6', + 'uvicon-grid': 'e68c', + 'uvicon-grid-fill': 'e698', + 'uvicon-play-circle': 'e6af', + 'uvicon-play-circle-fill': 'e62a', + 'uvicon-pause-circle-fill': 'e60c', + 'uvicon-pause': 'e61c', + 'uvicon-pause-circle': 'e696', + 'uvicon-gift-fill': 'e6b0', + 'uvicon-gift': 'e680', + 'uvicon-kefu-ermai': 'e660', + 'uvicon-server-fill': 'e610', + 'uvicon-coupon-fill': 'e64c', + 'uvicon-coupon': 'e65f', + 'uvicon-integral': 'e693', + 'uvicon-integral-fill': 'e6b1', + 'uvicon-home-fill': 'e68e', + 'uvicon-home': 'e67b', + 'uvicon-account': 'e63a', + 'uvicon-account-fill': 'e653', + 'uvicon-thumb-down-fill': 'e628', + 'uvicon-thumb-down': 'e60a', + 'uvicon-thumb-up': 'e612', + 'uvicon-thumb-up-fill': 'e62c', + 'uvicon-lock-fill': 'e6a6', + 'uvicon-lock-open': 'e68d', + 'uvicon-lock-opened-fill': 'e6a1', + 'uvicon-lock': 'e69d', + 'uvicon-red-packet': 'e6c3', + 'uvicon-photo-fill': 'e6b4', + 'uvicon-photo': 'e60d', + 'uvicon-volume-off-fill': 'e6c8', + 'uvicon-volume-off': 'e6bd', + 'uvicon-volume-fill': 'e624', + 'uvicon-volume': 'e605', + 'uvicon-download': 'e670', + 'uvicon-arrow-up-fill': 'e636', + 'uvicon-arrow-down-fill': 'e638', + 'uvicon-play-left-fill': 'e6ae', + 'uvicon-play-right-fill': 'e6ad', + 'uvicon-arrow-downward': 'e634', + 'uvicon-arrow-leftward': 'e63b', + 'uvicon-arrow-rightward': 'e644', + 'uvicon-arrow-upward': 'e641', + 'uvicon-arrow-down': 'e63e', + 'uvicon-arrow-right': 'e63c', + 'uvicon-arrow-left': 'e646', + 'uvicon-arrow-up': 'e633', + 'uvicon-skip-back-left': 'e6c5', + 'uvicon-skip-forward-right': 'e61f', + 'uvicon-arrow-left-double': 'e637', + 'uvicon-man': 'e675', + 'uvicon-woman': 'e626', + 'uvicon-en': 'e6b8', + 'uvicon-twitte': 'e607', + 'uvicon-twitter-circle-fill': 'e6cf' +} \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/props.js b/uni_modules/uv-icon/components/uv-icon/props.js new file mode 100644 index 0000000..7668cf9 --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/props.js @@ -0,0 +1,90 @@ +export default { + props: { + // 图标类名 + name: { + type: String, + default: '' + }, + // 图标颜色,可接受主题色 + color: { + type: String, + default: '#606266' + }, + // 字体大小,单位px + size: { + type: [String, Number], + default: '16px' + }, + // 是否显示粗体 + bold: { + type: Boolean, + default: false + }, + // 点击图标的时候传递事件出去的index(用于区分点击了哪一个) + index: { + type: [String, Number], + default: null + }, + // 触摸图标时的类名 + hoverClass: { + type: String, + default: '' + }, + // 自定义扩展前缀,方便用户扩展自己的图标库 + customPrefix: { + type: String, + default: 'uvicon' + }, + // 图标右边或者下面的文字 + label: { + type: [String, Number], + default: '' + }, + // label的位置,只能右边或者下边 + labelPos: { + type: String, + default: 'right' + }, + // label的大小 + labelSize: { + type: [String, Number], + default: '15px' + }, + // label的颜色 + labelColor: { + type: String, + default: '#606266' + }, + // label与图标的距离 + space: { + type: [String, Number], + default: '3px' + }, + // 图片的mode + imgMode: { + type: String, + default: 'aspectFit' + }, + // 用于显示图片小图标时,图片的宽度 + width: { + type: [String, Number], + default: '' + }, + // 用于显示图片小图标时,图片的高度 + height: { + type: [String, Number], + default: '' + }, + // 用于解决某些情况下,让图标垂直居中的用途 + top: { + type: [String, Number], + default: 0 + }, + // 是否阻止事件传播 + stop: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.icon + } +} \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/uv-icon.vue b/uni_modules/uv-icon/components/uv-icon/uv-icon.vue new file mode 100644 index 0000000..d61c9e5 --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/uv-icon.vue @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/uvicons.ttf b/uni_modules/uv-icon/components/uv-icon/uvicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9aedef864f7e685fbe1dac7e0f36fda281d35a7c GIT binary patch literal 39632 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 literal 0 HcmV?d00001 diff --git a/uni_modules/uv-icon/package.json b/uni_modules/uv-icon/package.json new file mode 100644 index 0000000..0a838d5 --- /dev/null +++ b/uni_modules/uv-icon/package.json @@ -0,0 +1,83 @@ +{ + "id": "uv-icon", + "displayName": "uv-icon 图标 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.13", + "description": "基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。可自定义颜色、大小。", + "keywords": [ + "uv-ui,uvui,uv-icon,icon,图标,字体图标" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-icon/readme.md b/uni_modules/uv-icon/readme.md new file mode 100644 index 0000000..d526e1a --- /dev/null +++ b/uni_modules/uv-icon/readme.md @@ -0,0 +1,15 @@ +## uv-icon 图标库 + +> **组件名:uv-icon** + +基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 diff --git a/uni_modules/uv-image/changelog.md b/uni_modules/uv-image/changelog.md new file mode 100644 index 0000000..e5a633d --- /dev/null +++ b/uni_modules/uv-image/changelog.md @@ -0,0 +1,36 @@ +## 1.0.16(2023-12-21) +1. 修复设置show-menu-by-longpress不生效的BUG +## 1.0.15(2023-12-06) +1. 优化 +## 1.0.14(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.13(2023-11-15) +1. 修复webp之前未使用的BUG +## 1.0.12(2023-10-11) +1. 修复懒加载报错:https://gitee.com/climblee/uv-ui/issues/I869JS +## 1.0.11(2023-08-31) +1. 修复设置widthFix时出现显示不全的BUG +2. 修复抖音等平台在width和height属性改变时出现不显示的BUG +## 1.0.10(2023-08-29) +1. 修复异步修改宽高不生效的问题,问题来源:https://gitee.com/climblee/uv-ui/issues/I7WUQ3 +## 1.0.9(2023-08-21) +1. 修复设置宽高为百分比不生效的BUG +## 1.0.8(2023-07-24) +1. 优化 nvue模式下增加cellChild参数,是否在list中cell节点下,nvue中cell下建议设置成true +## 1.0.7(2023-07-02) +修复VUE3模式下可能不显示的BUG +## 1.0.6(2023-07-02) +优化修改 +## 1.0.5(2023-06-28) +修复duration属性不生效的BUG +## 1.0.4(2023-05-27) +1. 修复可能报错的问题 +## 1.0.3(2023-05-24) +1. 去掉template中存在的this.导致头条小程序编译警告 +## 1.0.2(2023-05-23) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-image 图片 diff --git a/uni_modules/uv-image/components/uv-image/props.js b/uni_modules/uv-image/components/uv-image/props.js new file mode 100644 index 0000000..6ef04a5 --- /dev/null +++ b/uni_modules/uv-image/components/uv-image/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 图片地址 + src: { + type: String, + default: '' + }, + // 裁剪模式 + mode: { + type: String, + default: 'aspectFill' + }, + // 宽度,单位任意 + width: { + type: [String, Number], + default: '300' + }, + // 高度,单位任意 + height: { + type: [String, Number], + default: '225' + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: 0 + }, + // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序 + lazyLoad: { + type: Boolean, + default: true + }, + // 是否开启observer懒加载,nvue不生效 + observeLazyLoad: { + type: Boolean, + default: false + }, + // 开启长按图片显示识别微信小程序码菜单 + showMenuByLongpress: { + type: Boolean, + default: true + }, + // 加载中的图标,或者小图片 + loadingIcon: { + type: String, + default: 'photo' + }, + // 加载失败的图标,或者小图片 + errorIcon: { + type: String, + default: 'error-circle' + }, + // 是否显示加载中的图标或者自定义的slot + showLoading: { + type: Boolean, + default: true + }, + // 是否显示加载错误的图标或者自定义的slot + showError: { + type: Boolean, + default: true + }, + // 是否需要淡入效果 + fade: { + type: Boolean, + default: true + }, + // 只支持网络资源,只对微信小程序有效 + webp: { + type: Boolean, + default: false + }, + // 过渡时间,单位ms + duration: { + type: [String, Number], + default: 500 + }, + // 背景颜色,用于深色页面加载图片时,为了和背景色融合 + bgColor: { + type: String, + default: '#f3f4f6' + }, + // nvue模式下 是否直接显示,在uv-list等cell下面使用就需要设置 + cellChild: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.image + } +} \ No newline at end of file diff --git a/uni_modules/uv-image/components/uv-image/uv-image.vue b/uni_modules/uv-image/components/uv-image/uv-image.vue new file mode 100644 index 0000000..2ab4a78 --- /dev/null +++ b/uni_modules/uv-image/components/uv-image/uv-image.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/uni_modules/uv-image/package.json b/uni_modules/uv-image/package.json new file mode 100644 index 0000000..796089e --- /dev/null +++ b/uni_modules/uv-image/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-image", + "displayName": "uv-image 图片 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.16", + "description": "uv-image 此组件为uni-app的image组件的加强版,在继承了原有功能外,增加observer懒加载功能,还支持淡入动画、加载中、加载失败提示、圆角值和形状等。", + "keywords": [ + "uv-image", + "uvui", + "uv-ui", + "image", + "图片" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-image/readme.md b/uni_modules/uv-image/readme.md new file mode 100644 index 0000000..0ecc120 --- /dev/null +++ b/uni_modules/uv-image/readme.md @@ -0,0 +1,15 @@ +## Image 图片 + +> **组件名:uv-image** + +此组件为`uni-app`的`image`组件的加强版,在继承了原有功能外,增加`observer`懒加载功能,还支持淡入动画、加载中、加载失败提示、圆角值和形状等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 diff --git a/uni_modules/uv-index-list/changelog.md b/uni_modules/uv-index-list/changelog.md new file mode 100644 index 0000000..deda715 --- /dev/null +++ b/uni_modules/uv-index-list/changelog.md @@ -0,0 +1,18 @@ +## 1.0.7(2023-11-07) +1. 修复sticky属性不生效的BUG +## 1.0.6(2023-09-01) +1. 修复设置customNavHeight导致定位不准确的BUG +## 1.0.5(2023-08-23) +1. 修复ios端快速滑动+点击右侧导航会出现白屏的BUG +## 1.0.4(2023-07-25) +1. 修复全局设置成rpx存在的高度BUG +2. 修复其他BUG +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-05-27) +1. select事件修复 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-index-list 索引列表 diff --git a/uni_modules/uv-index-list/components/uv-index-anchor/props.js b/uni_modules/uv-index-list/components/uv-index-anchor/props.js new file mode 100644 index 0000000..9ec949e --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-anchor/props.js @@ -0,0 +1,30 @@ +export default { + props: { + // 列表锚点文本内容 + text: { + type: [String, Number], + default: '' + }, + // 列表锚点文字颜色 + color: { + type: String, + default: '#606266' + }, + // 列表锚点文字大小,单位默认px + size: { + type: [String, Number], + default: 14 + }, + // 列表锚点背景颜色 + bgColor: { + type: String, + default: '#dedede' + }, + // 列表锚点高度,单位默认px + height: { + type: [String, Number], + default: 32 + }, + ...uni.$uv?.props?.indexAnchor + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue b/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue new file mode 100644 index 0000000..e566aa7 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue b/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue new file mode 100644 index 0000000..f6e8901 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/uni_modules/uv-index-list/components/uv-index-list/props.js b/uni_modules/uv-index-list/components/uv-index-list/props.js new file mode 100644 index 0000000..0cf6356 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-list/props.js @@ -0,0 +1,30 @@ +export default { + props: { + // 右边锚点非激活的颜色 + inactiveColor: { + type: String, + default: '#606266' + }, + // 右边锚点激活的颜色 + activeColor: { + type: String, + default: '#5677fc' + }, + // 索引字符列表,数组形式 + indexList: { + type: Array, + default: () => [] + }, + // 是否开启锚点自动吸顶 + sticky: { + type: Boolean, + default: true + }, + // 自定义导航栏的高度 + customNavHeight: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.indexList + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue b/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue new file mode 100644 index 0000000..e610323 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/uni_modules/uv-index-list/package.json b/uni_modules/uv-index-list/package.json new file mode 100644 index 0000000..133736b --- /dev/null +++ b/uni_modules/uv-index-list/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-index-list", + "displayName": "uv-index-list 索引列表 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "该组件用于展示索引列表,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景。类似于微信通讯录页面", + "keywords": [ + "uv-index-list", + "uvui", + "uv-ui", + "index-list", + "索引列表" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/readme.md b/uni_modules/uv-index-list/readme.md new file mode 100644 index 0000000..605741c --- /dev/null +++ b/uni_modules/uv-index-list/readme.md @@ -0,0 +1,19 @@ +## IndexList 索引列表 + +> **组件名:uv-index-list** + +用于展示索引列表,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景,类似于微信通讯录页面。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-input/changelog.md b/uni_modules/uv-input/changelog.md new file mode 100644 index 0000000..2b354d0 --- /dev/null +++ b/uni_modules/uv-input/changelog.md @@ -0,0 +1,29 @@ +## 1.0.13(2023-12-06) +1. 优化 +## 1.0.12(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.11(2023-11-10) +1. 调整清除按钮样式的marginLeft,避免微信上多数情况触发不了的BUG +## 1.0.10(2023-10-07) +1. 修复搜狗输入法下存在不可清空的情况 +## 1.0.9(2023-09-14) +1. 修复H5等情况设置禁用或可读情况下,点击事件无效的问题 +## 1.0.8(2023-08-22) +1. 修复无法@keyboardheightchange无法获取键盘高度的BUG +## 1.0.7(2023-08-18) +1. 修复ios端不能输入的BUG +## 1.0.6(2023-08-05) +1. 修复在vue2模式下,v-model设置为0时不生效的BUG +## 1.0.5(2023-07-18) +1. 修复在微信小程序端清除内容存在不能清除的BUG +## 1.0.4(2023-07-13) +1. 修复value/v-model更改不生效的BUG +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.1(2023-05-12) +1. 修复vue3双向绑定的BUG +## 1.0.0(2023-05-10) +uv-input 输入框 diff --git a/uni_modules/uv-input/components/uv-input/props.js b/uni_modules/uv-input/components/uv-input/props.js new file mode 100644 index 0000000..e969493 --- /dev/null +++ b/uni_modules/uv-input/components/uv-input/props.js @@ -0,0 +1,175 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 输入框类型 + // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数 + // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序 + // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序 + // text-文本输入键盘 + type: { + type: String, + default: 'text' + }, + // 是否禁用输入框 + disabled: { + type: Boolean, + default: false + }, + // 禁用状态时的背景色 + disabledColor: { + type: String, + default: '#f5f7fa' + }, + // 是否显示清除控件 + clearable: { + type: Boolean, + default: false + }, + // 是否密码类型 + password: { + type: Boolean, + default: false + }, + // 最大输入长度,设置为 -1 的时候不限制最大长度 + maxlength: { + type: [String, Number], + default: -1 + }, + // 输入框为空时的占位符 + placeholder: { + type: String, + default: null + }, + // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ + placeholderClass: { + type: String, + default: 'input-placeholder' + }, + // 指定placeholder的样式 + placeholderStyle: { + type: [String, Object], + default: 'color: #c0c4cc' + }, + // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档 + // https://uniapp.dcloud.io/component/input + // https://uniapp.dcloud.io/component/textarea + confirmType: { + type: String, + default: 'done' + }, + // 点击键盘右下角按钮时是否保持键盘不收起,H5无效 + confirmHold: { + type: Boolean, + default: false + }, + // focus时,点击页面的时候不收起键盘,微信小程序有效 + holdKeyboard: { + type: Boolean, + default: false + }, + // 自动获取焦点 + // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 + focus: { + type: Boolean, + default: false + }, + // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 + autoBlur: { + type: Boolean, + default: false + }, + // 指定focus时光标的位置 + cursor: { + type: [String, Number], + default: -1 + }, + // 输入框聚焦时底部与键盘的距离 + cursorSpacing: { + type: [String, Number], + default: 30 + }, + // 光标起始位置,自动聚集时有效,需与selection-end搭配使用 + selectionStart: { + type: [String, Number], + default: -1 + }, + // 光标结束位置,自动聚集时有效,需与selection-start搭配使用 + selectionEnd: { + type: [String, Number], + default: -1 + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: true + }, + // 输入框内容对齐方式,可选值为:left|center|right + inputAlign: { + type: String, + default: 'left' + }, + // 输入框字体的大小 + fontSize: { + type: [String, Number], + default: '14px' + }, + // 输入框字体颜色 + color: { + type: String, + default: '#303133' + }, + // 输入框前置图标 + prefixIcon: { + type: String, + default: '' + }, + // 前置图标样式,对象或字符串 + prefixIconStyle: { + type: [String, Object], + default: '' + }, + // 输入框后置图标 + suffixIcon: { + type: String, + default: '' + }, + // 后置图标样式,对象或字符串 + suffixIconStyle: { + type: [String, Object], + default: '' + }, + // 边框类型,surround-四周边框,bottom-底部边框,none-无边框 + border: { + type: String, + default: 'surround' + }, + // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 + readonly: { + type: Boolean, + default: false + }, + // 输入框形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 用于处理或者过滤输入框内容的方法 + formatter: { + type: [Function, null], + default: null + }, + // 是否忽略组件内对文本合成系统事件的处理 + ignoreCompositionEvent: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.input + } +} \ No newline at end of file diff --git a/uni_modules/uv-input/components/uv-input/uv-input.vue b/uni_modules/uv-input/components/uv-input/uv-input.vue new file mode 100644 index 0000000..20c1801 --- /dev/null +++ b/uni_modules/uv-input/components/uv-input/uv-input.vue @@ -0,0 +1,348 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-input/package.json b/uni_modules/uv-input/package.json new file mode 100644 index 0000000..6981fa9 --- /dev/null +++ b/uni_modules/uv-input/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-input", + "displayName": "uv-input 输入框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.13", + "description": "uv-input 该组件为一个输入框,默认没有边框和样式,是专门为配合表单组件uv-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。", + "keywords": [ + "uv-input", + "uvui", + "uv-ui", + "input", + "输入框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-input/readme.md b/uni_modules/uv-input/readme.md new file mode 100644 index 0000000..00f47e4 --- /dev/null +++ b/uni_modules/uv-input/readme.md @@ -0,0 +1,19 @@ +## Input 输入框 + +> **组件名:uv-input** + +此组件为一个输入框,默认没有边框和样式,是专门为配合表单组件uv-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-keyboard/changelog.md b/uni_modules/uv-keyboard/changelog.md new file mode 100644 index 0000000..1d1be01 --- /dev/null +++ b/uni_modules/uv-keyboard/changelog.md @@ -0,0 +1,17 @@ +## 1.0.5(2023-10-12) +1. 增加disKeys参数,mode = "car"下,被禁用的键,如:['I','O'] +2. 增加customabc参数,mode = "car"下,是否启用自定义中英文切换内容模式,为了兼容支付宝等小程序不兼容嵌套插槽,导致同时显示自定义内容和原始内容 +3. 增加ref方法changeCarMode,mode = "car"下, 调用此方法可以切换中英文模式 +4. 增加@changeCarInputMode,mode = "car"下,调用此方法可以进行切换中英文 +5. 增加插槽abc,mode = "car"下,自定义中英文切换内容,具体参考[车牌键盘自定义中英文切换及禁用键等设置](https://www.uvui.cn/components/keyboard.html#车牌键盘自定义中英文切换及禁用键等设置) +## 1.0.4(2023-09-04) +1. 优化,修改文件名称 +## 1.0.3(2023-09-04) +1. 修复键盘change回调事件产生冲突的BUG +## 1.0.2(2023-07-02) +uv-keyboard 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/keyboard.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-keyboard 键盘 diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js b/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js new file mode 100644 index 0000000..3dd93cc --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + }, + // 被禁用的键 + disKeys: { + type: Array, + default: ()=>[] + }, + // 是否自定义abc + customabc: { + type: Boolean, + default: false + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue b/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue new file mode 100644 index 0000000..e99e910 --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js b/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js new file mode 100644 index 0000000..60d63d4 --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘 + mode: { + type: String, + default: 'number' + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: false + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue b/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue new file mode 100644 index 0000000..b7c0b8b --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/uni_modules/uv-keyboard/components/uv-keyboard/props.js b/uni_modules/uv-keyboard/components/uv-keyboard/props.js new file mode 100644 index 0000000..05dd76a --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘,car-车牌号键盘 + mode: { + type: String, + default: 'number' + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: false + }, + // 是否显示顶部工具条 + tooltip: { + type: Boolean, + default: true + }, + // 是否显示工具条中间的提示 + showTips: { + type: Boolean, + default: true + }, + // 工具条中间的提示文字 + tips: { + type: String, + default: '' + }, + // 是否显示工具条左边的"取消"按钮 + showCancel: { + type: Boolean, + default: true + }, + // 是否显示工具条右边的"完成"按钮 + showConfirm: { + type: Boolean, + default: true + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 + safeAreaInsetBottom: { + type: Boolean, + default: true + }, + // 是否允许通过点击遮罩关闭键盘 + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 是否允许点击确认按钮关闭组件 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否显示遮罩,某些时候数字键盘时,用户希望看到自己的数值,所以可能不想要遮罩 + overlay: { + type: Boolean, + default: true + }, + // z-index值 + zIndex: { + type: [String, Number], + default: 10075 + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: '取消' + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: '确定' + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + }, + // 被禁用的键 + disKeys: { + type: Array, + default: ()=>[] + }, + // 是否自定义abc + customabc: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.keyboard + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue b/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue new file mode 100644 index 0000000..60b15bf --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/uni_modules/uv-keyboard/package.json b/uni_modules/uv-keyboard/package.json new file mode 100644 index 0000000..69844c6 --- /dev/null +++ b/uni_modules/uv-keyboard/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-keyboard", + "displayName": "uv-keyboard 键盘 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "uv-keyboard 该组件为自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。", + "keywords": [ + "uv-keyboard", + "uvui", + "uv-ui", + "keyboard", + "键盘" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/readme.md b/uni_modules/uv-keyboard/readme.md new file mode 100644 index 0000000..9cbef6c --- /dev/null +++ b/uni_modules/uv-keyboard/readme.md @@ -0,0 +1,19 @@ +## Keyboard 键盘 + +> **组件名:uv-keyboard** + +该组件为自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-line-progress/changelog.md b/uni_modules/uv-line-progress/changelog.md new file mode 100644 index 0000000..975acce --- /dev/null +++ b/uni_modules/uv-line-progress/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-20) +1. 适配height参数携带单位 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-line-progress 线形进度条 diff --git a/uni_modules/uv-line-progress/components/uv-line-progress/props.js b/uni_modules/uv-line-progress/components/uv-line-progress/props.js new file mode 100644 index 0000000..23138c7 --- /dev/null +++ b/uni_modules/uv-line-progress/components/uv-line-progress/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 激活部分的颜色 + activeColor: { + type: String, + default: '#19be6b' + }, + inactiveColor: { + type: String, + default: '#ececec' + }, + // 进度百分比,数值 + percentage: { + type: [String, Number], + default: 0 + }, + // 是否在进度条内部显示百分比的值 + showText: { + type: Boolean, + default: true + }, + // 进度条的高度,单位px + height: { + type: [String, Number], + default: 12 + }, + ...uni.$uv?.props?.lineProgress + } +} \ No newline at end of file diff --git a/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue b/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue new file mode 100644 index 0000000..229c2aa --- /dev/null +++ b/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/uni_modules/uv-line-progress/package.json b/uni_modules/uv-line-progress/package.json new file mode 100644 index 0000000..01e550e --- /dev/null +++ b/uni_modules/uv-line-progress/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-line-progress", + "displayName": "uv-line-progress 线形进度条 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-line-progress 该组件展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。", + "keywords": [ + "uv-line-progress", + "uvui", + "uv-ui", + "progress", + "进度条" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-line-progress/readme.md b/uni_modules/uv-line-progress/readme.md new file mode 100644 index 0000000..98e5d49 --- /dev/null +++ b/uni_modules/uv-line-progress/readme.md @@ -0,0 +1,11 @@ +## LineProgress 线形进度条 + +> **组件名:uv-line-progress** + +展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-line/changelog.md b/uni_modules/uv-line/changelog.md new file mode 100644 index 0000000..5eb7ba8 --- /dev/null +++ b/uni_modules/uv-line/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增线条组件 diff --git a/uni_modules/uv-line/components/uv-line/props.js b/uni_modules/uv-line/components/uv-line/props.js new file mode 100644 index 0000000..75b1007 --- /dev/null +++ b/uni_modules/uv-line/components/uv-line/props.js @@ -0,0 +1,34 @@ +export default { + props: { + color: { + type: String, + default: '#d6d7d9' + }, + // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 + length: { + type: [String, Number], + default: '100%' + }, + // 线条方向,col-竖向,row-横向 + direction: { + type: String, + default: 'row' + }, + // 是否显示细边框 + hairline: { + type: Boolean, + default: true + }, + // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" + margin: { + type: [String, Number], + default: 0 + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.line + } +} \ No newline at end of file diff --git a/uni_modules/uv-line/components/uv-line/uv-line.vue b/uni_modules/uv-line/components/uv-line/uv-line.vue new file mode 100644 index 0000000..866c507 --- /dev/null +++ b/uni_modules/uv-line/components/uv-line/uv-line.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/uni_modules/uv-line/package.json b/uni_modules/uv-line/package.json new file mode 100644 index 0000000..036446a --- /dev/null +++ b/uni_modules/uv-line/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-line", + "displayName": "uv-line 线条 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "uv-line 此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单。", + "keywords": [ + "uv-line", + "uvui", + "uv-ui", + "line", + "线条" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-line/readme.md b/uni_modules/uv-line/readme.md new file mode 100644 index 0000000..e47533c --- /dev/null +++ b/uni_modules/uv-line/readme.md @@ -0,0 +1,11 @@ +## Line 线条 + +> **组件名:uv-line** + +此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-link/changelog.md b/uni_modules/uv-link/changelog.md new file mode 100644 index 0000000..ce52f84 --- /dev/null +++ b/uni_modules/uv-link/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-08-13) +1. 修复报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-link 超链接组件 diff --git a/uni_modules/uv-link/components/uv-link/props.js b/uni_modules/uv-link/components/uv-link/props.js new file mode 100644 index 0000000..b3f56a1 --- /dev/null +++ b/uni_modules/uv-link/components/uv-link/props.js @@ -0,0 +1,40 @@ +export default { + props: { + // 文字颜色 + color: { + type: String, + default: '' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 是否显示下划线 + underLine: { + type: Boolean, + default: false + }, + // 要跳转的链接 + href: { + type: String, + default: '' + }, + // 小程序中复制到粘贴板的提示语 + mpTips: { + type: String, + default: '链接已复制,请在浏览器打开' + }, + // 下划线颜色 + lineColor: { + type: String, + default: '' + }, + // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 + text: { + type: String, + default: '' + }, + ...uni.$uv?.props?.link + } +} \ No newline at end of file diff --git a/uni_modules/uv-link/components/uv-link/uv-link.vue b/uni_modules/uv-link/components/uv-link/uv-link.vue new file mode 100644 index 0000000..4c9258e --- /dev/null +++ b/uni_modules/uv-link/components/uv-link/uv-link.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/uni_modules/uv-link/package.json b/uni_modules/uv-link/package.json new file mode 100644 index 0000000..1b115f4 --- /dev/null +++ b/uni_modules/uv-link/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-link", + "displayName": "uv-link 超链接 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-link 该组件为超链接组件", + "keywords": [ + "uv-link", + "uvui", + "uv-ui", + "link", + "超链接" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-link/readme.md b/uni_modules/uv-link/readme.md new file mode 100644 index 0000000..6e8ce92 --- /dev/null +++ b/uni_modules/uv-link/readme.md @@ -0,0 +1,11 @@ +## Link 超链接 + +> **组件名:uv-link** + +该组件为超链接组件,在不同平台有不同表现形式。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-list/changelog.md b/uni_modules/uv-list/changelog.md new file mode 100644 index 0000000..6c130f0 --- /dev/null +++ b/uni_modules/uv-list/changelog.md @@ -0,0 +1,25 @@ +## 1.0.9(2023-11-10) +1. 修复设置ellipsis不生效的BUG +## 1.0.8(2023-09-20) +1. listItem优化可使用customStyle变量进行样式控制 +## 1.0.7(2023-08-29) +1. 修复边框的BUG +## 1.0.6(2023-08-16) +1. 修复switch开关返回undefined的问题 +2. 优化初始化可能导致的闪动 +## 1.0.5(2023-08-07) +1. 修复分包页面在ios端,nvue编译不能滚动的BUG +## 1.0.4(2023-08-04) +1. nvue修复 触底不触发事件的BUG +2. 更新文档说明事件触发 +## 1.0.3(2023-07-28) +1. 修改可能造成样式污染的BUG +## 1.0.2(2023-07-26) +1. 全面重构,用法与之前保持一致,参数全部变化 +2. 新增多个功能参数,方便一键构建列表 +3. List列表组件,包含基本列表样式、默认插槽机制、可扩展插槽机制、长列表性能优化、多端兼容。 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-list 列表 diff --git a/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue b/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue new file mode 100644 index 0000000..193b48d --- /dev/null +++ b/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue @@ -0,0 +1,535 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-list/components/uv-list/uv-list.vue b/uni_modules/uv-list/components/uv-list/uv-list.vue new file mode 100644 index 0000000..3f3e5c2 --- /dev/null +++ b/uni_modules/uv-list/components/uv-list/uv-list.vue @@ -0,0 +1,147 @@ + + + + diff --git a/uni_modules/uv-list/package.json b/uni_modules/uv-list/package.json new file mode 100644 index 0000000..1b1156c --- /dev/null +++ b/uni_modules/uv-list/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-list", + "displayName": "uv-list 列表 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "uv-list 多功能高性能列表组件", + "keywords": [ + "uv-list", + "uvui", + "uv-ui", + "list", + "列表" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-list/readme.md b/uni_modules/uv-list/readme.md new file mode 100644 index 0000000..930cbd4 --- /dev/null +++ b/uni_modules/uv-list/readme.md @@ -0,0 +1,27 @@ +## List 列表 + +> **组件名:uv-list** + +List列表组件,包含基本列表样式、默认插槽机制、可扩展插槽机制、长列表性能优化、多端兼容。 + +在vue页面里,它默认使用页面级滚动,这样做的目的是性能更加友好。在app-nvue页面里,它默认使用原生list组件滚动,这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。 + +uv-list组件是父容器,里面的核心是uv-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。 + +uv-list-item有很多风格,uv-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容,插槽包括:默认插槽(完全自定义内容)、具名插槽(header | body | footer),根据需求进行扩展。 + +内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表等,其他不能满足的场景使用插槽进行扩展。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-load-more/changelog.md b/uni_modules/uv-load-more/changelog.md new file mode 100644 index 0000000..a2e0fed --- /dev/null +++ b/uni_modules/uv-load-more/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-21) +1. 优化customStyle属性 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-load-more 加载更多 diff --git a/uni_modules/uv-load-more/components/uv-load-more/props.js b/uni_modules/uv-load-more/components/uv-load-more/props.js new file mode 100644 index 0000000..c6bc287 --- /dev/null +++ b/uni_modules/uv-load-more/components/uv-load-more/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 组件状态,loadmore-加载前的状态,loading-加载中的状态,nomore-没有更多的状态 + status: { + type: String, + default: 'loadmore' + }, + // 组件背景色 + bgColor: { + type: String, + default: 'transparent' + }, + // 是否显示加载中的图标 + icon: { + type: Boolean, + default: true + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: 16 + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 加载中状态的图标,spinner-花朵状图标,circle-圆圈状,semicircle-半圆 + loadingIcon: { + type: String, + default: 'spinner' + }, + // 加载前的提示语 + loadmoreText: { + type: String, + default: '加载更多' + }, + // 加载中提示语 + loadingText: { + type: String, + default: '正在加载...' + }, + // 没有更多的提示语 + nomoreText: { + type: String, + default: '没有更多了' + }, + // 在“没有更多”状态下,是否显示粗点 + isDot: { + type: Boolean, + default: false + }, + // 加载中图标的颜色 + iconColor: { + type: String, + default: '#b7b7b7' + }, + // 上边距 + marginTop: { + type: [String, Number], + default: 10 + }, + // 下边距 + marginBottom: { + type: [String, Number], + default: 10 + }, + // 高度,单位px + height: { + type: [String, Number], + default: 'auto' + }, + // 是否显示左边分割线 + line: { + type: Boolean, + default: false + }, + // 线条颜色 + lineColor: { + type: String, + default: '#E6E8EB' + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.loadmore + } +} \ No newline at end of file diff --git a/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue b/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue new file mode 100644 index 0000000..2b5057c --- /dev/null +++ b/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/uni_modules/uv-load-more/package.json b/uni_modules/uv-load-more/package.json new file mode 100644 index 0000000..bc502e3 --- /dev/null +++ b/uni_modules/uv-load-more/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-load-more", + "displayName": "uv-load-more 加载更多 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-load-more 此组件一般用于标识页面底部加载数据时的状态,共有三种状态:加载前、加载中、加载后。", + "keywords": [ + "uv-load-more", + "uvui", + "uv-ui", + "more", + "加载更多" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-load-more/readme.md b/uni_modules/uv-load-more/readme.md new file mode 100644 index 0000000..2e9334e --- /dev/null +++ b/uni_modules/uv-load-more/readme.md @@ -0,0 +1,11 @@ +## LoadMore 加载更多 + +> **组件名:uv-load-more** + +此组件一般用于标识页面底部加载数据时的状态,共有三种状态:加载前、加载中、加载后。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-loading-icon/changelog.md b/uni_modules/uv-loading-icon/changelog.md new file mode 100644 index 0000000..f17e074 --- /dev/null +++ b/uni_modules/uv-loading-icon/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-08-14) +1. 新增参数textStyle,自定义文本样式 +## 1.0.2(2023-06-27) +优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增uv-loading-icon组件 diff --git a/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js b/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js new file mode 100644 index 0000000..4ef0e94 --- /dev/null +++ b/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js @@ -0,0 +1,67 @@ +export default { + props: { + // 是否显示组件 + show: { + type: Boolean, + default: true + }, + // 颜色 + color: { + type: String, + default: '#909193' + }, + // 提示文字颜色 + textColor: { + type: String, + default: '#909193' + }, + // 文字和图标是否垂直排列 + vertical: { + type: Boolean, + default: false + }, + // 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形 + mode: { + type: String, + default: 'spinner' + }, + // 图标大小,单位默认px + size: { + type: [String, Number], + default: 24 + }, + // 文字大小 + textSize: { + type: [String, Number], + default: 15 + }, + // 文字样式 + textStyle: { + type: Object, + default () { + return {} + } + }, + // 文字内容 + text: { + type: [String, Number], + default: '' + }, + // 动画模式 https://www.runoob.com/cssref/css3-pr-animation-timing-function.html + timingFunction: { + type: String, + default: 'linear' + }, + // 动画执行周期时间 + duration: { + type: [String, Number], + default: 1200 + }, + // mode=circle时的暗边颜色 + inactiveColor: { + type: String, + default: '' + }, + ...uni.$uv?.props?.loadingIcon + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue b/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue new file mode 100644 index 0000000..5650470 --- /dev/null +++ b/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/uni_modules/uv-loading-icon/package.json b/uni_modules/uv-loading-icon/package.json new file mode 100644 index 0000000..1485897 --- /dev/null +++ b/uni_modules/uv-loading-icon/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-loading-icon", + "displayName": "uv-loading-icon 加载动画 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.3", + "description": "此组件为一个小动画,目前用在uv-ui的uv-load-more加载更多等组件,还可以运用在项目中正在加载状态场景。", + "keywords": [ + "uv-loading-icon", + "uvui", + "uv-ui", + "loading", + "加载动画" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-icon/readme.md b/uni_modules/uv-loading-icon/readme.md new file mode 100644 index 0000000..7b0cf0f --- /dev/null +++ b/uni_modules/uv-loading-icon/readme.md @@ -0,0 +1,19 @@ +## LoadingIcon 加载动画 + +> **组件名:uv-loading-icon** + +此组件为一个小动画,目前用在 `uv-ui` 的 `uv-load-more` 加载更多等组件,还可以运用在项目中正在加载状态场景。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-loading-page/changelog.md b/uni_modules/uv-loading-page/changelog.md new file mode 100644 index 0000000..4b7ef61 --- /dev/null +++ b/uni_modules/uv-loading-page/changelog.md @@ -0,0 +1,11 @@ +## 1.0.4(2024-01-20) +1. 修改上版本带出的问题 +## 1.0.3(2024-01-15) +1. 重构,避免初始加载的时候先显示页面的问题 +## 1.0.2(2023-07-02) +uv-loading-page 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-loading-page 加载页 diff --git a/uni_modules/uv-loading-page/components/uv-loading-page/props.js b/uni_modules/uv-loading-page/components/uv-loading-page/props.js new file mode 100644 index 0000000..f1a8a06 --- /dev/null +++ b/uni_modules/uv-loading-page/components/uv-loading-page/props.js @@ -0,0 +1,55 @@ +export default { + props: { + // 提示内容 + loadingText: { + type: [String, Number], + default: '' + }, + // 文字上方用于替换loading动画的图片 + image: { + type: String, + default: '' + }, + // 加载动画的模式,circle-圆形,spinner-花朵形,semicircle-半圆形 + loadingMode: { + type: String, + default: 'circle' + }, + // 是否加载中 + loading: { + type: Boolean, + default: false + }, + // 背景色 + bgColor: { + type: String, + default: '#fff' + }, + // 文字颜色 + color: { + type: String, + default: '#C8C8C8' + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: 16 + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: 26 + }, + // 加载中图标的颜色,只能rgb或者十六进制颜色值 + loadingColor: { + type: String, + default: '#C8C8C8' + }, + // 过渡时间 + duration: { + type: [String, Number], + default: 300 + }, + ...uni.$uv?.props?.loadingPage + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue b/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue new file mode 100644 index 0000000..8fb26d1 --- /dev/null +++ b/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue @@ -0,0 +1,96 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-loading-page/package.json b/uni_modules/uv-loading-page/package.json new file mode 100644 index 0000000..cc9b171 --- /dev/null +++ b/uni_modules/uv-loading-page/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-loading-page", + "displayName": "uv-loading-page 加载页 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "uv-loading-page 该组件是一个页面级的加载效果,可以在页面初始化数据等场景使用,与骨架屏有相似之处。", + "keywords": [ + "uv-loading-page", + "uvui", + "uv-ui", + "page", + "loading" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-page/readme.md b/uni_modules/uv-loading-page/readme.md new file mode 100644 index 0000000..3a5dd96 --- /dev/null +++ b/uni_modules/uv-loading-page/readme.md @@ -0,0 +1,11 @@ +## LoadingPage 加载页 + +> **组件名:uv-loading-page** + +该组件是一个页面级的加载效果,可以在页面初始化数据等场景使用,与骨架屏有相似之处。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-modal/changelog.md b/uni_modules/uv-modal/changelog.md new file mode 100644 index 0000000..d532286 --- /dev/null +++ b/uni_modules/uv-modal/changelog.md @@ -0,0 +1,28 @@ +## 1.0.11(2023-12-20) +1. 优化 +## 1.0.10(2023-12-19) +1. 修复confirm中快速使用closeLoading关闭加载状态失效的BUG +## 1.0.9(2023-11-28) +1. 修复上版本引出的确认和取消按钮均不显示,还有高度的BUG +## 1.0.8(2023-09-08) +1. 修复两个按钮之间竖线不显示的问题 +2. uv-ui项目自定义按钮示例修改 +## 1.0.7(2023-08-30) +1. 增加align参数,设置文本对齐方式,left center right +2. 增加textStyle参数,设置文本样式 +## 1.0.6(2023-08-23) +1. 修复异步loading时,确认回调还会一直触发 +## 1.0.5(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.4(2023-07-02) +uv-modal 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/modal.html +## 1.0.3(2023-06-29) +1. 增加closeLoading方法,方便异步加载手动取消 +2. 更新文档 +## 1.0.2(2023-06-11) +1. 新增zIndex参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-modal 模态框 diff --git a/uni_modules/uv-modal/components/uv-modal/props.js b/uni_modules/uv-modal/components/uv-modal/props.js new file mode 100644 index 0000000..6cb1f41 --- /dev/null +++ b/uni_modules/uv-modal/components/uv-modal/props.js @@ -0,0 +1,90 @@ +export default { + props: { + // 标题 + title: { + type: [String], + default: '' + }, + // 弹窗内容 + content: { + type: String, + default: '' + }, + // 确认文案 + confirmText: { + type: String, + default: '确认' + }, + // 取消文案 + cancelText: { + type: String, + default: '取消' + }, + // 是否显示确认按钮 + showConfirmButton: { + type: Boolean, + default: true + }, + // 是否显示取消按钮 + showCancelButton: { + type: Boolean, + default: false + }, + // 确认按钮颜色 + confirmColor: { + type: String, + default: '#2979ff' + }, + // 取消文字颜色 + cancelColor: { + type: String, + default: '#606266' + }, + // 对调确认和取消的位置 + buttonReverse: { + type: Boolean, + default: false + }, + // 是否开启缩放效果 + zoom: { + type: Boolean, + default: true + }, + // 层级 + zIndex: { + type: [String, Number], + default: 10075 + }, + // 是否异步关闭,只对确定按钮有效 + asyncClose: { + type: Boolean, + default: false + }, + // 是否允许点击遮罩关闭modal + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 给一个负的margin-top,往上偏移,避免和键盘重合的情况 + negativeTop: { + type: [String, Number], + default: 0 + }, + // modal宽度,不支持百分比,可以数值,px,rpx单位 + width: { + type: [String, Number], + default: '650rpx' + }, + // 文本对齐方式,默认left + align: { + type: String, + default: 'left' + }, + // 文本自定义样式 + textStyle: { + type: [Object, String], + default: '' + }, + ...uni.$uv?.props?.modal + } +} \ No newline at end of file diff --git a/uni_modules/uv-modal/components/uv-modal/uv-modal.vue b/uni_modules/uv-modal/components/uv-modal/uv-modal.vue new file mode 100644 index 0000000..4577b99 --- /dev/null +++ b/uni_modules/uv-modal/components/uv-modal/uv-modal.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/uni_modules/uv-modal/package.json b/uni_modules/uv-modal/package.json new file mode 100644 index 0000000..2a815c0 --- /dev/null +++ b/uni_modules/uv-modal/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-modal", + "displayName": "uv-modal 模态框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.11", + "description": "支持自定义内容,与uniapp提供的API uni.showModal类似,但是功能更强大,更加灵活", + "keywords": [ + "uv-modal", + "uvui", + "uv-ui", + "modal", + "模态框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-line", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-modal/readme.md b/uni_modules/uv-modal/readme.md new file mode 100644 index 0000000..e1aec02 --- /dev/null +++ b/uni_modules/uv-modal/readme.md @@ -0,0 +1,23 @@ +## Modal 模态框 + +> **组件名:uv-modal** + +弹出模态框,常用于消息提示、消息确认、在当前页面内完成特定的交互操作。 + +特性:支持自定义内容,与uniapp提供的API `uni.showModal` 类似,但是功能更强大,更加灵活。 + +运用场景:弹窗验证码输入等场景 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-navbar/changelog.md b/uni_modules/uv-navbar/changelog.md new file mode 100644 index 0000000..01cc4fd --- /dev/null +++ b/uni_modules/uv-navbar/changelog.md @@ -0,0 +1,17 @@ +## 1.0.7(2023-08-16) +1. 修复ios可能存在点击返回按钮点不到的情况 +## 1.0.6(2023-08-07) +1. 修复nvue在ios端可能存在背景图样式错乱的BUG +## 1.0.5(2023-08-04) +1. bgColor设置背景图片,增加imgMode属性 +## 1.0.4(2023-08-01) +1. bgColor属性支持背景图片,在线图片或base64图片都可以 +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-06-05) +1. 兼容渐变背景色 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-navbar 自定义导航栏 diff --git a/uni_modules/uv-navbar/components/uv-navbar/props.js b/uni_modules/uv-navbar/components/uv-navbar/props.js new file mode 100644 index 0000000..47fe150 --- /dev/null +++ b/uni_modules/uv-navbar/components/uv-navbar/props.js @@ -0,0 +1,89 @@ +export default { + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: true + }, + // 固定在顶部时,是否生成一个等高元素,以防止塌陷 + placeholder: { + type: Boolean, + default: false + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: true + }, + // 是否显示下边框 + border: { + type: Boolean, + default: false + }, + // 左边的图标 + leftIcon: { + type: String, + default: 'arrow-left' + }, + // 左边的提示文字 + leftText: { + type: String, + default: '' + }, + // 左右的提示文字 + rightText: { + type: String, + default: '' + }, + // 右边的图标 + rightIcon: { + type: String, + default: '' + }, + // 标题 + title: { + type: [String, Number], + default: '' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#ffffff' + }, + imgMode: { + type: String, + default: 'aspectFill' + }, + // 标题的宽度 + titleWidth: { + type: [String, Number], + default: '400rpx' + }, + // 导航栏高度 + height: { + type: [String, Number], + default: '44px' + }, + // 左侧返回图标的大小 + leftIconSize: { + type: [String, Number], + default: 20 + }, + // 左侧返回图标的颜色 + leftIconColor: { + type: String, + default: '#303133' + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: false + }, + // 标题的样式,对象或字符串 + titleStyle: { + type: [String, Object], + default: '' + }, + ...uni.$uv?.props?.navbar + } +} \ No newline at end of file diff --git a/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue b/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue new file mode 100644 index 0000000..a46ad7a --- /dev/null +++ b/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/uni_modules/uv-navbar/package.json b/uni_modules/uv-navbar/package.json new file mode 100644 index 0000000..8d429de --- /dev/null +++ b/uni_modules/uv-navbar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-navbar", + "displayName": "uv-navbar 自定义导航栏 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "uv-navbar 此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用自带的原生导航栏。", + "keywords": [ + "uv-navbar", + "uvui", + "uv-ui", + "navbar", + "自定义导航栏" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-status-bar" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-navbar/readme.md b/uni_modules/uv-navbar/readme.md new file mode 100644 index 0000000..412ea7b --- /dev/null +++ b/uni_modules/uv-navbar/readme.md @@ -0,0 +1,19 @@ +## Navbar 自定义导航栏 + +> **组件名:uv-navbar** + +此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用自带的原生导航栏,支持渐变色、透明色、图片背景。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-no-network/changelog.md b/uni_modules/uv-no-network/changelog.md new file mode 100644 index 0000000..b6fc0ed --- /dev/null +++ b/uni_modules/uv-no-network/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-no-network 无网络提示 diff --git a/uni_modules/uv-no-network/components/uv-no-network/props.js b/uni_modules/uv-no-network/components/uv-no-network/props.js new file mode 100644 index 0000000..595b1fc --- /dev/null +++ b/uni_modules/uv-no-network/components/uv-no-network/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 页面文字提示 + tips: { + type: String, + default: '哎呀,网络信号丢失' + }, + // 一个z-index值,用于设置没有网络这个组件的层次,因为页面可能会有其他定位的元素层级过高,导致此组件被覆盖 + zIndex: { + type: [String, Number], + default: '' + }, + // image 没有网络的图片提示 + image: { + type: String, + default: 'data:image/png;base64,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' + }, + ...uni.$uv?.props?.noNetwork + } +} \ No newline at end of file diff --git a/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue b/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue new file mode 100644 index 0000000..5f134fa --- /dev/null +++ b/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/uni_modules/uv-no-network/package.json b/uni_modules/uv-no-network/package.json new file mode 100644 index 0000000..cb48aa9 --- /dev/null +++ b/uni_modules/uv-no-network/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-no-network", + "displayName": "uv-no-network 无网络提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "uv-no-network 该组件在没有任何网络的情况下,显示在内容上方,无需任何配置,引入即可,内部自动处理所有功能和事件。", + "keywords": [ + "uv-no-network", + "uvui", + "uv-ui", + "network", + "无网络" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-overlay", + "uv-icon", + "uv-button" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-no-network/readme.md b/uni_modules/uv-no-network/readme.md new file mode 100644 index 0000000..0e4a1a2 --- /dev/null +++ b/uni_modules/uv-no-network/readme.md @@ -0,0 +1,11 @@ +## NoNetwork 无网络提示 + +> **组件名:uv-no-network** + +该组件在没有任何网络的情况下,显示在内容上方,无需任何配置,引入即可,内部自动处理所有功能和事件。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-notice-bar/changelog.md b/uni_modules/uv-notice-bar/changelog.md new file mode 100644 index 0000000..cdfec7d --- /dev/null +++ b/uni_modules/uv-notice-bar/changelog.md @@ -0,0 +1,19 @@ +## 1.0.7(2023-10-13) +1. unmounted兼容vue3 +## 1.0.6(2023-08-03) +1. 竖向滚动时候增加change回调 +## 1.0.5(2023-07-21) +1. 增加icon类型,支持设置false不显示图标 +2. 优化文档 +## 1.0.4(2023-07-03) +1. 增加disableScroll 属性,禁止自动滚动 +2. 优化文档 +## 1.0.3(2023-06-04) +1. 修复text传值为null报错的问题 +## 1.0.2(2023-05-30) +1. 修复error报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-notice-bar 滚动通知 diff --git a/uni_modules/uv-notice-bar/components/uv-column-notice/props.js b/uni_modules/uv-notice-bar/components/uv-column-notice/props.js new file mode 100644 index 0000000..d93917c --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-column-notice/props.js @@ -0,0 +1,61 @@ +export default { + props: { + // 显示的内容,字符串 + text: { + type: [Array], + default: '' + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: false + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: 1500 + }, + // 是否禁止用手滑动切换,仅`direction="column"生效` + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: true + }, + // 是否禁止滚动,仅`direction="column"生效` + disableScroll: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.columnNotice + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue b/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue new file mode 100644 index 0000000..73c6bfc --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js b/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js new file mode 100644 index 0000000..3fe0b44 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js @@ -0,0 +1,76 @@ +export default { + props: { + // 显示的内容,数组 + text: { + type: [Array, String], + default: () => [] + }, + // 通告滚动模式,row-横向滚动,column-竖向滚动 + direction: { + type: String, + default: 'row' + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: false + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: 2000 + }, + // 跳转的页面路径 + url: { + type: String, + default: '' + }, + // 页面跳转的类型 + linkType: { + type: String, + default: 'navigateTo' + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: true + }, + // 是否禁止滚动,仅`direction="column"生效` + disableScroll: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.noticeBar + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue b/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue new file mode 100644 index 0000000..14dd7c5 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue @@ -0,0 +1,110 @@ + + + + diff --git a/uni_modules/uv-notice-bar/components/uv-row-notice/props.js b/uni_modules/uv-notice-bar/components/uv-row-notice/props.js new file mode 100644 index 0000000..cba1823 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-row-notice/props.js @@ -0,0 +1,40 @@ +export default { + props: { + // 显示的内容,字符串 + text: { + type: String, + default: '' + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(rpx),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + ...uni.$uv?.props?.rowNotice + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue b/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue new file mode 100644 index 0000000..16117dd --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue @@ -0,0 +1,341 @@ + + + + diff --git a/uni_modules/uv-notice-bar/package.json b/uni_modules/uv-notice-bar/package.json new file mode 100644 index 0000000..f1bca29 --- /dev/null +++ b/uni_modules/uv-notice-bar/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-notice-bar", + "displayName": "uv-notice-bar 滚动通知 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "uv-notice-bar 该组件用于滚动通告场景,有多种模式可供选择。", + "keywords": [ + "uv-notice-bar", + "uvui", + "uv-ui", + "notice", + "滚动公告" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/readme.md b/uni_modules/uv-notice-bar/readme.md new file mode 100644 index 0000000..61eb131 --- /dev/null +++ b/uni_modules/uv-notice-bar/readme.md @@ -0,0 +1,19 @@ +## NoticeBar 滚动通知 + +> **组件名:uv-notice-bar** + +该组件用于滚动通告场景,有多种模式可供选择。灵活配置,开箱即用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-notify/changelog.md b/uni_modules/uv-notify/changelog.md new file mode 100644 index 0000000..5d818ba --- /dev/null +++ b/uni_modules/uv-notify/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. unmounted兼容vue3 +## 1.0.2(2023-07-02) +uv-notify 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/notify.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-notify 消息提示 diff --git a/uni_modules/uv-notify/components/uv-notify/props.js b/uni_modules/uv-notify/components/uv-notify/props.js new file mode 100644 index 0000000..5728276 --- /dev/null +++ b/uni_modules/uv-notify/components/uv-notify/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 到顶部的距离 + top: { + type: [String, Number], + default: 0 + }, + // type主题,primary,success,warning,error + type: { + type: String, + default: 'primary' + }, + // 字体颜色 + color: { + type: String, + default: '#ffffff' + }, + // 背景颜色 + bgColor: { + type: String, + default: '' + }, + // 展示的文字内容 + message: { + type: String, + default: '' + }, + // 展示时长,为0时不消失,单位ms + duration: { + type: [String, Number], + default: 3000 + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 15 + }, + // 是否留出顶部安全距离(状态栏高度) + safeAreaInsetTop: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.notify + } +} \ No newline at end of file diff --git a/uni_modules/uv-notify/components/uv-notify/uv-notify.vue b/uni_modules/uv-notify/components/uv-notify/uv-notify.vue new file mode 100644 index 0000000..96c1566 --- /dev/null +++ b/uni_modules/uv-notify/components/uv-notify/uv-notify.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/uni_modules/uv-notify/package.json b/uni_modules/uv-notify/package.json new file mode 100644 index 0000000..921949b --- /dev/null +++ b/uni_modules/uv-notify/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-notify", + "displayName": "uv-notify 消息提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "uv-notify 该组件一般用于页面顶部向下滑出一个提示,后自动收起的场景。", + "keywords": [ + "uv-notify", + "uvui", + "uv-ui", + "notify", + "消息提示" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-status-bar", + "uv-overlay", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-notify/readme.md b/uni_modules/uv-notify/readme.md new file mode 100644 index 0000000..482344a --- /dev/null +++ b/uni_modules/uv-notify/readme.md @@ -0,0 +1,11 @@ +## Notify 消息提示 + +> **组件名:uv-notify** + +该组件一般用于页面顶部向下滑出一个提示,后自动收起的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-number-box/changelog.md b/uni_modules/uv-number-box/changelog.md new file mode 100644 index 0000000..3f07995 --- /dev/null +++ b/uni_modules/uv-number-box/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-07-13) +1. 修复 uv-number-box设置value属性不生效的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-number-box 步进器 diff --git a/uni_modules/uv-number-box/components/uv-number-box/props.js b/uni_modules/uv-number-box/components/uv-number-box/props.js new file mode 100644 index 0000000..64b633b --- /dev/null +++ b/uni_modules/uv-number-box/components/uv-number-box/props.js @@ -0,0 +1,113 @@ +export default { + props: { + value: { + type: [String, Number], + default: 0 + }, + modelValue: { + type: [String, Number], + default: 0 + }, + // 步进器标识符,在change回调返回 + name: { + type: [String, Number], + default: '' + }, + // 最小值 + min: { + type: [String, Number], + default: 1 + }, + // 最大值 + max: { + type: [String, Number], + default: Number.MAX_SAFE_INTEGER + }, + // 加减的步长,可为小数 + step: { + type: [String, Number], + default: 1 + }, + // 是否只允许输入整数 + integer: { + type: Boolean, + default: false + }, + // 是否禁用,包括输入框,加减按钮 + disabled: { + type: Boolean, + default: false + }, + // 是否禁用输入框 + disabledInput: { + type: Boolean, + default: false + }, + // 是否开启异步变更,开启后需要手动控制输入值 + asyncChange: { + type: Boolean, + default: false + }, + // 输入框宽度,单位为px + inputWidth: { + type: [String, Number], + default: 35 + }, + // 是否显示减少按钮 + showMinus: { + type: Boolean, + default: true + }, + // 是否显示增加按钮 + showPlus: { + type: Boolean, + default: true + }, + // 显示的小数位数 + decimalLength: { + type: [String, Number, null], + default: null + }, + // 是否开启长按加减手势 + longPress: { + type: Boolean, + default: true + }, + // 输入框文字和加减按钮图标的颜色 + color: { + type: String, + default: '#323233' + }, + // 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 + buttonSize: { + type: [String, Number], + default: 30 + }, + // 输入框和按钮的背景颜色 + bgColor: { + type: String, + default: '#EBECEE' + }, + // 指定光标于键盘的距离,避免键盘遮挡输入框,单位px + cursorSpacing: { + type: [String, Number], + default: 100 + }, + // 是否禁用增加按钮 + disablePlus: { + type: Boolean, + default: false + }, + // 是否禁用减少按钮 + disableMinus: { + type: Boolean, + default: false + }, + // 加减按钮图标的样式 + iconStyle: { + type: [Object, String], + default: '' + }, + ...uni.$uv?.props?.numberBox + } +} \ No newline at end of file diff --git a/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue b/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue new file mode 100644 index 0000000..6937e89 --- /dev/null +++ b/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue @@ -0,0 +1,395 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-number-box/package.json b/uni_modules/uv-number-box/package.json new file mode 100644 index 0000000..771e6eb --- /dev/null +++ b/uni_modules/uv-number-box/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-number-box", + "displayName": "uv-number-box 步进器 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-number-box 该组件一般用于商城购物选择物品数量的场景。", + "keywords": [ + "uv-number-box", + "uvui", + "uv-ui", + "number", + "步进器" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-number-box/readme.md b/uni_modules/uv-number-box/readme.md new file mode 100644 index 0000000..6b83da9 --- /dev/null +++ b/uni_modules/uv-number-box/readme.md @@ -0,0 +1,11 @@ +## NumberBox 步进器 + +> **组件名:uv-number-box** + +该组件一般用于商城购物选择物品数量的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-overlay/changelog.md b/uni_modules/uv-overlay/changelog.md new file mode 100644 index 0000000..ff14713 --- /dev/null +++ b/uni_modules/uv-overlay/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-07-02) +uv-overlay 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.2(2023-06-29) +1. 优化,H5端禁止穿透滚动 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增uv-overlay组件 diff --git a/uni_modules/uv-overlay/components/uv-overlay/props.js b/uni_modules/uv-overlay/components/uv-overlay/props.js new file mode 100644 index 0000000..267c613 --- /dev/null +++ b/uni_modules/uv-overlay/components/uv-overlay/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 是否显示遮罩 + show: { + type: Boolean, + default: false + }, + // 层级z-index + zIndex: { + type: [String, Number], + default: 10070 + }, + // 遮罩的过渡时间,单位为ms + duration: { + type: [String, Number], + default: 300 + }, + // 不透明度值,当做rgba的第四个参数 + opacity: { + type: [String, Number], + default: 0.5 + }, + ...uni.$uv?.props?.overlay + } +} \ No newline at end of file diff --git a/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue b/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue new file mode 100644 index 0000000..53568c0 --- /dev/null +++ b/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue @@ -0,0 +1,85 @@ + + + + diff --git a/uni_modules/uv-overlay/package.json b/uni_modules/uv-overlay/package.json new file mode 100644 index 0000000..a664f3a --- /dev/null +++ b/uni_modules/uv-overlay/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-overlay", + "displayName": "uv-overlay 遮罩层 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "uv-overlay 创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景,uv-popup、uv-toast、uv-tooltip等组件就是用了该组件。", + "keywords": [ + "uv-overlay", + "uvui", + "uv-ui", + "overlay", + "遮罩层" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-overlay/readme.md b/uni_modules/uv-overlay/readme.md new file mode 100644 index 0000000..4e8af4b --- /dev/null +++ b/uni_modules/uv-overlay/readme.md @@ -0,0 +1,11 @@ +## Overlay 遮罩层 + +> **组件名:uv-overlay** + +创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景,uv-popup、uv-toast、uv-tooltip等组件就是用了该组件。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-parse/changelog.md b/uni_modules/uv-parse/changelog.md new file mode 100644 index 0000000..4575e07 --- /dev/null +++ b/uni_modules/uv-parse/changelog.md @@ -0,0 +1,13 @@ +## 1.0.4(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.3(2023-06-19) +1. 修复nvue模式下不显示的BUG +## 1.0.2(2023-06-02) +1. 修复可能存在的BUG +2. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-parse 富文本解析器 diff --git a/uni_modules/uv-parse/components/uv-parse/node/node.vue b/uni_modules/uv-parse/components/uv-parse/node/node.vue new file mode 100644 index 0000000..5857077 --- /dev/null +++ b/uni_modules/uv-parse/components/uv-parse/node/node.vue @@ -0,0 +1,576 @@ +