From 9c1d98f36f8b38d42db806a17ae07874773f227b Mon Sep 17 00:00:00 2001
From: YOGO <1587218160@qq.com>
Date: Mon, 16 Mar 2026 11:10:28 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=87=91=E5=88=9A=E9=A1=BA?=
=?UTF-8?q?=E4=B8=B0=E5=89=8D=E7=AB=AFH5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 2 +
.hbuilderx/launch.json | 16 +
Apis/book.js | 40 +
Apis/clientCustomer.js | 55 +
Apis/coupon.js | 37 +
Apis/goodsList.js | 28 +
Apis/home.js | 63 +
Apis/invoice.js | 55 +
Apis/lock.js | 139 ++
Apis/login.js | 159 ++
Apis/order.js | 172 ++
Apis/recommend.js | 21 +
Apis/site.js | 70 +
Apis/validInfo.js | 67 +
App.vue | 241 +++
README.md | 21 +-
components/AgreementCheck.vue | 246 +++
components/MediatorinviteDetail.vue | 158 ++
components/coupon.vue | 820 ++++++++
components/inviteDetail.vue | 163 ++
components/my-dropdown.vue | 124 ++
components/myCustomtTabBar.vue | 109 +
components/myModal.vue | 210 ++
components/myPopup.vue | 172 ++
components/myUpload.vue | 142 ++
components/navBar.vue | 67 +
components/noToken.vue | 29 +
components/siteDetail.vue | 336 ++++
components/textEllipsis.vue | 110 +
components/updatePopup.vue | 212 ++
components/uv-tabsSelf/props.js | 71 +
components/uv-tabsSelf/uv-tabs.vue | 412 ++++
components/wxNavbar.vue | 51 +
config/index.js | 61 +
hooks/index.js | 43 +
hooks/useCountDown.js | 68 +
hooks/useLocation.js | 54 +
index.html | 50 +
locale/en.json | 502 +++++
locale/index.js | 38 +
locale/ja.json | 23 +
locale/messagesFunctions.js | 49 +
locale/uni-app.ja.json | 36 +
locale/zh-Hans.json | 502 +++++
locale/zh-Hant.json | 24 +
main.js | 20 +
manifest.json | 113 ++
package-lock.json | 1443 ++++++++++++++
package.json | 21 +
pages.json | 281 +++
pages/book/book.vue | 53 +
pages/book/index.vue | 456 +++++
pages/book/map.vue | 174 ++
pages/book/mapmode.vue | 364 ++++
pages/book/navigate.vue | 88 +
pages/call/index.vue | 12 +
pages/evaluate/index.vue | 396 ++++
pages/facecode/facecode.vue | 62 +
pages/forgotPawd/index.vue | 300 +++
pages/goodsList/index.vue | 332 ++++
pages/index/index.vue | 1549 +++++++++++++++
pages/invite/index.vue | 157 ++
pages/login/index.vue | 642 ++++++
pages/orderdetail/door.vue | 224 +++
pages/orderdetail/index.vue | 1569 +++++++++++++++
pages/orderdetail/lock.vue | 259 +++
pages/personal/customerAi.vue | 44 +
pages/personal/index.vue | 123 ++
pages/phone/index.vue | 10 +
pages/register/index.vue | 305 +++
pages/renewOrder/index.vue | 1154 +++++++++++
pages/setOrder/index.vue | 1770 +++++++++++++++++
pages/site/index.vue | 350 ++++
pages/unlock/index.vue | 1472 ++++++++++++++
pages/webview/web.vue | 42 +
pagesb/AControl/index.vue | 363 ++++
pagesb/Apis/flashSale.js | 17 +
pagesb/activityDetail/index.vue | 173 ++
pagesb/changeUser/index.vue | 339 ++++
pagesb/components/my-uv-collapse/changelog.md | 5 +
.../components/uv-collapse-item/props.js | 60 +
.../uv-collapse-item/uv-collapse-item.vue | 232 +++
.../components/uv-collapse/props.js | 20 +
.../components/uv-collapse/uv-collapse.vue | 86 +
pagesb/components/my-uv-collapse/package.json | 89 +
.../components/qf-image-cropper/changelog.md | 67 +
.../qf-image-cropper.render.js | 738 +++++++
.../qf-image-cropper/qf-image-cropper.vue | 790 ++++++++
.../qf-image-cropper/qf-image-cropper.wxs | 604 ++++++
.../components/qf-image-cropper/package.json | 81 +
pagesb/components/qf-image-cropper/readme.md | 95 +
pagesb/flashSale/index.vue | 451 +++++
pagesb/houseKey/index.vue | 340 ++++
pagesb/initLock/index.vue | 728 +++++++
pagesb/initLock/lockInitApi.js | 158 ++
pagesb/invitation/index.vue | 394 ++++
pagesb/invoice/index.vue | 291 +++
pagesb/invoiceApply/index.vue | 582 ++++++
pagesb/invoiceApplyforRecord/index.vue | 271 +++
pagesb/latestEvents/index.vue | 189 ++
pagesb/maskUser/index.vue | 63 +
pagesb/pointsMall/index.vue | 522 +++++
pagesb/referrerInfo/index.vue | 258 +++
pagesb/reserve/index.vue | 530 +++++
pagesb/unittypeDetail/index.vue | 280 +++
pagesb/userguide/index.vue | 356 ++++
pagesb/validationInfo/index.vue | 618 ++++++
pagesb/videoTutorial/index.vue | 249 +++
static/book/noSelectMapIcon.png | Bin 0 -> 566 bytes
static/book/return.png | Bin 0 -> 425 bytes
static/book/selectMapIcon.png | Bin 0 -> 472 bytes
static/customicons.css | 20 +
static/customicons.ttf | Bin 0 -> 2416 bytes
static/evaluate/addPic.png | Bin 0 -> 2761 bytes
static/evaluate/image.png | Bin 0 -> 582 bytes
static/home/address.png | Bin 0 -> 271 bytes
static/home/address.svg | 3 +
static/home/appointment.png | Bin 0 -> 339 bytes
static/home/area.png | Bin 0 -> 195 bytes
static/home/bus.png | Bin 0 -> 240 bytes
static/home/left.png | Bin 0 -> 343 bytes
static/home/region.png | Bin 0 -> 186 bytes
static/home/right.png | Bin 0 -> 341 bytes
static/home/shichang_logo.png | Bin 0 -> 40224 bytes
static/home/siteicon.svg | 4 +
static/home/siteicon2.svg | 4 +
static/iconfont/iconfont.css | 190 ++
static/orderdetail/refresh.png | Bin 0 -> 540 bytes
static/personal/bottom-bg.png | Bin 0 -> 11536 bytes
static/personal/head.png | Bin 0 -> 100200 bytes
static/personal/id01.png | Bin 0 -> 2822 bytes
static/personal/id02.png | Bin 0 -> 2070 bytes
static/personal/id03.png | Bin 0 -> 1232 bytes
static/personal/mes.png | Bin 0 -> 385 bytes
static/personal/share.png | Bin 0 -> 391 bytes
static/personal/userimg.png | Bin 0 -> 100218 bytes
static/personal/warning.png | Bin 0 -> 283 bytes
static/setOrder/fire.png | Bin 0 -> 335 bytes
static/setOrder/selectArrow.png | Bin 0 -> 230 bytes
static/site/hot.svg | 8 +
static/site/map.svg | 1 +
static/style/theme.scss | 156 ++
static/tabbar/book.png | Bin 0 -> 396 bytes
static/tabbar/call.png | Bin 0 -> 808 bytes
static/tabbar/home.svg | 1 +
static/tabbar/index.png | Bin 0 -> 265 bytes
static/tabbar/order.svg | 1 +
static/tabbar/unlock.png | Bin 0 -> 230 bytes
static/tabbar/user.svg | 1 +
store/index.js | 80 +
uni.scss | 116 ++
uni_modules/no-data/changelog.md | 0
.../no-data/components/no-data/i18n/en.json | 3 +
.../no-data/components/no-data/i18n/index.js | 10 +
.../no-data/components/no-data/i18n/ja.json | 3 +
.../components/no-data/i18n/zh-Hans.json | 3 +
.../components/no-data/i18n/zh-Hant.json | 3 +
.../no-data/components/no-data/no-data.vue | 44 +
uni_modules/no-data/package.json | 80 +
uni_modules/no-data/readme.md | 1 +
uni_modules/uni-badge/changelog.md | 33 +
.../components/uni-badge/uni-badge.vue | 268 +++
uni_modules/uni-badge/package.json | 85 +
uni_modules/uni-badge/readme.md | 10 +
uni_modules/uni-breadcrumb/changelog.md | 6 +
.../uni-breadcrumb-item.vue | 121 ++
.../uni-breadcrumb/uni-breadcrumb.vue | 41 +
uni_modules/uni-breadcrumb/package.json | 88 +
uni_modules/uni-breadcrumb/readme.md | 66 +
uni_modules/uni-calendar/changelog.md | 26 +
.../components/uni-calendar/calendar.js | 546 +++++
.../components/uni-calendar/i18n/en.json | 12 +
.../components/uni-calendar/i18n/index.js | 8 +
.../components/uni-calendar/i18n/zh-Hans.json | 12 +
.../components/uni-calendar/i18n/zh-Hant.json | 12 +
.../uni-calendar/uni-calendar-item.vue | 187 ++
.../components/uni-calendar/uni-calendar.vue | 566 ++++++
.../components/uni-calendar/util.js | 360 ++++
uni_modules/uni-calendar/package.json | 85 +
uni_modules/uni-calendar/readme.md | 103 +
uni_modules/uni-card/changelog.md | 26 +
.../uni-card/components/uni-card/uni-card.vue | 272 +++
uni_modules/uni-card/package.json | 90 +
uni_modules/uni-card/readme.md | 12 +
uni_modules/uni-collapse/changelog.md | 36 +
.../uni-collapse-item/uni-collapse-item.vue | 402 ++++
.../components/uni-collapse/uni-collapse.vue | 147 ++
uni_modules/uni-collapse/package.json | 89 +
uni_modules/uni-collapse/readme.md | 12 +
uni_modules/uni-combox/changelog.md | 15 +
.../components/uni-combox/uni-combox.vue | 294 +++
uni_modules/uni-combox/package.json | 90 +
uni_modules/uni-combox/readme.md | 11 +
uni_modules/uni-countdown/changelog.md | 24 +
.../components/uni-countdown/i18n/en.json | 6 +
.../components/uni-countdown/i18n/index.js | 8 +
.../uni-countdown/i18n/zh-Hans.json | 6 +
.../uni-countdown/i18n/zh-Hant.json | 6 +
.../uni-countdown/uni-countdown.vue | 267 +++
uni_modules/uni-countdown/package.json | 86 +
uni_modules/uni-countdown/readme.md | 10 +
uni_modules/uni-data-checkbox/changelog.md | 45 +
.../uni-data-checkbox/uni-data-checkbox.vue | 821 ++++++++
uni_modules/uni-data-checkbox/package.json | 84 +
uni_modules/uni-data-checkbox/readme.md | 18 +
uni_modules/uni-data-picker/changelog.md | 75 +
.../components/uni-data-picker/keypress.js | 45 +
.../uni-data-picker/uni-data-picker.vue | 551 +++++
.../uni-data-pickerview/uni-data-picker.js | 622 ++++++
.../uni-data-pickerview.vue | 323 +++
uni_modules/uni-data-picker/package.json | 90 +
uni_modules/uni-data-picker/readme.md | 22 +
uni_modules/uni-data-select/changelog.md | 35 +
.../uni-data-select/uni-data-select.vue | 517 +++++
uni_modules/uni-data-select/package.json | 85 +
uni_modules/uni-data-select/readme.md | 8 +
uni_modules/uni-dateformat/changelog.md | 10 +
.../components/uni-dateformat/date-format.js | 200 ++
.../uni-dateformat/uni-dateformat.vue | 88 +
uni_modules/uni-dateformat/package.json | 88 +
uni_modules/uni-dateformat/readme.md | 11 +
uni_modules/uni-datetime-picker/changelog.md | 133 ++
.../uni-datetime-picker/calendar-item.vue | 177 ++
.../uni-datetime-picker/calendar.vue | 928 +++++++++
.../uni-datetime-picker/i18n/en.json | 22 +
.../uni-datetime-picker/i18n/index.js | 8 +
.../uni-datetime-picker/i18n/zh-Hans.json | 22 +
.../uni-datetime-picker/i18n/zh-Hant.json | 22 +
.../uni-datetime-picker/time-picker.vue | 934 +++++++++
.../uni-datetime-picker.vue | 1026 ++++++++++
.../components/uni-datetime-picker/util.js | 403 ++++
uni_modules/uni-datetime-picker/package.json | 87 +
uni_modules/uni-datetime-picker/readme.md | 21 +
uni_modules/uni-drawer/changelog.md | 13 +
.../components/uni-drawer/keypress.js | 45 +
.../components/uni-drawer/uni-drawer.vue | 183 ++
uni_modules/uni-drawer/package.json | 87 +
uni_modules/uni-drawer/readme.md | 10 +
uni_modules/uni-easyinput/changelog.md | 97 +
.../components/uni-easyinput/common.js | 54 +
.../uni-easyinput/uni-easyinput.vue | 657 ++++++
uni_modules/uni-easyinput/package.json | 87 +
uni_modules/uni-easyinput/readme.md | 11 +
uni_modules/uni-fab/changelog.md | 23 +
.../uni-fab/components/uni-fab/uni-fab.vue | 491 +++++
uni_modules/uni-fab/package.json | 84 +
uni_modules/uni-fab/readme.md | 9 +
uni_modules/uni-fav/changelog.md | 19 +
.../uni-fav/components/uni-fav/i18n/en.json | 4 +
.../uni-fav/components/uni-fav/i18n/index.js | 8 +
.../components/uni-fav/i18n/zh-Hans.json | 4 +
.../components/uni-fav/i18n/zh-Hant.json | 4 +
.../uni-fav/components/uni-fav/uni-fav.vue | 161 ++
uni_modules/uni-fav/package.json | 89 +
uni_modules/uni-fav/readme.md | 10 +
uni_modules/uni-file-picker/changelog.md | 67 +
.../uni-file-picker/choose-and-upload-file.js | 224 +++
.../uni-file-picker/uni-file-picker.vue | 667 +++++++
.../uni-file-picker/upload-file.vue | 325 +++
.../uni-file-picker/upload-image.vue | 292 +++
.../components/uni-file-picker/utils.js | 109 +
uni_modules/uni-file-picker/package.json | 83 +
uni_modules/uni-file-picker/readme.md | 11 +
uni_modules/uni-forms/changelog.md | 92 +
.../uni-forms-item/uni-forms-item.vue | 627 ++++++
.../components/uni-forms/uni-forms.vue | 397 ++++
.../uni-forms/components/uni-forms/utils.js | 293 +++
.../components/uni-forms/validate.js | 486 +++++
uni_modules/uni-forms/package.json | 88 +
uni_modules/uni-forms/readme.md | 23 +
uni_modules/uni-goods-nav/changelog.md | 18 +
.../components/uni-goods-nav/i18n/en.json | 6 +
.../components/uni-goods-nav/i18n/index.js | 8 +
.../uni-goods-nav/i18n/zh-Hans.json | 6 +
.../uni-goods-nav/i18n/zh-Hant.json | 6 +
.../uni-goods-nav/uni-goods-nav.vue | 229 +++
uni_modules/uni-goods-nav/package.json | 88 +
uni_modules/uni-goods-nav/readme.md | 10 +
uni_modules/uni-grid/changelog.md | 13 +
.../uni-grid-item/uni-grid-item.vue | 127 ++
.../uni-grid/components/uni-grid/uni-grid.vue | 142 ++
uni_modules/uni-grid/package.json | 86 +
uni_modules/uni-grid/readme.md | 11 +
uni_modules/uni-group/changelog.md | 16 +
.../components/uni-group/uni-group.vue | 134 ++
uni_modules/uni-group/package.json | 87 +
uni_modules/uni-group/readme.md | 9 +
uni_modules/uni-icons/changelog.md | 22 +
.../uni-icons/components/uni-icons/icons.js | 1169 +++++++++++
.../components/uni-icons/uni-icons.vue | 96 +
.../components/uni-icons/uniicons.css | 663 ++++++
.../components/uni-icons/uniicons.ttf | Bin 0 -> 35760 bytes
uni_modules/uni-icons/package.json | 86 +
uni_modules/uni-icons/readme.md | 8 +
uni_modules/uni-indexed-list/changelog.md | 17 +
.../uni-indexed-list-item.vue | 144 ++
.../uni-indexed-list/uni-indexed-list.vue | 367 ++++
uni_modules/uni-indexed-list/package.json | 89 +
uni_modules/uni-indexed-list/readme.md | 11 +
uni_modules/uni-link/changelog.md | 17 +
.../uni-link/components/uni-link/uni-link.vue | 128 ++
uni_modules/uni-link/package.json | 87 +
uni_modules/uni-link/readme.md | 11 +
uni_modules/uni-list/changelog.md | 46 +
.../components/uni-list-ad/uni-list-ad.vue | 107 +
.../uni-list-chat/uni-list-chat.scss | 58 +
.../uni-list-chat/uni-list-chat.vue | 593 ++++++
.../uni-list-item/uni-list-item.vue | 534 +++++
.../uni-list/components/uni-list/uni-list.vue | 123 ++
.../components/uni-list/uni-refresh.vue | 65 +
.../components/uni-list/uni-refresh.wxs | 87 +
uni_modules/uni-list/package.json | 88 +
uni_modules/uni-list/readme.md | 346 ++++
uni_modules/uni-load-more/changelog.md | 19 +
.../components/uni-load-more/i18n/en.json | 5 +
.../components/uni-load-more/i18n/index.js | 8 +
.../uni-load-more/i18n/zh-Hans.json | 5 +
.../uni-load-more/i18n/zh-Hant.json | 5 +
.../uni-load-more/uni-load-more.vue | 399 ++++
uni_modules/uni-load-more/package.json | 86 +
uni_modules/uni-load-more/readme.md | 14 +
uni_modules/uni-nav-bar/changelog.md | 51 +
.../components/uni-nav-bar/uni-nav-bar.vue | 357 ++++
.../components/uni-nav-bar/uni-status-bar.vue | 24 +
uni_modules/uni-nav-bar/package.json | 86 +
uni_modules/uni-nav-bar/readme.md | 15 +
uni_modules/uni-notice-bar/changelog.md | 18 +
.../uni-notice-bar/uni-notice-bar.vue | 426 ++++
uni_modules/uni-notice-bar/package.json | 87 +
uni_modules/uni-notice-bar/readme.md | 13 +
uni_modules/uni-number-box/changelog.md | 25 +
.../uni-number-box/uni-number-box.vue | 221 ++
uni_modules/uni-number-box/package.json | 85 +
uni_modules/uni-number-box/readme.md | 13 +
uni_modules/uni-pagination/changelog.md | 27 +
.../components/uni-pagination/i18n/en.json | 5 +
.../components/uni-pagination/i18n/es.json | 5 +
.../components/uni-pagination/i18n/fr.json | 5 +
.../components/uni-pagination/i18n/index.js | 12 +
.../uni-pagination/i18n/zh-Hans.json | 5 +
.../uni-pagination/i18n/zh-Hant.json | 5 +
.../uni-pagination/uni-pagination.vue | 465 +++++
uni_modules/uni-pagination/package.json | 83 +
uni_modules/uni-pagination/readme.md | 11 +
uni_modules/uni-popup/changelog.md | 68 +
.../components/uni-popup-dialog/keypress.js | 45 +
.../uni-popup-dialog/uni-popup-dialog.vue | 275 +++
.../uni-popup-message/uni-popup-message.vue | 143 ++
.../uni-popup-share/uni-popup-share.vue | 187 ++
.../components/uni-popup/i18n/en.json | 7 +
.../components/uni-popup/i18n/index.js | 8 +
.../components/uni-popup/i18n/zh-Hans.json | 7 +
.../components/uni-popup/i18n/zh-Hant.json | 7 +
.../components/uni-popup/keypress.js | 45 +
.../uni-popup/components/uni-popup/popup.js | 26 +
.../components/uni-popup/uni-popup.vue | 473 +++++
uni_modules/uni-popup/package.json | 87 +
uni_modules/uni-popup/readme.md | 17 +
uni_modules/uni-rate/changelog.md | 25 +
.../uni-rate/components/uni-rate/uni-rate.vue | 365 ++++
uni_modules/uni-rate/package.json | 88 +
uni_modules/uni-rate/readme.md | 12 +
uni_modules/uni-row/changelog.md | 10 +
.../uni-row/components/uni-col/uni-col.vue | 317 +++
.../uni-row/components/uni-row/uni-row.vue | 190 ++
uni_modules/uni-row/package.json | 87 +
uni_modules/uni-row/readme.md | 10 +
uni_modules/uni-scss/changelog.md | 8 +
uni_modules/uni-scss/index.scss | 1 +
uni_modules/uni-scss/package.json | 82 +
uni_modules/uni-scss/readme.md | 4 +
uni_modules/uni-scss/styles/index.scss | 7 +
.../uni-scss/styles/setting/_border.scss | 3 +
.../uni-scss/styles/setting/_color.scss | 66 +
.../uni-scss/styles/setting/_radius.scss | 55 +
.../uni-scss/styles/setting/_space.scss | 56 +
.../uni-scss/styles/setting/_styles.scss | 167 ++
.../uni-scss/styles/setting/_text.scss | 24 +
.../uni-scss/styles/setting/_variables.scss | 146 ++
.../uni-scss/styles/tools/functions.scss | 19 +
uni_modules/uni-scss/theme.scss | 31 +
uni_modules/uni-scss/variables.scss | 62 +
uni_modules/uni-search-bar/changelog.md | 33 +
.../components/uni-search-bar/i18n/en.json | 4 +
.../components/uni-search-bar/i18n/index.js | 8 +
.../uni-search-bar/i18n/zh-Hans.json | 4 +
.../uni-search-bar/i18n/zh-Hant.json | 4 +
.../uni-search-bar/uni-search-bar.vue | 298 +++
uni_modules/uni-search-bar/package.json | 89 +
uni_modules/uni-search-bar/readme.md | 14 +
uni_modules/uni-section/changelog.md | 2 +
.../components/uni-section/uni-section.vue | 167 ++
uni_modules/uni-section/package.json | 87 +
uni_modules/uni-section/readme.md | 8 +
.../uni-segmented-control/changelog.md | 9 +
.../uni-segmented-control.vue | 145 ++
.../uni-segmented-control/package.json | 87 +
uni_modules/uni-segmented-control/readme.md | 13 +
uni_modules/uni-steps/changelog.md | 16 +
.../components/uni-steps/uni-steps.vue | 269 +++
uni_modules/uni-steps/package.json | 89 +
uni_modules/uni-steps/readme.md | 13 +
uni_modules/uni-swipe-action/changelog.md | 43 +
.../uni-swipe-action-item/bindingx.js | 302 +++
.../components/uni-swipe-action-item/isPC.js | 12 +
.../uni-swipe-action-item/mpalipay.js | 195 ++
.../uni-swipe-action-item/mpother.js | 260 +++
.../components/uni-swipe-action-item/mpwxs.js | 84 +
.../uni-swipe-action-item/render.js | 270 +++
.../uni-swipe-action-item.vue | 347 ++++
.../components/uni-swipe-action-item/wx.wxs | 341 ++++
.../uni-swipe-action/uni-swipe-action.vue | 60 +
uni_modules/uni-swipe-action/package.json | 87 +
uni_modules/uni-swipe-action/readme.md | 11 +
uni_modules/uni-swiper-dot/changelog.md | 12 +
.../uni-swiper-dot/uni-swiper-dot.vue | 218 ++
uni_modules/uni-swiper-dot/package.json | 87 +
uni_modules/uni-swiper-dot/readme.md | 11 +
uni_modules/uni-table/changelog.md | 27 +
.../components/uni-table/uni-table.vue | 455 +++++
.../components/uni-tbody/uni-tbody.vue | 29 +
.../uni-table/components/uni-td/uni-td.vue | 90 +
.../components/uni-th/filter-dropdown.vue | 511 +++++
.../uni-table/components/uni-th/uni-th.vue | 285 +++
.../components/uni-thead/uni-thead.vue | 129 ++
.../components/uni-tr/table-checkbox.vue | 179 ++
.../uni-table/components/uni-tr/uni-tr.vue | 171 ++
uni_modules/uni-table/i18n/en.json | 9 +
uni_modules/uni-table/i18n/es.json | 9 +
uni_modules/uni-table/i18n/fr.json | 9 +
uni_modules/uni-table/i18n/index.js | 12 +
uni_modules/uni-table/i18n/zh-Hans.json | 9 +
uni_modules/uni-table/i18n/zh-Hant.json | 9 +
uni_modules/uni-table/package.json | 83 +
uni_modules/uni-table/readme.md | 13 +
uni_modules/uni-tag/changelog.md | 21 +
.../uni-tag/components/uni-tag/uni-tag.vue | 252 +++
uni_modules/uni-tag/package.json | 87 +
uni_modules/uni-tag/readme.md | 13 +
uni_modules/uni-test/changelog.md | 39 +
.../uni-test/components/uni-test/uni-test.vue | 26 +
uni_modules/uni-test/package.json | 83 +
uni_modules/uni-test/readme.md | 10 +
uni_modules/uni-title/changelog.md | 10 +
.../components/uni-title/uni-title.vue | 171 ++
uni_modules/uni-title/package.json | 88 +
uni_modules/uni-title/readme.md | 14 +
uni_modules/uni-tooltip/changelog.md | 10 +
.../components/uni-tooltip/uni-tooltip.vue | 68 +
uni_modules/uni-tooltip/package.json | 88 +
uni_modules/uni-tooltip/readme.md | 8 +
uni_modules/uni-transition/changelog.md | 20 +
.../uni-transition/createAnimation.js | 131 ++
.../uni-transition/uni-transition.vue | 281 +++
uni_modules/uni-transition/package.json | 87 +
uni_modules/uni-transition/readme.md | 11 +
uni_modules/uni-ui/changelog.md | 541 +++++
.../uni-ui/components/uni-badge/uni-badge.vue | 153 ++
.../components/uni-calendar/calendar.js | 546 +++++
.../uni-calendar/uni-calendar-item.vue | 170 ++
.../components/uni-calendar/uni-calendar.vue | 505 +++++
.../uni-ui/components/uni-calendar/util.js | 352 ++++
.../uni-ui/components/uni-card/uni-card.vue | 403 ++++
.../uni-collapse-item/uni-collapse-item.vue | 218 ++
.../components/uni-collapse/uni-collapse.vue | 59 +
.../components/uni-combox/uni-combox.vue | 213 ++
.../uni-countdown/uni-countdown.vue | 211 ++
.../components/uni-data-checkbox/clientdb.js | 316 +++
.../uni-data-checkbox/uni-data-checkbox.vue | 826 ++++++++
.../components/uni-dateformat/date-format.js | 191 ++
.../uni-dateformat/uni-dateformat.vue | 90 +
.../uni-datetime-picker.vue | 355 ++++
.../components/uni-drawer/uni-drawer.vue | 170 ++
.../uni-ui/components/uni-easyinput/common.js | 56 +
.../uni-easyinput/uni-easyinput.vue | 401 ++++
.../uni-ui/components/uni-fab/uni-fab.vue | 433 ++++
.../uni-ui/components/uni-fav/uni-fav.vue | 140 ++
.../uni-ui/components/uni-field/uni-field.vue | 686 +++++++
.../uni-forms-item/uni-forms-item.vue | 436 ++++
.../uni-ui/components/uni-forms/uni-forms.vue | 420 ++++
.../uni-ui/components/uni-forms/validate.js | 442 ++++
.../uni-goods-nav/uni-goods-nav.vue | 225 +++
.../uni-grid-item/uni-grid-item.vue | 124 ++
.../uni-ui/components/uni-grid/uni-grid.vue | 141 ++
.../uni-ui/components/uni-group/uni-group.vue | 127 ++
.../uni-ui/components/uni-icons/icons.js | 132 ++
.../uni-ui/components/uni-icons/uni-icons.vue | 71 +
.../uni-ui/components/uni-icons/uni.ttf | Bin 0 -> 26164 bytes
.../uni-indexed-list-item.vue | 142 ++
.../uni-indexed-list/uni-indexed-list.vue | 318 +++
.../uni-ui/components/uni-link/uni-link.vue | 78 +
.../components/uni-list-ad/uni-list-ad.vue | 107 +
.../uni-list-chat/uni-list-chat.scss | 58 +
.../uni-list-chat/uni-list-chat.vue | 533 +++++
.../uni-list-item/uni-list-item.vue | 440 ++++
.../uni-ui/components/uni-list/uni-list.vue | 106 +
.../components/uni-list/uni-refresh.vue | 65 +
.../components/uni-list/uni-refresh.wxs | 87 +
.../uni-load-more/uni-load-more.vue | 359 ++++
.../components/uni-nav-bar/uni-nav-bar.vue | 242 +++
.../uni-notice-bar/uni-notice-bar.vue | 395 ++++
.../uni-number-box/uni-number-box.vue | 200 ++
.../uni-pagination/uni-pagination.vue | 204 ++
.../uni-popup-dialog/uni-popup-dialog.vue | 243 +++
.../uni-popup-message/uni-popup-message.vue | 116 ++
.../uni-popup-share/uni-popup-share.vue | 165 ++
.../uni-ui/components/uni-popup/message.js | 22 +
.../uni-ui/components/uni-popup/popup.js | 25 +
.../uni-ui/components/uni-popup/share.js | 16 +
.../uni-ui/components/uni-popup/uni-popup.vue | 297 +++
.../uni-ui/components/uni-rate/uni-rate.vue | 296 +++
.../uni-search-bar/uni-search-bar.vue | 206 ++
.../components/uni-section/uni-section.vue | 136 ++
.../uni-segmented-control.vue | 138 ++
.../uni-status-bar/uni-status-bar.vue | 25 +
.../uni-ui/components/uni-steps/uni-steps.vue | 256 +++
.../uni-swipe-action-item/bindingx.js | 292 +++
.../uni-swipe-action-item/index.wxs | 266 +++
.../uni-swipe-action-item/mpalipay.js | 207 ++
.../uni-swipe-action-item/mpother.js | 252 +++
.../components/uni-swipe-action-item/mpwxs.js | 116 ++
.../uni-swipe-action-item.vue | 365 ++++
.../uni-swipe-action/uni-swipe-action.vue | 42 +
.../uni-swiper-dot/uni-swiper-dot.vue | 201 ++
.../uni-ui/components/uni-table/uni-table.vue | 263 +++
.../uni-ui/components/uni-tag/uni-tag.vue | 230 +++
.../uni-ui/components/uni-td/uni-td.vue | 74 +
.../uni-ui/components/uni-test/uni-test.vue | 19 +
.../uni-ui/components/uni-th/uni-th.vue | 78 +
.../uni-ui/components/uni-title/uni-title.vue | 170 ++
.../uni-ui/components/uni-tr/uni-tr.vue | 117 ++
.../uni-transition/uni-transition.vue | 279 +++
.../uni-ui/components/uni-ui/uni-ui.vue | 7 +
uni_modules/uni-ui/manifest.json | 95 +
uni_modules/uni-ui/package.json | 129 ++
uni_modules/uni-ui/readme.md | 247 +++
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 | 34 +
.../components/uv-datetime-picker/props.js | 130 ++
.../uv-datetime-picker/uv-datetime-picker.vue | 360 ++++
uni_modules/uv-datetime-picker/package.json | 89 +
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 | 492 +++++
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 +
uni_modules/v-tabs/changelog.md | 143 ++
uni_modules/v-tabs/components/v-tabs/props.js | 104 +
uni_modules/v-tabs/components/v-tabs/utils.js | 12 +
.../v-tabs/components/v-tabs/v-tabs.vue | 296 +++
uni_modules/v-tabs/package.json | 84 +
uni_modules/v-tabs/readme.md | 267 +++
utils/common.js | 278 +++
utils/map.js | 63 +
utils/navigateTo.js | 17 +
utils/request.js | 455 +++++
utils/storage.js | 46 +
1066 files changed, 141326 insertions(+), 2 deletions(-)
create mode 100644 .gitignore
create mode 100644 .hbuilderx/launch.json
create mode 100644 Apis/book.js
create mode 100644 Apis/clientCustomer.js
create mode 100644 Apis/coupon.js
create mode 100644 Apis/goodsList.js
create mode 100644 Apis/home.js
create mode 100644 Apis/invoice.js
create mode 100644 Apis/lock.js
create mode 100644 Apis/login.js
create mode 100644 Apis/order.js
create mode 100644 Apis/recommend.js
create mode 100644 Apis/site.js
create mode 100644 Apis/validInfo.js
create mode 100644 App.vue
create mode 100644 components/AgreementCheck.vue
create mode 100644 components/MediatorinviteDetail.vue
create mode 100644 components/coupon.vue
create mode 100644 components/inviteDetail.vue
create mode 100644 components/my-dropdown.vue
create mode 100644 components/myCustomtTabBar.vue
create mode 100644 components/myModal.vue
create mode 100644 components/myPopup.vue
create mode 100644 components/myUpload.vue
create mode 100644 components/navBar.vue
create mode 100644 components/noToken.vue
create mode 100644 components/siteDetail.vue
create mode 100644 components/textEllipsis.vue
create mode 100644 components/updatePopup.vue
create mode 100644 components/uv-tabsSelf/props.js
create mode 100644 components/uv-tabsSelf/uv-tabs.vue
create mode 100644 components/wxNavbar.vue
create mode 100644 config/index.js
create mode 100644 hooks/index.js
create mode 100644 hooks/useCountDown.js
create mode 100644 hooks/useLocation.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/messagesFunctions.js
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-lock.json
create mode 100644 package.json
create mode 100644 pages.json
create mode 100644 pages/book/book.vue
create mode 100644 pages/book/index.vue
create mode 100644 pages/book/map.vue
create mode 100644 pages/book/mapmode.vue
create mode 100644 pages/book/navigate.vue
create mode 100644 pages/call/index.vue
create mode 100644 pages/evaluate/index.vue
create mode 100644 pages/facecode/facecode.vue
create mode 100644 pages/forgotPawd/index.vue
create mode 100644 pages/goodsList/index.vue
create mode 100644 pages/index/index.vue
create mode 100644 pages/invite/index.vue
create mode 100644 pages/login/index.vue
create mode 100644 pages/orderdetail/door.vue
create mode 100644 pages/orderdetail/index.vue
create mode 100644 pages/orderdetail/lock.vue
create mode 100644 pages/personal/customerAi.vue
create mode 100644 pages/personal/index.vue
create mode 100644 pages/phone/index.vue
create mode 100644 pages/register/index.vue
create mode 100644 pages/renewOrder/index.vue
create mode 100644 pages/setOrder/index.vue
create mode 100644 pages/site/index.vue
create mode 100644 pages/unlock/index.vue
create mode 100644 pages/webview/web.vue
create mode 100644 pagesb/AControl/index.vue
create mode 100644 pagesb/Apis/flashSale.js
create mode 100644 pagesb/activityDetail/index.vue
create mode 100644 pagesb/changeUser/index.vue
create mode 100644 pagesb/components/my-uv-collapse/changelog.md
create mode 100644 pagesb/components/my-uv-collapse/components/uv-collapse-item/props.js
create mode 100644 pagesb/components/my-uv-collapse/components/uv-collapse-item/uv-collapse-item.vue
create mode 100644 pagesb/components/my-uv-collapse/components/uv-collapse/props.js
create mode 100644 pagesb/components/my-uv-collapse/components/uv-collapse/uv-collapse.vue
create mode 100644 pagesb/components/my-uv-collapse/package.json
create mode 100644 pagesb/components/qf-image-cropper/changelog.md
create mode 100644 pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js
create mode 100644 pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue
create mode 100644 pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs
create mode 100644 pagesb/components/qf-image-cropper/package.json
create mode 100644 pagesb/components/qf-image-cropper/readme.md
create mode 100644 pagesb/flashSale/index.vue
create mode 100644 pagesb/houseKey/index.vue
create mode 100644 pagesb/initLock/index.vue
create mode 100644 pagesb/initLock/lockInitApi.js
create mode 100644 pagesb/invitation/index.vue
create mode 100644 pagesb/invoice/index.vue
create mode 100644 pagesb/invoiceApply/index.vue
create mode 100644 pagesb/invoiceApplyforRecord/index.vue
create mode 100644 pagesb/latestEvents/index.vue
create mode 100644 pagesb/maskUser/index.vue
create mode 100644 pagesb/pointsMall/index.vue
create mode 100644 pagesb/referrerInfo/index.vue
create mode 100644 pagesb/reserve/index.vue
create mode 100644 pagesb/unittypeDetail/index.vue
create mode 100644 pagesb/userguide/index.vue
create mode 100644 pagesb/validationInfo/index.vue
create mode 100644 pagesb/videoTutorial/index.vue
create mode 100644 static/book/noSelectMapIcon.png
create mode 100644 static/book/return.png
create mode 100644 static/book/selectMapIcon.png
create mode 100644 static/customicons.css
create mode 100644 static/customicons.ttf
create mode 100644 static/evaluate/addPic.png
create mode 100644 static/evaluate/image.png
create mode 100644 static/home/address.png
create mode 100644 static/home/address.svg
create mode 100644 static/home/appointment.png
create mode 100644 static/home/area.png
create mode 100644 static/home/bus.png
create mode 100644 static/home/left.png
create mode 100644 static/home/region.png
create mode 100644 static/home/right.png
create mode 100644 static/home/shichang_logo.png
create mode 100644 static/home/siteicon.svg
create mode 100644 static/home/siteicon2.svg
create mode 100644 static/iconfont/iconfont.css
create mode 100644 static/orderdetail/refresh.png
create mode 100644 static/personal/bottom-bg.png
create mode 100644 static/personal/head.png
create mode 100644 static/personal/id01.png
create mode 100644 static/personal/id02.png
create mode 100644 static/personal/id03.png
create mode 100644 static/personal/mes.png
create mode 100644 static/personal/share.png
create mode 100644 static/personal/userimg.png
create mode 100644 static/personal/warning.png
create mode 100644 static/setOrder/fire.png
create mode 100644 static/setOrder/selectArrow.png
create mode 100644 static/site/hot.svg
create mode 100644 static/site/map.svg
create mode 100644 static/style/theme.scss
create mode 100644 static/tabbar/book.png
create mode 100644 static/tabbar/call.png
create mode 100644 static/tabbar/home.svg
create mode 100644 static/tabbar/index.png
create mode 100644 static/tabbar/order.svg
create mode 100644 static/tabbar/unlock.png
create mode 100644 static/tabbar/user.svg
create mode 100644 store/index.js
create mode 100644 uni.scss
create mode 100644 uni_modules/no-data/changelog.md
create mode 100644 uni_modules/no-data/components/no-data/i18n/en.json
create mode 100644 uni_modules/no-data/components/no-data/i18n/index.js
create mode 100644 uni_modules/no-data/components/no-data/i18n/ja.json
create mode 100644 uni_modules/no-data/components/no-data/i18n/zh-Hans.json
create mode 100644 uni_modules/no-data/components/no-data/i18n/zh-Hant.json
create mode 100644 uni_modules/no-data/components/no-data/no-data.vue
create mode 100644 uni_modules/no-data/package.json
create mode 100644 uni_modules/no-data/readme.md
create mode 100644 uni_modules/uni-badge/changelog.md
create mode 100644 uni_modules/uni-badge/components/uni-badge/uni-badge.vue
create mode 100644 uni_modules/uni-badge/package.json
create mode 100644 uni_modules/uni-badge/readme.md
create mode 100644 uni_modules/uni-breadcrumb/changelog.md
create mode 100644 uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue
create mode 100644 uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue
create mode 100644 uni_modules/uni-breadcrumb/package.json
create mode 100644 uni_modules/uni-breadcrumb/readme.md
create mode 100644 uni_modules/uni-calendar/changelog.md
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/calendar.js
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/en.json
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/index.js
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/util.js
create mode 100644 uni_modules/uni-calendar/package.json
create mode 100644 uni_modules/uni-calendar/readme.md
create mode 100644 uni_modules/uni-card/changelog.md
create mode 100644 uni_modules/uni-card/components/uni-card/uni-card.vue
create mode 100644 uni_modules/uni-card/package.json
create mode 100644 uni_modules/uni-card/readme.md
create mode 100644 uni_modules/uni-collapse/changelog.md
create mode 100644 uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue
create mode 100644 uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue
create mode 100644 uni_modules/uni-collapse/package.json
create mode 100644 uni_modules/uni-collapse/readme.md
create mode 100644 uni_modules/uni-combox/changelog.md
create mode 100644 uni_modules/uni-combox/components/uni-combox/uni-combox.vue
create mode 100644 uni_modules/uni-combox/package.json
create mode 100644 uni_modules/uni-combox/readme.md
create mode 100644 uni_modules/uni-countdown/changelog.md
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/en.json
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/index.js
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue
create mode 100644 uni_modules/uni-countdown/package.json
create mode 100644 uni_modules/uni-countdown/readme.md
create mode 100644 uni_modules/uni-data-checkbox/changelog.md
create mode 100644 uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue
create mode 100644 uni_modules/uni-data-checkbox/package.json
create mode 100644 uni_modules/uni-data-checkbox/readme.md
create mode 100644 uni_modules/uni-data-picker/changelog.md
create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/keypress.js
create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
create mode 100644 uni_modules/uni-data-picker/package.json
create mode 100644 uni_modules/uni-data-picker/readme.md
create mode 100644 uni_modules/uni-data-select/changelog.md
create mode 100644 uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
create mode 100644 uni_modules/uni-data-select/package.json
create mode 100644 uni_modules/uni-data-select/readme.md
create mode 100644 uni_modules/uni-dateformat/changelog.md
create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue
create mode 100644 uni_modules/uni-dateformat/package.json
create mode 100644 uni_modules/uni-dateformat/readme.md
create mode 100644 uni_modules/uni-datetime-picker/changelog.md
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js
create mode 100644 uni_modules/uni-datetime-picker/package.json
create mode 100644 uni_modules/uni-datetime-picker/readme.md
create mode 100644 uni_modules/uni-drawer/changelog.md
create mode 100644 uni_modules/uni-drawer/components/uni-drawer/keypress.js
create mode 100644 uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue
create mode 100644 uni_modules/uni-drawer/package.json
create mode 100644 uni_modules/uni-drawer/readme.md
create mode 100644 uni_modules/uni-easyinput/changelog.md
create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/common.js
create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
create mode 100644 uni_modules/uni-easyinput/package.json
create mode 100644 uni_modules/uni-easyinput/readme.md
create mode 100644 uni_modules/uni-fab/changelog.md
create mode 100644 uni_modules/uni-fab/components/uni-fab/uni-fab.vue
create mode 100644 uni_modules/uni-fab/package.json
create mode 100644 uni_modules/uni-fab/readme.md
create mode 100644 uni_modules/uni-fav/changelog.md
create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/en.json
create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/index.js
create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-fav/components/uni-fav/uni-fav.vue
create mode 100644 uni_modules/uni-fav/package.json
create mode 100644 uni_modules/uni-fav/readme.md
create mode 100644 uni_modules/uni-file-picker/changelog.md
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/utils.js
create mode 100644 uni_modules/uni-file-picker/package.json
create mode 100644 uni_modules/uni-file-picker/readme.md
create mode 100644 uni_modules/uni-forms/changelog.md
create mode 100644 uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue
create mode 100644 uni_modules/uni-forms/components/uni-forms/uni-forms.vue
create mode 100644 uni_modules/uni-forms/components/uni-forms/utils.js
create mode 100644 uni_modules/uni-forms/components/uni-forms/validate.js
create mode 100644 uni_modules/uni-forms/package.json
create mode 100644 uni_modules/uni-forms/readme.md
create mode 100644 uni_modules/uni-goods-nav/changelog.md
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue
create mode 100644 uni_modules/uni-goods-nav/package.json
create mode 100644 uni_modules/uni-goods-nav/readme.md
create mode 100644 uni_modules/uni-grid/changelog.md
create mode 100644 uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue
create mode 100644 uni_modules/uni-grid/components/uni-grid/uni-grid.vue
create mode 100644 uni_modules/uni-grid/package.json
create mode 100644 uni_modules/uni-grid/readme.md
create mode 100644 uni_modules/uni-group/changelog.md
create mode 100644 uni_modules/uni-group/components/uni-group/uni-group.vue
create mode 100644 uni_modules/uni-group/package.json
create mode 100644 uni_modules/uni-group/readme.md
create mode 100644 uni_modules/uni-icons/changelog.md
create mode 100644 uni_modules/uni-icons/components/uni-icons/icons.js
create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue
create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css
create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf
create mode 100644 uni_modules/uni-icons/package.json
create mode 100644 uni_modules/uni-icons/readme.md
create mode 100644 uni_modules/uni-indexed-list/changelog.md
create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue
create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue
create mode 100644 uni_modules/uni-indexed-list/package.json
create mode 100644 uni_modules/uni-indexed-list/readme.md
create mode 100644 uni_modules/uni-link/changelog.md
create mode 100644 uni_modules/uni-link/components/uni-link/uni-link.vue
create mode 100644 uni_modules/uni-link/package.json
create mode 100644 uni_modules/uni-link/readme.md
create mode 100644 uni_modules/uni-list/changelog.md
create mode 100644 uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue
create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss
create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue
create mode 100644 uni_modules/uni-list/components/uni-list-item/uni-list-item.vue
create mode 100644 uni_modules/uni-list/components/uni-list/uni-list.vue
create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.vue
create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.wxs
create mode 100644 uni_modules/uni-list/package.json
create mode 100644 uni_modules/uni-list/readme.md
create mode 100644 uni_modules/uni-load-more/changelog.md
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
create mode 100644 uni_modules/uni-load-more/package.json
create mode 100644 uni_modules/uni-load-more/readme.md
create mode 100644 uni_modules/uni-nav-bar/changelog.md
create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue
create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue
create mode 100644 uni_modules/uni-nav-bar/package.json
create mode 100644 uni_modules/uni-nav-bar/readme.md
create mode 100644 uni_modules/uni-notice-bar/changelog.md
create mode 100644 uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue
create mode 100644 uni_modules/uni-notice-bar/package.json
create mode 100644 uni_modules/uni-notice-bar/readme.md
create mode 100644 uni_modules/uni-number-box/changelog.md
create mode 100644 uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue
create mode 100644 uni_modules/uni-number-box/package.json
create mode 100644 uni_modules/uni-number-box/readme.md
create mode 100644 uni_modules/uni-pagination/changelog.md
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/en.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/es.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/index.js
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue
create mode 100644 uni_modules/uni-pagination/package.json
create mode 100644 uni_modules/uni-pagination/readme.md
create mode 100644 uni_modules/uni-popup/changelog.md
create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
create mode 100644 uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
create mode 100644 uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/en.json
create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/index.js
create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-popup/components/uni-popup/keypress.js
create mode 100644 uni_modules/uni-popup/components/uni-popup/popup.js
create mode 100644 uni_modules/uni-popup/components/uni-popup/uni-popup.vue
create mode 100644 uni_modules/uni-popup/package.json
create mode 100644 uni_modules/uni-popup/readme.md
create mode 100644 uni_modules/uni-rate/changelog.md
create mode 100644 uni_modules/uni-rate/components/uni-rate/uni-rate.vue
create mode 100644 uni_modules/uni-rate/package.json
create mode 100644 uni_modules/uni-rate/readme.md
create mode 100644 uni_modules/uni-row/changelog.md
create mode 100644 uni_modules/uni-row/components/uni-col/uni-col.vue
create mode 100644 uni_modules/uni-row/components/uni-row/uni-row.vue
create mode 100644 uni_modules/uni-row/package.json
create mode 100644 uni_modules/uni-row/readme.md
create mode 100644 uni_modules/uni-scss/changelog.md
create mode 100644 uni_modules/uni-scss/index.scss
create mode 100644 uni_modules/uni-scss/package.json
create mode 100644 uni_modules/uni-scss/readme.md
create mode 100644 uni_modules/uni-scss/styles/index.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_border.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_color.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_radius.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_space.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_styles.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_text.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_variables.scss
create mode 100644 uni_modules/uni-scss/styles/tools/functions.scss
create mode 100644 uni_modules/uni-scss/theme.scss
create mode 100644 uni_modules/uni-scss/variables.scss
create mode 100644 uni_modules/uni-search-bar/changelog.md
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue
create mode 100644 uni_modules/uni-search-bar/package.json
create mode 100644 uni_modules/uni-search-bar/readme.md
create mode 100644 uni_modules/uni-section/changelog.md
create mode 100644 uni_modules/uni-section/components/uni-section/uni-section.vue
create mode 100644 uni_modules/uni-section/package.json
create mode 100644 uni_modules/uni-section/readme.md
create mode 100644 uni_modules/uni-segmented-control/changelog.md
create mode 100644 uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue
create mode 100644 uni_modules/uni-segmented-control/package.json
create mode 100644 uni_modules/uni-segmented-control/readme.md
create mode 100644 uni_modules/uni-steps/changelog.md
create mode 100644 uni_modules/uni-steps/components/uni-steps/uni-steps.vue
create mode 100644 uni_modules/uni-steps/package.json
create mode 100644 uni_modules/uni-steps/readme.md
create mode 100644 uni_modules/uni-swipe-action/changelog.md
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue
create mode 100644 uni_modules/uni-swipe-action/package.json
create mode 100644 uni_modules/uni-swipe-action/readme.md
create mode 100644 uni_modules/uni-swiper-dot/changelog.md
create mode 100644 uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue
create mode 100644 uni_modules/uni-swiper-dot/package.json
create mode 100644 uni_modules/uni-swiper-dot/readme.md
create mode 100644 uni_modules/uni-table/changelog.md
create mode 100644 uni_modules/uni-table/components/uni-table/uni-table.vue
create mode 100644 uni_modules/uni-table/components/uni-tbody/uni-tbody.vue
create mode 100644 uni_modules/uni-table/components/uni-td/uni-td.vue
create mode 100644 uni_modules/uni-table/components/uni-th/filter-dropdown.vue
create mode 100644 uni_modules/uni-table/components/uni-th/uni-th.vue
create mode 100644 uni_modules/uni-table/components/uni-thead/uni-thead.vue
create mode 100644 uni_modules/uni-table/components/uni-tr/table-checkbox.vue
create mode 100644 uni_modules/uni-table/components/uni-tr/uni-tr.vue
create mode 100644 uni_modules/uni-table/i18n/en.json
create mode 100644 uni_modules/uni-table/i18n/es.json
create mode 100644 uni_modules/uni-table/i18n/fr.json
create mode 100644 uni_modules/uni-table/i18n/index.js
create mode 100644 uni_modules/uni-table/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-table/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-table/package.json
create mode 100644 uni_modules/uni-table/readme.md
create mode 100644 uni_modules/uni-tag/changelog.md
create mode 100644 uni_modules/uni-tag/components/uni-tag/uni-tag.vue
create mode 100644 uni_modules/uni-tag/package.json
create mode 100644 uni_modules/uni-tag/readme.md
create mode 100644 uni_modules/uni-test/changelog.md
create mode 100644 uni_modules/uni-test/components/uni-test/uni-test.vue
create mode 100644 uni_modules/uni-test/package.json
create mode 100644 uni_modules/uni-test/readme.md
create mode 100644 uni_modules/uni-title/changelog.md
create mode 100644 uni_modules/uni-title/components/uni-title/uni-title.vue
create mode 100644 uni_modules/uni-title/package.json
create mode 100644 uni_modules/uni-title/readme.md
create mode 100644 uni_modules/uni-tooltip/changelog.md
create mode 100644 uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue
create mode 100644 uni_modules/uni-tooltip/package.json
create mode 100644 uni_modules/uni-tooltip/readme.md
create mode 100644 uni_modules/uni-transition/changelog.md
create mode 100644 uni_modules/uni-transition/components/uni-transition/createAnimation.js
create mode 100644 uni_modules/uni-transition/components/uni-transition/uni-transition.vue
create mode 100644 uni_modules/uni-transition/package.json
create mode 100644 uni_modules/uni-transition/readme.md
create mode 100644 uni_modules/uni-ui/changelog.md
create mode 100644 uni_modules/uni-ui/components/uni-badge/uni-badge.vue
create mode 100644 uni_modules/uni-ui/components/uni-calendar/calendar.js
create mode 100644 uni_modules/uni-ui/components/uni-calendar/uni-calendar-item.vue
create mode 100644 uni_modules/uni-ui/components/uni-calendar/uni-calendar.vue
create mode 100644 uni_modules/uni-ui/components/uni-calendar/util.js
create mode 100644 uni_modules/uni-ui/components/uni-card/uni-card.vue
create mode 100644 uni_modules/uni-ui/components/uni-collapse-item/uni-collapse-item.vue
create mode 100644 uni_modules/uni-ui/components/uni-collapse/uni-collapse.vue
create mode 100644 uni_modules/uni-ui/components/uni-combox/uni-combox.vue
create mode 100644 uni_modules/uni-ui/components/uni-countdown/uni-countdown.vue
create mode 100644 uni_modules/uni-ui/components/uni-data-checkbox/clientdb.js
create mode 100644 uni_modules/uni-ui/components/uni-data-checkbox/uni-data-checkbox.vue
create mode 100644 uni_modules/uni-ui/components/uni-dateformat/date-format.js
create mode 100644 uni_modules/uni-ui/components/uni-dateformat/uni-dateformat.vue
create mode 100644 uni_modules/uni-ui/components/uni-datetime-picker/uni-datetime-picker.vue
create mode 100644 uni_modules/uni-ui/components/uni-drawer/uni-drawer.vue
create mode 100644 uni_modules/uni-ui/components/uni-easyinput/common.js
create mode 100644 uni_modules/uni-ui/components/uni-easyinput/uni-easyinput.vue
create mode 100644 uni_modules/uni-ui/components/uni-fab/uni-fab.vue
create mode 100644 uni_modules/uni-ui/components/uni-fav/uni-fav.vue
create mode 100644 uni_modules/uni-ui/components/uni-field/uni-field.vue
create mode 100644 uni_modules/uni-ui/components/uni-forms-item/uni-forms-item.vue
create mode 100644 uni_modules/uni-ui/components/uni-forms/uni-forms.vue
create mode 100644 uni_modules/uni-ui/components/uni-forms/validate.js
create mode 100644 uni_modules/uni-ui/components/uni-goods-nav/uni-goods-nav.vue
create mode 100644 uni_modules/uni-ui/components/uni-grid-item/uni-grid-item.vue
create mode 100644 uni_modules/uni-ui/components/uni-grid/uni-grid.vue
create mode 100644 uni_modules/uni-ui/components/uni-group/uni-group.vue
create mode 100644 uni_modules/uni-ui/components/uni-icons/icons.js
create mode 100644 uni_modules/uni-ui/components/uni-icons/uni-icons.vue
create mode 100644 uni_modules/uni-ui/components/uni-icons/uni.ttf
create mode 100644 uni_modules/uni-ui/components/uni-indexed-list/uni-indexed-list-item.vue
create mode 100644 uni_modules/uni-ui/components/uni-indexed-list/uni-indexed-list.vue
create mode 100644 uni_modules/uni-ui/components/uni-link/uni-link.vue
create mode 100644 uni_modules/uni-ui/components/uni-list-ad/uni-list-ad.vue
create mode 100644 uni_modules/uni-ui/components/uni-list-chat/uni-list-chat.scss
create mode 100644 uni_modules/uni-ui/components/uni-list-chat/uni-list-chat.vue
create mode 100644 uni_modules/uni-ui/components/uni-list-item/uni-list-item.vue
create mode 100644 uni_modules/uni-ui/components/uni-list/uni-list.vue
create mode 100644 uni_modules/uni-ui/components/uni-list/uni-refresh.vue
create mode 100644 uni_modules/uni-ui/components/uni-list/uni-refresh.wxs
create mode 100644 uni_modules/uni-ui/components/uni-load-more/uni-load-more.vue
create mode 100644 uni_modules/uni-ui/components/uni-nav-bar/uni-nav-bar.vue
create mode 100644 uni_modules/uni-ui/components/uni-notice-bar/uni-notice-bar.vue
create mode 100644 uni_modules/uni-ui/components/uni-number-box/uni-number-box.vue
create mode 100644 uni_modules/uni-ui/components/uni-pagination/uni-pagination.vue
create mode 100644 uni_modules/uni-ui/components/uni-popup-dialog/uni-popup-dialog.vue
create mode 100644 uni_modules/uni-ui/components/uni-popup-message/uni-popup-message.vue
create mode 100644 uni_modules/uni-ui/components/uni-popup-share/uni-popup-share.vue
create mode 100644 uni_modules/uni-ui/components/uni-popup/message.js
create mode 100644 uni_modules/uni-ui/components/uni-popup/popup.js
create mode 100644 uni_modules/uni-ui/components/uni-popup/share.js
create mode 100644 uni_modules/uni-ui/components/uni-popup/uni-popup.vue
create mode 100644 uni_modules/uni-ui/components/uni-rate/uni-rate.vue
create mode 100644 uni_modules/uni-ui/components/uni-search-bar/uni-search-bar.vue
create mode 100644 uni_modules/uni-ui/components/uni-section/uni-section.vue
create mode 100644 uni_modules/uni-ui/components/uni-segmented-control/uni-segmented-control.vue
create mode 100644 uni_modules/uni-ui/components/uni-status-bar/uni-status-bar.vue
create mode 100644 uni_modules/uni-ui/components/uni-steps/uni-steps.vue
create mode 100644 uni_modules/uni-ui/components/uni-swipe-action-item/bindingx.js
create mode 100644 uni_modules/uni-ui/components/uni-swipe-action-item/index.wxs
create mode 100644 uni_modules/uni-ui/components/uni-swipe-action-item/mpalipay.js
create mode 100644 uni_modules/uni-ui/components/uni-swipe-action-item/mpother.js
create mode 100644 uni_modules/uni-ui/components/uni-swipe-action-item/mpwxs.js
create mode 100644 uni_modules/uni-ui/components/uni-swipe-action-item/uni-swipe-action-item.vue
create mode 100644 uni_modules/uni-ui/components/uni-swipe-action/uni-swipe-action.vue
create mode 100644 uni_modules/uni-ui/components/uni-swiper-dot/uni-swiper-dot.vue
create mode 100644 uni_modules/uni-ui/components/uni-table/uni-table.vue
create mode 100644 uni_modules/uni-ui/components/uni-tag/uni-tag.vue
create mode 100644 uni_modules/uni-ui/components/uni-td/uni-td.vue
create mode 100644 uni_modules/uni-ui/components/uni-test/uni-test.vue
create mode 100644 uni_modules/uni-ui/components/uni-th/uni-th.vue
create mode 100644 uni_modules/uni-ui/components/uni-title/uni-title.vue
create mode 100644 uni_modules/uni-ui/components/uni-tr/uni-tr.vue
create mode 100644 uni_modules/uni-ui/components/uni-transition/uni-transition.vue
create mode 100644 uni_modules/uni-ui/components/uni-ui/uni-ui.vue
create mode 100644 uni_modules/uni-ui/manifest.json
create mode 100644 uni_modules/uni-ui/package.json
create mode 100644 uni_modules/uni-ui/readme.md
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 uni_modules/v-tabs/changelog.md
create mode 100644 uni_modules/v-tabs/components/v-tabs/props.js
create mode 100644 uni_modules/v-tabs/components/v-tabs/utils.js
create mode 100644 uni_modules/v-tabs/components/v-tabs/v-tabs.vue
create mode 100644 uni_modules/v-tabs/package.json
create mode 100644 uni_modules/v-tabs/readme.md
create mode 100644 utils/common.js
create mode 100644 utils/map.js
create mode 100644 utils/navigateTo.js
create mode 100644 utils/request.js
create mode 100644 utils/storage.js
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a70bc78
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/unpackage
+/node_modules
diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json
new file mode 100644
index 0000000..81f13f4
--- /dev/null
+++ b/.hbuilderx/launch.json
@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+ // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+ "version": "0.0",
+ "configurations": [{
+ "default" :
+ {
+ "launchtype" : "local"
+ },
+ "mp-weixin" :
+ {
+ "launchtype" : "local"
+ },
+ "type" : "uniCloud"
+ }
+ ]
+}
diff --git a/Apis/book.js b/Apis/book.js
new file mode 100644
index 0000000..4f2f983
--- /dev/null
+++ b/Apis/book.js
@@ -0,0 +1,40 @@
+import request from "/utils/request.js";
+export function ClientSite() {
+ return {
+ // 查看所有门店
+ getSiteDetailsAll: (data) => {
+ return request.request({
+ url: `/ClientSite/GetSiteDetailsAll`,
+ data,
+ method: 'get',
+ });
+ },
+ // 根据门店ID查路线图
+ GetSiteGuideById: (id) => {
+ return request.request({
+ url:`/ClientSite/GetSiteGuideById?siteId=${id}`,
+ method: 'get',
+ });
+ },
+ // 获取门店所在的所有城市
+ GetCityAll: () => {
+ return request.request({
+ url: '/ClientSite/GetCityAll',
+ method: 'get',
+ });
+ },
+ // 根据门店所在的城市获取对应的区域
+ GetDistrictByCity: (city) => {
+ return request.request({
+ url: `/ClientSite/GetDistrictByCity?city=${city}`,
+ method: 'get',
+ });
+ },
+ GetSiteStopCarGuideById: (id) => {
+ return request.request({
+ url:`/ClientSite/GetSiteStopCarGuideById?siteId=${id}`,
+ method: 'get',
+ });
+ },
+ }
+}
\ No newline at end of file
diff --git a/Apis/clientCustomer.js b/Apis/clientCustomer.js
new file mode 100644
index 0000000..26c60a1
--- /dev/null
+++ b/Apis/clientCustomer.js
@@ -0,0 +1,55 @@
+import request from '/utils/request.js';
+
+export function getClientCustomerApi() {
+ return {
+ // 获取中介二维码
+ GetMediatorQrCode: () => {
+ return request.request({
+ url: '/ClientMediator/GetMediatorQrCode',
+ method: 'get'
+ });
+ },
+ // 获取中介信息
+ GetMediatorInfoById: () => {
+ return request.request({
+ url: '/ClientMediator/GetMediatorInfoById',
+ method: 'get'
+ });
+ },
+ // 修改中介信息
+ UpdateMediatorInfo: (data) => {
+ return request.request({
+ url: '/ClientMediator/UpdateMediatorInfo',
+ method: 'post',
+ data
+ });
+ },
+ // 获取中介的邀请记录
+ GetMediatorUpUserList: () => {
+ return request.request({
+ url: '/ClientMediator/GetMediatorUpUserList',
+ method: 'post'
+ });
+ },
+ // 获取当前用户绑定的中介信息
+ GetMediatorByUser: () => {
+ return request.request({
+ url: '/ClientMediator/GetMediatorByUser',
+ method: 'get'
+ });
+ },
+ GetMediatorCompanyAllList: () => {
+ return request.request({
+ url: '/ClientMediator/GetMediatorCompanyAllList',
+ method: 'get'
+ });
+ },
+ ApplyMediator: (data) => {
+ return request.request({
+ url: '/ClientMediator/ApplyMediator',
+ method: 'post',
+ data
+ });
+ }
+ };
+}
\ No newline at end of file
diff --git a/Apis/coupon.js b/Apis/coupon.js
new file mode 100644
index 0000000..8618376
--- /dev/null
+++ b/Apis/coupon.js
@@ -0,0 +1,37 @@
+import request from "/utils/request.js";
+export function couponApi() {
+ return {
+ // 获取优惠卷列表
+ GetCouponList: (data) => {
+ return request.request({
+ url: '/ClientCoupon/GetCouponList',
+ method: 'get',
+ data,
+ });
+ },
+ // 领取优惠卷
+ DrawDownCoupon: (data) => {
+ return request.request({
+ url: '/ClientCoupon/DrawDownCoupon?couponCode='+data.couponCode,
+ method: 'post',
+ data,
+ });
+ },
+ // 优惠卷弹窗
+ GetNewUserCouponCode: (data) => {
+ return request.request({
+ url: '/ClientCoupon/GetNewUserCouponCode',
+ method: 'get',
+ data,
+ });
+ },
+ // 美团优惠卷
+ GetMeiTuanCodeByPhone: (data) => {
+ return request.request({
+ url: '/MeiTuan/GetMeiTuanCodeByPhone',
+ method: 'get',
+ data,
+ });
+ }
+ };
+}
\ No newline at end of file
diff --git a/Apis/goodsList.js b/Apis/goodsList.js
new file mode 100644
index 0000000..f3db32f
--- /dev/null
+++ b/Apis/goodsList.js
@@ -0,0 +1,28 @@
+import request from "/utils/request.js";
+export function useGoodsApi() {
+ return {
+ // 物品清单
+ GetGoodsList: (data) => {
+ return request.request({
+ url: `/ClientOrder/GetGoodsList`,
+ data,
+ method: 'get',
+ });
+ },
+ // 获取设置过的物品清单
+ GetSubmitGoodsList: (id) => {
+ return request.request({
+ url:`/ClientOrder/GetSubmitGoodsList?orderId=${id}`,
+ method: 'get',
+ });
+ },
+ // 提交物品清单
+ SubmitGoodsList: (data) => {
+ return request.request({
+ url: '/ClientOrder/SubmitGoodsList',
+ method: 'post',
+ data
+ });
+ },
+ }
+}
\ No newline at end of file
diff --git a/Apis/home.js b/Apis/home.js
new file mode 100644
index 0000000..3095b4c
--- /dev/null
+++ b/Apis/home.js
@@ -0,0 +1,63 @@
+import request from "/utils/request.js";
+export function useLoginApi() {
+ return {
+ //获取code img
+ getCode: () => {
+ return request.request({
+ url: '/Login/Captcha',
+ method: 'get',
+ });
+ },
+ //登录
+ signIn: (data) => {
+ return request.request({
+ url: '/Login/Login',
+ method: 'post',
+ data,
+ });
+ },
+ signOut: (data) => {
+ return request.request({
+ url: '/user/signOut',
+ method: 'post',
+ data,
+ });
+ },
+ GetUnitTypeAll: () => {
+ return request.request({
+ url: '/ClientSite/GetUnitTypeAll',
+ method: 'get',
+ })
+ },
+ GetHeatSites: () => {
+ return request.request({
+ url: '/ClientSite/GetHeatSites',
+ method: 'get',
+ })
+ },
+ // 理解預約
+ CreateReservation:(data)=>{
+ return request.request({
+ url: '/ClientReservation/CreateReservation',
+ method: 'post',
+ data
+ })
+ },
+ // 获取小程序内容
+ GetPageContent:(data)=>{
+ return request.request({
+ url: '/ClientPageContent/GetPageContent',
+ method: 'get',
+ data
+ })
+ },
+ // 获取限时抢购入口
+ GetFlashSaleEntrance:(data) => {
+ return request.request({
+ url: '/ClientSite/GetFlashSaleEntrance',
+ method: 'get',
+ data,
+ });
+ }
+ };
+}
\ No newline at end of file
diff --git a/Apis/invoice.js b/Apis/invoice.js
new file mode 100644
index 0000000..3d229d0
--- /dev/null
+++ b/Apis/invoice.js
@@ -0,0 +1,55 @@
+import request from "/utils/request.js";
+export function useInvoiceApi() {
+ return {
+ // 发票申请
+ InvoiceApplyFor: (data) => {
+ return request.request({
+ url: '/ClientInvoice/InvoiceApplyFor',
+ method: 'post',
+ data,
+ });
+ },
+ // 获取可开票订单列表
+ GetCanInvoiceList: (data) => {
+ return request.request({
+ url: '/ClientOrder/GetCanInvoiceList',
+ method: 'get',
+ data,
+ }
+ )
+ },
+ // 获取申请开票列表
+ GetInvoiceApplyFor: (data) => {
+ return request.request({
+ url: '/ClientInvoice/GetInvoiceApplyFor',
+ method: 'get',
+ data,
+ }
+ )
+ },
+ // 取消开票
+ CancelInvoiceApplyFor: (data) => {
+ return request.request({
+ url: '/ClientInvoice/CancelInvoiceApplyFor',
+ method: 'get',
+ data,
+ })
+ },
+ // 获取申请开票详情
+ GetInvoiceApplyForById: (data) => {
+ return request.request({
+ url: '/ClientInvoice/GetInvoiceApplyForById',
+ method: 'get',
+ data,
+ })
+ },
+ // 修改发票
+ UpdateInvoiceApplyFor: (data) => {
+ return request.request({
+ url: '/ClientInvoice/UpdateInvoiceApplyFor',
+ method: 'post',
+ data,
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/Apis/lock.js b/Apis/lock.js
new file mode 100644
index 0000000..e4445e9
--- /dev/null
+++ b/Apis/lock.js
@@ -0,0 +1,139 @@
+import request from "/utils/request.js";
+export function useLockApi() {
+ return {
+ GetDyncPwdByMac: (data) => {
+ return request.request({
+ url: '/LockOperation/GetDyncPwd',
+ method: 'get',
+ data,
+ });
+ },
+ GetAccesscontrolQRCodeBySite: (data) => {
+ return request.request({
+ url: '/Accesscontrol/GetAccesscontrolQRCode',
+ method: 'get',
+ data,
+ });
+ },
+ // 门禁远程开门
+ RemoteOpenDoor: (data) => {
+ return request.request({
+ url: '/Accesscontrol/RemoteOpenDoor',
+ method: 'get',
+ data,
+ });
+ },
+ //通通锁远程开锁
+ RemoteOpen: (data) => {
+ return request.request({
+ url: '/LockOperation/RemoteOpen',
+ method: 'post',
+ data,
+ });
+ },
+ // 获取初始化的通通锁列表
+ GetInitLockList: (data) => {
+ return request.request({
+ url: '/Lock/GetLockInfoByOpenId',
+ method: 'get',
+ data,
+ });
+ },
+ // 获取初始化的通通锁信息
+ SaveInitLock: (data) => {
+ return request.request({
+ url: '/Lock/PushLockInfo',
+ method: 'post',
+ data,
+ });
+ },
+ //授权订单
+ OrderAuthorizeCustomer: (data) => {
+ return request.request({
+ url: '/ClientOrder/OrderAuthorizeCustomer',
+ method: 'post',
+ data,
+ });
+ },
+ // 更新授权订单
+ UpdateOrderAuthorizeCustomer: (data) => {
+ return request.request({
+ url: '/ClientOrder/UpdateOrderAuthorizeCustomer',
+ method: 'post',
+ data,
+ });
+ },
+ // 删除授权订单
+ DeleteOrderAuthorize: (data) => {
+ return request.request({
+ url: '/ClientOrder/DeleteOrderAuthorize?authorizeId=' + data.authorizeId,
+ method: 'delete',
+ data,
+ });
+ },
+ // 获取授权列表
+ GetOrderAuthorizeList: (data) => {
+ return request.request({
+ url: '/ClientOrder/GetOrderAuthorizeList',
+ method: 'get',
+ data,
+ });
+ },
+ // 获取授权的订单
+ GetAuthorizeOrderList: (data) => {
+ return request.request({
+ url: '/ClientOrder/GetAuthorizeOrderList',
+ method: 'post',
+ data,
+ });
+ },
+ // 设置用户固定密码
+ SetUserFixedPassword: (data) => {
+ return request.request({
+ url: '/LockOperation/SetUserFixedPassword',
+ method: 'post',
+ data,
+ });
+ },
+ // 门禁绑卡
+ AddCardNumber: (data) => {
+ return request.request({
+ url: '/Site/AddCardNumber',
+ method: 'get',
+ data,
+ });
+ },
+ //通通锁绑卡
+ BindCardByWifiSmartLock: (data) => {
+ return request.request({
+ url: '/LockOperation/BindCardByWifiSmartLock',
+ method: 'post',
+ data,
+ });
+ },
+ // zoned 锁绑卡
+ SetRFIDCard: (data) => {
+ return request.request({
+ url: '/LockOperation/SetRFIDCard',
+ method: 'post',
+ data,
+ });
+ },
+ // zoned 绑卡读取卡结果
+ GetBindingCardResult: (data) => {
+ return request.request({
+ url: '/LockOperation/GetBindingCardResult',
+ method: 'get',
+ data,
+ });
+ },
+ // 就门禁id 获取门禁信息
+ GetNewLockerId: (data) => {
+ return request.request({
+ url: '/Locker/GetNewLockerId',
+ method: 'get',
+ data,
+ });
+ },
+ };
+}
\ No newline at end of file
diff --git a/Apis/login.js b/Apis/login.js
new file mode 100644
index 0000000..4dfb435
--- /dev/null
+++ b/Apis/login.js
@@ -0,0 +1,159 @@
+import request from "/utils/request.js";
+export function useLoginApi() {
+ return {
+ //获取code img
+ getCode: () => {
+ return request.request({
+ url: '/Login/Captcha',
+ method: 'get',
+ });
+ },
+ //登录
+ Login: (data) => {
+ return request.request({
+ url: '/ClientCustomer/Login',
+ method: 'post',
+ data,
+ });
+ },
+ Register: (data) => {
+ return request.request({
+ url: '/ClientCustomer/Register',
+ method: 'post',
+ data,
+ });
+ },
+ EmailVerify: (data) => {
+ return request.request({
+ url: '/ClientCustomer/EmailVerify',
+ method: 'post',
+ data,
+ });
+ },
+ ForgotPassword: (data) => {
+ return request.request({
+ url: '/ClientCustomer/ForgotPassword',
+ method: 'post',
+ data,
+ headers: {
+ "Content-Type": "application/json; charset=utf-8",
+ }
+ });
+ },
+ UpdateUserInfo: (data) => {
+ return request.request({
+ url: '/ClientCustomer/UpdateUserInfo',
+ method: 'post',
+ data,
+ });
+ },
+ // 微信登录
+ AuthorizedLogin: (data) => {
+ return request.request({
+ url:'/ClientCustomer/AuthorizedLogin',
+ method:'post',
+ data,
+ })
+ },
+ // 通过用户授权的code去获取手机号码
+ GetPhoneNumber: (data) => {
+ return request.request({
+ url:`/ClientCustomer/GetPhoneNumber`,
+ method:'get',
+ params:{
+ ...data,
+ isUpdate:true
+ },
+ })
+ },
+ // 通过用户授权的code去获取手机号码
+ GetPhoneNumberNoUpdate: (data) => {
+ return request.request({
+ url:`/ClientCustomer/GetPhoneNumber?code=${data}`,
+ method:'get',
+ data,
+ })
+ },
+ // 获取用户信息
+ GetUserInfo:() =>{
+ return request.request({
+ url:`/ClientCustomer/GetUserInfo`,
+ method:'get',
+ })
+ },
+ // 更新用户信息
+ EditUserInfo: (data) => {
+ return request.request({
+ url: '/ClientCustomer/EditUserInfo',
+ method: 'post',
+ data,
+ });
+ },
+ // 从主题二维码来的
+ GetActivitiesCode: (data) => {
+ return request.request({
+ url: '/ClientCustomer/GetActivitiesCode',
+ method: 'post',
+ data,
+ });
+ },
+ // 获取openId
+ GetOpenId: (data) => {
+ return request.request({
+ url:'/ClientCustomer/GetOpenId',
+ method:'post',
+ data,
+ })
+ },
+ // 获取积分豆
+ GetCustomerPoint: () => {
+ return request.request({
+ url: '/ClientCustomer/GetCustomerPoint',
+ method: 'get',
+ });
+ },
+ // 兑换奖品
+ CustomerExchangeGift: (data) => {
+ return request.request({
+ url: '/ClientPoint/CustomerExchangeGift',
+ method: 'post',
+ data,
+ });
+ },
+ GetGiftInfo: (data) => {
+ return request.request({
+ url: '/ClientPoint/GetGiftInfo',
+ method: 'post',
+ data,
+ });
+ },
+ GetGiftList: () => {
+ return request.request({
+ url: '/ClientPoint/GetGiftList',
+ method: 'get',
+ });
+ },
+ GetCustomerExchangeGift: (data) => {
+ return request.request({
+ url: '/ClientPoint/GetCustomerExchangeGift',
+ method: 'get',
+ data,
+ });
+ },
+ GetCustomerList: (data) => {
+ return request.request({
+ url: '/Customer/GetCustomerList',
+ method: 'get',
+ data,
+ });
+ },
+ ShunFengLogin: (data) => {
+ return request.request({
+ url: '/ShunFeng/ShunFengLogin',
+ method: 'post',
+ data,
+ });
+ }
+
+ };
+}
\ No newline at end of file
diff --git a/Apis/order.js b/Apis/order.js
new file mode 100644
index 0000000..513c15c
--- /dev/null
+++ b/Apis/order.js
@@ -0,0 +1,172 @@
+import request from "/utils/request.js";
+export function useOrderApi() {
+ return {
+ GetOrderById: (data) => {
+ return request.request({
+ url: '/ClientOrder/GetOrderById',
+ method: 'get',
+ data,
+ });
+ },
+ GetOrderList: (data) => {
+ return request.request({
+ url: '/ClientOrder/GetOrderList',
+ method: 'get',
+ data,
+ });
+ },
+ AddOrder: (data) => {
+ return request.request({
+ url: '/ClientOrder/AddOrder',
+ method: 'post',
+ data,
+ });
+ },
+ AddOrder2: (data) => {
+ return request.request({
+ url: '/ClientOrder/AddOrder2',
+ method: 'post',
+ data,
+ });
+ },
+ UploaderImage: (data) => {
+ return request.uploadFile({
+ url: '/ClientImages/UploadFileByALiYun',
+ method: 'post',
+ data,
+ headers:{'Content-Type':'multipart/form-data'}
+ });
+ },
+ ApplyForRefundLocker: (data) => {
+ return request.request({
+ url: '/ClientOrder/ApplyForRefundLocker',
+ method: 'post',
+ data,
+ });
+ },
+ CancelApplyForRefundLocker: (data) => {
+ return request.request({
+ url: `/ClientOrder/CancelApplyForRefundLocker?orderId=${data}`,
+ method: 'post',
+ data,
+ });
+ },
+ SubmitOrderEvaluate: (data) => {
+ return request.request({
+ url: '/ClientOrder/SubmitOrderEvaluate',
+ method: 'post',
+ data,
+ });
+ },
+ //续租订单价格
+ ContinuationOrderPrice:(data)=>{
+ return request.request({
+ url: '/ClientOrder/ContinuationOrderPrice',
+ method: 'get',
+ data,
+ })
+ },
+ //续租订单价格
+ ContinuationOrderPricePost:(data)=>{
+ return request.request({
+ url: '/ClientOrder/ContinuationOrderPrice',
+ method: 'post',
+ data,
+ })
+ },
+ //续租订单
+ ContinuationOrder:(data)=>{
+ return request.request({
+ url: '/ClientOrder/ContinuationOrder',
+ method: 'post',
+ data,
+ })
+ },
+ //续租订单
+ ContinuationOrderH5:(data)=>{
+ return request.request({
+ url: '/ClientOrder/ContinuationOrderH5',
+ method: 'post',
+ data,
+ })
+ },
+ // 关闭支付
+ CloseWeChatPayment:(data)=>{
+ return request.request({
+ url: `/ClientOrder/CloseWeChatPayment?out_trade_no=${data.out_trade_no}`,
+ method: 'post',
+ data,
+ })
+ },
+ //授权
+ OrderAuthorization:(data)=>{
+ return request.request({
+ url: '/ClientOrder/OrderAuthorization',
+ method: 'post',
+ data,
+ })
+ },
+ // 获取信息
+ GetOrderAuthorizationFace:(data)=>{
+ return request.request({
+ url: '/ClientOrder/GetOrderAuthorizationFace',
+ method: 'get',
+ data,
+ })
+ },
+ // 申请退押金
+ WeChatMerchantRefund:(data)=>{
+ return request.request({
+ url: '/ClientOrder/WeChatMerchantRefund',
+ method: 'get',
+ data,
+ })
+ },
+ // 获取起租天数
+ GetStartDateRntalByKey: () => {
+ return request.request({
+ url: '/sysconfig/GetStartDateRntalByKey',
+ method: 'get'
+ });
+ },
+ GenerateQuotation : (data) => {
+ return request.request({
+ url: '/ClientSite/GenerateQuotation',
+ method: 'post',
+ data,
+ responseType: 'arraybuffer'
+ });
+ },
+ // 获取锁订单时间
+ GetLockOrderTime: (data) => {
+ return request.request({
+ url: '/ClientOrder/GetLockOrderTime',
+ method: 'post',
+ params: data,
+ });
+ },
+ // 取消支付
+ OrderCountdownTime: (data) => {
+ return request.request({
+ url: '/ClientOrder/OrderCountdownTime',
+ method: 'post',
+ params: data,
+ });
+ },
+ // 继续支付
+ ContinueOrderPay: (data) => {
+ return request.request({
+ url: '/ClientOrder/ContinueOrderPay',
+ method: 'post',
+ params: data,
+ });
+ },
+ GetAppText: (data) => {
+ return request.request({
+ url: '/APP/GetAppText',
+ method: 'get',
+ data
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/Apis/recommend.js b/Apis/recommend.js
new file mode 100644
index 0000000..a0a580d
--- /dev/null
+++ b/Apis/recommend.js
@@ -0,0 +1,21 @@
+import request from "/utils/request.js";
+export function useRecommend() {
+ return {
+ // 获取推荐列表
+ GetRecommend: (data) => {
+ return request.request({
+ url: '/ClientCustomer/GetRecommend',
+ data,
+ method: 'get',
+ });
+ },
+ // 获取推荐人数
+ GetRecommendCount: (data) => {
+ return request.request({
+ url: '/ClientCustomer/GetRecommendCount',
+ data,
+ method: 'get',
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/Apis/site.js b/Apis/site.js
new file mode 100644
index 0000000..e05d425
--- /dev/null
+++ b/Apis/site.js
@@ -0,0 +1,70 @@
+import request from "/utils/request.js";
+export function useSiteApi() {
+ return {
+ // 根據門店id 獲取門店
+ GetUnitTypeBySiteId: (data) => {
+ return request.request({
+ url: '/ClientSite/GetUnitTypeBySiteId',
+ method: 'get',
+ data,
+ });
+ },
+ GetLockerBySiteId: (data) => {
+ return request.request({
+ url: '/ClientSite/GetLockerBySiteIdList',
+ method: 'get',
+ data,
+ });
+ },
+ GetLockerById: (data) => {
+ return request.request({
+ url: '/ClientSite/GetLockerById',
+ method: 'get',
+ data,
+ });
+ },
+ GetLockerExpense: (data) => {
+ return request.request({
+ url: '/ClientSite/GetLockerExpense',
+ method: 'post',
+ data,
+ });
+ },
+ AlternateReservation: (data) => {
+ return request.request({
+ url:'/ClientUnitType/AlternateReservation',
+ method: 'post',
+ data,
+ });
+ },
+ GetReserveIsEnable: (data) => {
+ return request.request({
+ url:'/ClientUnitType/GetReserveIsEnable',
+ method: 'get',
+ data,
+ });
+ },
+ // 取消預約
+ CancelReservation: (data) => {
+ return request.request({
+ url:'/ClientUnitType/CancelReservation',
+ method: 'post',
+ data,
+ });
+ },
+ // 获取五羊门店
+ GetMultipleStoreInfo: () => {
+ return request.request({
+ url: '/ClientSite/GetMultipleStoreInfo',
+ method: 'get',
+ });
+ },
+ GetLockerAgreementHTMLById: (data) => {
+ return request.request({
+ url: '/ClientSite/GetLockerAgreementHTMLById',
+ method: 'get',
+ data,
+ });
+ }
+ };
+}
\ No newline at end of file
diff --git a/Apis/validInfo.js b/Apis/validInfo.js
new file mode 100644
index 0000000..dc0c2aa
--- /dev/null
+++ b/Apis/validInfo.js
@@ -0,0 +1,67 @@
+import request from "/utils/request.js";
+export function authInfoApi() {
+ return {
+ // 获取认证列表
+ GetCertificateList: (data) => {
+ return request.request({
+ url: '/InfoCertification/GetCertificateList',
+ method: 'get',
+ data,
+ });
+ },
+ // 获取是否认证过
+ GetIsCertification: () => {
+ return request.request({
+ url: '/ClientInfoCertification/GetIsCertification',
+ method: 'get',
+ });
+ },
+ // 获取认证详情
+ GetCertificationInfo: () => {
+ return request.request({
+ url: '/ClientInfoCertification/GetCertificateByUserId',
+ method: 'get',
+ });
+ },
+ // 提交企业认证
+ SubmitEnterpriseCertification: (data) => {
+ return request.request({
+ url: '/ClientInfoCertification/SubmitEnterpriseCertification',
+ method: 'post',
+ data,
+ });
+ },
+ // 提交个人认证
+ SubmitPersonCertification: (data) => {
+ return request.request({
+ url: '/ClientInfoCertification/SubmitIndividualCertification',
+ method: 'post',
+ data,
+ });
+ },
+ // 修改验证信息
+ UpdateCertification: (data) => {
+ return request.request({
+ url: '/ClientInfoCertification/UpdateCertification',
+ method: 'post',
+ data,
+ });
+ },
+ // 领取优惠卷
+ DrawDownCoupon: (data) => {
+ return request.request({
+ url: '/ClientCoupon/DrawDownCoupon?couponCode='+data.couponCode,
+ method: 'post',
+ data,
+ });
+ },
+ // 优惠卷弹窗
+ GetNewUserCouponCode: (data) => {
+ return request.request({
+ url: '/ClientCoupon/GetNewUserCouponCode',
+ method: 'get',
+ data,
+ });
+ }
+ };
+}
\ No newline at end of file
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..24b165d
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,241 @@
+
+
+
diff --git a/README.md b/README.md
index a0b33ac..e37e4b1 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,20 @@
-# SFH5
+# Introduction
+TODO: Give a short introduction of your project. Let this section explain the objectives or the motivation behind this project.
-金刚顺丰H5
\ No newline at end of file
+# Getting Started
+TODO: Guide users through getting your code up and running on their own system. In this section you can talk about:
+1. Installation process
+2. Software dependencies
+3. Latest releases
+4. API references
+
+# Build and Test
+TODO: Describe and show how to build your code and run the tests.
+
+# Contribute
+TODO: Explain how other users and developers can contribute to make your code better.
+
+If you want to learn more about creating good readme files then refer the following [guidelines](https://docs.microsoft.com/en-us/azure/devops/repos/git/create-a-readme?view=azure-devops). You can also seek inspiration from the below readme files:
+- [ASP.NET Core](https://github.com/aspnet/Home)
+- [Visual Studio Code](https://github.com/Microsoft/vscode)
+- [Chakra Core](https://github.com/Microsoft/ChakraCore)
\ No newline at end of file
diff --git a/components/AgreementCheck.vue b/components/AgreementCheck.vue
new file mode 100644
index 0000000..74bd8c1
--- /dev/null
+++ b/components/AgreementCheck.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/MediatorinviteDetail.vue b/components/MediatorinviteDetail.vue
new file mode 100644
index 0000000..eb792f1
--- /dev/null
+++ b/components/MediatorinviteDetail.vue
@@ -0,0 +1,158 @@
+
+
+
+
+ {{ $t("referrerInfo.inviteRecord") }}
+
+
+
+
+ {{ $t("referrerInfo.inviteUserName") }}
+ {{ $t("referrerInfo.invitePhone") }}
+ {{ $t("referrerInfo.registrationTime") }}
+
+
+
+
+ {{ item.customerName }}
+ {{ item.phone }}
+ {{ item.createTime }}
+
+
+
+ {{ $t("referrerInfo.inviteEmpty") }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/coupon.vue b/components/coupon.vue
new file mode 100644
index 0000000..978f47e
--- /dev/null
+++ b/components/coupon.vue
@@ -0,0 +1,820 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+ {{ $t('coupon.validityPeriod') }}:{{ item.endTime.substr(0,10) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('coupon.coupon') }}
+
+
+ {{ $t('coupon.useTips') }}
+
+
+
+
+
+
+
+ {{ $t('coupon.storewide') }}
+
+
+ {{ $t('coupon.limitedtimeoffer') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.couponCode }} {{ couponTitle(item) }}
+
+
+
+ {{ $t('coupon.validityPeriod') }}:{{ item.startDate.substr(0,10) }} ~ {{ item.endDate.substr(0,10)}}
+
+
+ {{ $t('coupon.instructions') }}:{{ couponDesc(item) }} {{ item.siteName.length ?`${item.siteName.toString()}`: $t('coupon.storewide')}} {{ item.renewUsable?$t('coupon.renewable'):$t('coupon.noRenewable') }} {{ item.unitTypeName.length ? `(${item.unitTypeName.toString()})` : `(${$t("coupon.all")})`}}
+
+
+
+
+ {{ item.siteName.length ?`${item.siteName.length>1?$t('coupon.multiStoreUse'):item.siteName[0]}`: $t('coupon.storewide') }}
+
+
+ {{ $t('coupon.limitedtimeoffer') }}
+
+
+
+
+
+
+
+
+
+
+
+ 显示不可用优惠卷>>
+
+
+
+
+ {{ item.couponCode }} {{ couponTitle(item) }}
+
+
+
+ {{ $t('coupon.validityPeriod') }}:{{ item.startDate.substr(0,10) }} ~ {{ item.endDate.substr(0,10)}}
+
+
+ {{ $t('coupon.instructions') }}:{{ couponDesc(item) }} {{ item.siteName.length ?`${item.siteName.toString()}`: $t('coupon.storewide')}} {{ item.renewUsable?$t('coupon.renewable'):$t('coupon.noRenewable') }} {{ item.unitTypeName.length ? `(${item.unitTypeName.toString()})` : `(${$t("coupon.all")})`}}
+
+
+
+
+ {{ item.siteName.length ?`${item.siteName.length>1?$t('coupon.multiStoreUse'):item.siteName[0]}`: $t('coupon.storewide') }}
+
+
+ {{ $t('coupon.limitedtimeoffer') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("common.bindPhone") }}
+ {{ $t("common.bindPhoneUnlock") }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/inviteDetail.vue b/components/inviteDetail.vue
new file mode 100644
index 0000000..084490e
--- /dev/null
+++ b/components/inviteDetail.vue
@@ -0,0 +1,163 @@
+
+
+
+
+ {{ $t('inviteDetail.title') }}
+
+
+
+
+ {{ $t('inviteDetail.Username') }}
+ {{ $t('inviteDetail.Registration Date') }}
+ {{ $t('inviteDetail.Status') }}
+
+
+
+
+ {{ item.name }}
+ {{ item.createTime }}
+ {{ item.status }}
+
+
+
+ {{ $t('inviteDetail.No invitation') }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/my-dropdown.vue b/components/my-dropdown.vue
new file mode 100644
index 0000000..bc01645
--- /dev/null
+++ b/components/my-dropdown.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+ {{ selectedLabel }}
+ ▼
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/myCustomtTabBar.vue b/components/myCustomtTabBar.vue
new file mode 100644
index 0000000..cd1652b
--- /dev/null
+++ b/components/myCustomtTabBar.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
diff --git a/components/myModal.vue b/components/myModal.vue
new file mode 100644
index 0000000..ea2154a
--- /dev/null
+++ b/components/myModal.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/myPopup.vue b/components/myPopup.vue
new file mode 100644
index 0000000..1d6097f
--- /dev/null
+++ b/components/myPopup.vue
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/myUpload.vue b/components/myUpload.vue
new file mode 100644
index 0000000..8c731a1
--- /dev/null
+++ b/components/myUpload.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
diff --git a/components/navBar.vue b/components/navBar.vue
new file mode 100644
index 0000000..df17d8e
--- /dev/null
+++ b/components/navBar.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/noToken.vue b/components/noToken.vue
new file mode 100644
index 0000000..2dbda2c
--- /dev/null
+++ b/components/noToken.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/siteDetail.vue b/components/siteDetail.vue
new file mode 100644
index 0000000..d7d6d12
--- /dev/null
+++ b/components/siteDetail.vue
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+ {{ siteItem.name }}
+
+ {{ siteItem.distance }}KM
+ [ {{ $t("home.navigate") }} ]
+
+
+
+
+
+
+ {{ siteItem.city }}
+
+
+
+
+ {{ siteItem.district }}
+
+ [ P ]
+
+
+
+
+ [ {{ $t("home.wayfinding") }} ]
+
+
+
+
+
+
+ {{ state.isShow ?$t("common.Collapse"):$t("common.Expand") }} 五羊门店 {{ $t("common.OtherStores") }}
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+ {{ $t("common.Collapse") }} 五羊店
+
+
+
+
+
+
diff --git a/components/textEllipsis.vue b/components/textEllipsis.vue
new file mode 100644
index 0000000..7f2545f
--- /dev/null
+++ b/components/textEllipsis.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+ {{ props.address }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/updatePopup.vue b/components/updatePopup.vue
new file mode 100644
index 0000000..823882f
--- /dev/null
+++ b/components/updatePopup.vue
@@ -0,0 +1,212 @@
+
+
+
+
+ {{ $t("common.bindPhone") }}
+ {{ $t("common.bindPhoneAfter") }}
+
+
+
+
+
+
+
diff --git a/components/uv-tabsSelf/props.js b/components/uv-tabsSelf/props.js
new file mode 100644
index 0000000..acab29e
--- /dev/null
+++ b/components/uv-tabsSelf/props.js
@@ -0,0 +1,71 @@
+export default {
+ props: {
+ // 滑块的移动过渡时间,单位ms
+ duration: {
+ type: Number,
+ default: 300
+ },
+ // tabs标签数组
+ list: {
+ type: Array,
+ default: () => []
+ },
+ // 滑块颜色
+ lineColor: {
+ type: String,
+ default: '#3c9cff'
+ },
+ // 菜单选择中时的样式
+ activeStyle: {
+ type: [String, Object],
+ default: () => ({
+ color: '#303133'
+ })
+ },
+ // 菜单非选中时的样式
+ inactiveStyle: {
+ type: [String, Object],
+ default: () => ({
+ color: '#606266'
+ })
+ },
+ // 滑块长度
+ lineWidth: {
+ type: [String, Number],
+ default: 20
+ },
+ // 滑块高度
+ lineHeight: {
+ type: [String, Number],
+ default: 3
+ },
+ // 滑块背景显示大小,当滑块背景设置为图片时使用
+ lineBgSize: {
+ type: String,
+ default: 'cover'
+ },
+ // 菜单item的样式
+ itemStyle: {
+ type: [String, Object],
+ default: () => ({
+ height: '44px'
+ })
+ },
+ // 菜单是否可滚动
+ scrollable: {
+ type: Boolean,
+ default: true
+ },
+ // 当前选中标签的索引
+ current: {
+ type: [Number, String],
+ default: 0
+ },
+ // 默认读取的键名
+ keyName: {
+ type: String,
+ default: 'name'
+ },
+ ...uni.$uv?.props?.tabs
+ }
+}
\ No newline at end of file
diff --git a/components/uv-tabsSelf/uv-tabs.vue b/components/uv-tabsSelf/uv-tabs.vue
new file mode 100644
index 0000000..1cebe2e
--- /dev/null
+++ b/components/uv-tabsSelf/uv-tabs.vue
@@ -0,0 +1,412 @@
+
+
+
+
+
+
+
+
+
+
+ {{ item[keyName] }}
+
+ {{ item['areaRange'] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/wxNavbar.vue b/components/wxNavbar.vue
new file mode 100644
index 0000000..0c06e90
--- /dev/null
+++ b/components/wxNavbar.vue
@@ -0,0 +1,51 @@
+
+
+
+ {{ props.title }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/config/index.js b/config/index.js
new file mode 100644
index 0000000..b44bb01
--- /dev/null
+++ b/config/index.js
@@ -0,0 +1,61 @@
+export const isKingKong = true;
+export const isShichang = !isKingKong; // 是否是时昌小程序环境
+const systemInfo = uni.getSystemInfoSync();
+export const isWeChatMiniProgram = systemInfo.hostName === 'WeChat'; // 是否是微信小程序环境
+export const isXiaohongshu = systemInfo.hostName === 'xhs'; // 是否是小红书环境
+const isDev = process.env.NODE_ENV === 'development' // 是否是开发环境
+export const OFFICIAL_URL = 'https://elitesys.kingkongcang.com/Mini' // 跳转小程序地址
+// 如果是小程序 就要写全域名, 如果是h5 自动获取域名 兼容测试环境(http://8.134.73.118:10000/api 不用进行跨域操作) 跟正式环境 自动获取域名补充
+export const devURL = "https://uat.kingkongcang.com/adminApi" // 开发环境地址 'http://118.145.200.78:10000/api http://localhost:5182/api' "https://dev.kingkongcang.com/adminApi"
+export const testURL = isKingKong?"https://uat.kingkongcang.com/adminApi":"https://www.scstorage.net/adminApi" // 测试环境地址
+export const prodURL = isKingKong?"https://elitesys.kingkongcang.com/adminApi":"https://www.scstorage.net/adminApi" // 正式环境地址
+export let IsApp = false
+// #ifdef APP-PLUS
+IsApp = true
+// #endif
+export let isH5 = false// h5环境下 下单会跳转到小程序
+export let RElEASE_DATE = '2026/02/26'
+let accountInfo = {}
+// #ifdef MP-WEIXIN || MP-XHS
+accountInfo = uni.getAccountInfoSync();
+isH5 = false
+ // #endif
+export const AppId = accountInfo?.miniProgram?.appId
+export const envVersion = accountInfo?.miniProgram?.envVersion
+const returnBaseUrl = () => {
+ if (isWeChatMiniProgram || isXiaohongshu || IsApp) {
+ if (envVersion === 'develop') {
+ return devURL;
+ } else if (envVersion === 'trial') {
+ return testURL;
+ } else if (envVersion === 'release') {
+ return prodURL;
+ } else {
+ return prodURL;
+ }
+ // 预留 防止出错
+ return isDev ? testURL: prodURL; // https://elitesys.kingkongcang.com/adminApi // 测试环境 https://uat.kingkongcang.com/adminApi 开发环境 https://dev.kingkongcang.com/adminApi http://localhost:5182/
+
+ } else {
+ return isDev
+ ? `${window.location.origin}/api`
+ : `${window.location.origin}/adminApi`;
+ }
+};
+export const baseUrl = returnBaseUrl();
+export const baseImageUrl = isKingKong? 'https://elitesoss.oss-cn-guangzhou.aliyuncs.com/':'https://scstorage.oss-cn-guangzhou.aliyuncs.com/'
+
+export const currency = isKingKong ? '¥' : '¥';
+// 小程序默认金刚配色先
+export const theme = ((isWeChatMiniProgram || isXiaohongshu) && isKingKong) ? 'golden' : 'default'; // 默认主题 - "default" 金刚色主题 - "golden"
+export const projectInfo = {
+ name: isKingKong ? '金刚迷你仓' : '时昌迷你仓', // 名字:金刚迷你仓、时昌迷你仓
+ miniName: isKingKong ? '金刚迷你仓' : '时昌迷你仓', // 小程序名字:迷你仓订仓、时昌迷你仓
+ phone: isKingKong ? '400-818-1813' : '15323894878',
+ callPhone: isKingKong ? '4008181813' : '15323894878'
+};
+export const watermarkURL= '?x-oss-process=image/watermark,text_5Zu-54mH6K6k6K-B5LiT55So,t_80,g_center,rotate_45,color_FF0000,size_100'
+// 时昌微信二维码
+export const scWechatImg = baseImageUrl + "d3572937-4a9c-410e-992b-c19ff03e9ada.jpg"
+
+export const setOrderDays = isKingKong ? 30 : 7; // 金刚小程序默认7天,其他默认30天
\ No newline at end of file
diff --git a/hooks/index.js b/hooks/index.js
new file mode 100644
index 0000000..243d91b
--- /dev/null
+++ b/hooks/index.js
@@ -0,0 +1,43 @@
+import { ref,onBeforeMount} from "vue";
+/**
+ * 倒计时
+ * @param {Number} second 倒计时秒数
+ * @return {Number} count 倒计时秒数
+ * @return {Function} countDown 倒计时函数
+ * @example
+ * const { count, countDown } = useCountDown()
+ * countDown(60)
+ *
{{ count }}
+ */
+
+export function useCountDown() {
+ const count = ref(0)
+ const timer = ref(null);
+ const countDown = (second = 60, ck = () => { }) => {
+ if (count.value === 0 && timer.value === null) {
+ ck();
+ count.value = second;
+ timer.value = setInterval(() => {
+ count.value--
+ if (count.value === 0) {
+ clearInterval(timer.value)
+ timer.value = null
+ }
+ }, 1000);
+ }
+ };
+ const cancelCout=()=>{
+ clearInterval(timer.value)
+ timer.value = null
+ count.value = 0
+ }
+ onBeforeMount(() => {
+ timer.value && clearInterval(timer.value)
+ });
+
+ return {
+ count,
+ countDown,
+ cancelCout
+ };
+}
diff --git a/hooks/useCountDown.js b/hooks/useCountDown.js
new file mode 100644
index 0000000..0aa7fc5
--- /dev/null
+++ b/hooks/useCountDown.js
@@ -0,0 +1,68 @@
+import { ref, onUnmounted } from 'vue'
+import dayjs from 'dayjs'
+
+export function useCountDown(startTime, endTime, onFinished) {
+ if (!startTime || !endTime) {
+ throw new Error('startTime and endTime are required')
+ }
+ const remaining = ref(0)
+ const formatted = ref('00:00:00')
+ let timer = null
+
+ const toTimestamp = (t) => dayjs(t).valueOf()
+
+ let startTs = toTimestamp(startTime)
+ let endTs = toTimestamp(endTime)
+
+ const calc = () => {
+ const now = dayjs().valueOf()
+ if (now < startTs) {
+ remaining.value = startTs - now
+ } else if (now >= startTs && now < endTs) {
+ remaining.value = endTs - now
+ } else {
+ remaining.value = 0
+ clearInterval(timer)
+ timer = null
+ onFinished && onFinished()
+ }
+ format()
+ }
+
+ const format = () => {
+ let left = remaining.value
+ let totalSeconds = Math.floor(left / 1000)
+ const days = Math.floor(totalSeconds / 86400)
+ totalSeconds %= 86400
+ const h = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')
+ const m = String(Math.floor((totalSeconds % 3600) / 60)).padStart(2, '0')
+ const s = String(totalSeconds % 60).padStart(2, '0')
+ formatted.value = days > 0 ? `${days}天 ${h}:${m}:${s}` : `${h}:${m}:${s}`
+ }
+
+ const start = () => {
+ // 如果已有计时器,先清掉
+ if (timer) clearInterval(timer)
+ startTs = toTimestamp(startTime)
+ endTs = toTimestamp(endTime)
+ calc()
+ timer = setInterval(calc, 1000)
+ }
+
+ const reset = (newStart, newEnd) => {
+ startTime = newStart
+ endTime = newEnd
+ start()
+ }
+
+ onUnmounted(() => {
+ if (timer) clearInterval(timer)
+ })
+
+ return {
+ formatted,
+ remaining,
+ start,
+ reset
+ }
+}
diff --git a/hooks/useLocation.js b/hooks/useLocation.js
new file mode 100644
index 0000000..5bd77c3
--- /dev/null
+++ b/hooks/useLocation.js
@@ -0,0 +1,54 @@
+import { reactive } from "vue";
+import { useMainStore } from "@/store/index";
+
+export function useLocation() {
+ const { storeState, setLocation } = useMainStore();
+
+ const locationState = reactive({
+ showGetLocation: false,
+ latitude: 0,
+ longitude: 0
+ });
+
+ const getLocation = () => {
+ return new Promise((resolve) => {
+ // 1️⃣ 优先使用 store 里的定位
+ if (storeState.location?.latitude && storeState.location?.longitude) {
+ locationState.latitude = storeState.location.latitude;
+ locationState.longitude = storeState.location.longitude;
+ resolve(true);
+ return;
+ }
+
+ // 2️⃣ 本地已经有定位
+ if (locationState.latitude && locationState.longitude) {
+ resolve(true);
+ return;
+ }
+
+ // 3️⃣ 没有定位才请求
+ SFUIP.getLocation().then(res => {
+ if (!res.success) {
+ resolve(false);
+ return;
+ }
+
+ const { latitude, longitude } = res.data || {};
+
+ if (latitude && longitude) {
+ locationState.latitude = latitude;
+ locationState.longitude = longitude;
+ locationState.showGetLocation = false;
+
+ setLocation({ latitude, longitude });
+ resolve(true);
+ } else {
+ resolve(false);
+ }
+ });
+
+ });
+ };
+
+ return { locationState, getLocation };
+}
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..d028183
--- /dev/null
+++ b/index.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+ 金刚迷你仓
+
+
+
+
+
+
+
+
diff --git a/locale/en.json b/locale/en.json
new file mode 100644
index 0000000..9403d1c
--- /dev/null
+++ b/locale/en.json
@@ -0,0 +1,502 @@
+{
+ "common.confirm": "Confirm",
+ "common.cancel": "Cancel",
+ "common.title": "Tips",
+ "common.noData": "No Data",
+ "common.delete": "Delete",
+ "common.update": "Update",
+ "common.password": "password",
+ "common.close": "Close",
+ "common.Skiptoday": "Skip today",
+ "common.payableTime": "Payable Time",
+ "common.AuthorizationOrder": "Authorization Order",
+ "common.cancelOrder": "Cancel Order",
+ "common.cancelOrderTips": "Are you sure you want to cancel the current order?",
+ "common.unpaidOrderTips": "There are unpaid orders, please pay first, or cancel the order before placing a new one!",
+ "common.cantUselocker": "This locker cannot be rented, please re-select!",
+ "common.userName": "User Name",
+ "common.logout": "Log Out",
+ "common.logoutTip": "Confirm logout?",
+ "common.FirstTimeLoginTips": "First-time login will automatically create an account.",
+ "common.more": "More",
+ "common.SpaceSpecsGuide": "Space Specs Guide",
+ "common.Seelegend": "See legend",
+ "common.Rent": "Rent",
+ "common.OriginalPrice": "Original Price",
+ "common.SalePrice": "Sale Price",
+ "common.SwitchStores": "Switch Stores",
+ "common.SwitchRegion": "Switch Region",
+ "common.Countdown": "Countdown",
+ "common.FlashSale": "Flash Sale",
+ "common.FlashSalePrice": "Flash Sale Price",
+ "common.ClickToCheck": "Click To Check",
+ "common.ClickToZoomIn": "Click To Zoom In",
+ "common.tryZooming": "If access recognition fails, try clicking to zoom in",
+ "common.OnSiteAssessment": "On-Site Assessment",
+ "common.ConsultationQuotation": "Consultation & quotation",
+ "common.Requirement": "Requirement",
+ "common.day": "day(s)",
+ "common.reset": "Reset",
+ "common.notRented": "Not rented",
+ "common.rented": "Rented",
+ "common.locked": "Locked",
+ "locale.auto": "System",
+ "locale.en": "English",
+ "locale.zh-hans": "简体中文",
+ "locale.zh-hant": "繁体中文",
+ "locale.ja": "日语",
+ "index.title": "Hello i18n",
+ "index.home": "Home",
+ "index.component": "Component",
+ "index.api": "API",
+ "index.schema": "Schema",
+ "index.demo": "uni-app globalization",
+ "index.demo-description": "Include uni-framework, manifest.json, pages.json, tabbar, Page, Component, API, Schema",
+ "index.detail": "Detail",
+ "index.language": "Language",
+ "index.language-info": "Settings",
+ "index.system-language": "System language",
+ "index.application-language": "Application language",
+ "index.language-change-confirm": "Applying this setting will restart the app",
+ "api.message": "Message",
+ "schema.name": "Name",
+ "schema.add": "Add",
+ "schema.add-success": "Add success",
+ "tabbar.home": "HOME",
+ "tabbar.book": "BOOK",
+ "tabbar.unlock": "UNLOCK",
+ "tabbar.personal": "PERSONAL",
+ "home.select": "SELECT A STORE",
+ "home.reserve": "RESERVE",
+ "home.book": "BOOK NOW",
+ "home.detail": "DETAILS",
+ "home.appointment": "APPOINTMENT",
+ "home.recommend": "RECOMMENDED",
+ "home.morestore": "MORE STORES",
+ "home.navigate": "NAVIGATE",
+ "home.wayfinding": "ROUTE GUIDANCE",
+ "home.travel": "Travel",
+ "home.collection": "Collection",
+ "home.clothes": "Clothes",
+ "home.appliances": "Appliances",
+ "home.goods": "Goods",
+ "home.relocate": "Relocation",
+ "home.wrapper": "Packing",
+ "home.material": "Materials",
+ "home.document": "Document",
+ "home.device": "Equipment",
+ "home.supplies": "Supplies",
+ "home.ecgoods": "E-Commerce",
+ "home.shops": "RETAIL SHOPS",
+ "home.individuals": "INDIVIDUALS",
+ "home.corporates": "CORPORATES",
+ "home.advantage1": "Guarantee",
+ "home.advantage1Info1": "Chain Management",
+ "home.advantage1Info2": "Extensive media coverage",
+ "home.advantage1Info3": "Best Choice",
+ "home.advantage2": "Convenience",
+ "home.advantage2Info1": "24hrs Self-Access",
+ "home.advantage2Info2": "Smart Lock",
+ "home.advantage2Info3": "Flexible Term",
+ "home.advantage3": "Safety",
+ "home.advantage3Info1": "24hrs CCTV",
+ "home.advantage3Info2": "One Door One Lock",
+ "home.advantage3Info3": "Free Insurance",
+ "home.advantage4": "Cleanliness",
+ "home.advantage4Info1": "Environment Control",
+ "home.advantage4Info2": "Fire Safety System",
+ "home.advantage4Info3": "Regular Sterilization",
+ "home.interior": "Interior",
+ "home.serviceHotline": "Customer Service Hotline",
+ "home.quote": "Quote Now",
+ "book.location": "LOCATION",
+ "book.map": "MAP MODE",
+ "book.list": "LIST MODE",
+ "book.city": "City",
+ "book.area": "Area",
+ "book.get": "Find your nearest store",
+ "book.getSite": "You need to turn on the location Settings to show the nearest store",
+ "book.getCode": "Get QR code",
+ "unlock.door": "DOOR",
+ "unlock.lock": "LOCK",
+ "unlock.renew": "RENEW",
+ "unlock.details": "DETAILS",
+ "unlock.moveout": "MOVE OUT",
+ "unlock.cancelPending": "Pending For Move-out Approval",
+ "unlock.outComplete": "Move-out Completed",
+ "unlock.cancel": "Cancel",
+ "unlock.cCancel": "CANCEL",
+ "unlock.cancelout": "Cancel Move-out Request",
+ "unlock.return": "RETURN",
+ "unlock.moveoutReminder": "MOVE OUT REMINDER",
+ "unlock.moveoutTip": "After you finished the termination procedures, your entrance access will be removed. Please make sure your belongings are taken away. Deposit will be returned in 14 working days.",
+ "unlock.uploadTip": "Please take a picture of an empty storage unit and upload it.",
+ "unlock.moveoutSuccess": "Warehouse return request is in process, please patiently wait for staff review!",
+ "unlock.confirmOut": "MOVE OUT",
+ "unlock.evaluate": "EVALUATE",
+ "unlock.disapproval": "DISAPPROVAL",
+ "unlock.disapprovalRemarks": "Disapproval Remarks",
+ "unlock.overdue": "OVERDUE",
+ "unlock.unPaid": "UNPAID",
+ "unlock.order": "MY ORDER",
+ "unlock.login": "Click To Login",
+ "unlock.nodata": "NO DATA",
+ "unlock.auth": "Auth",
+ "unlock.FixedPassword": "Fixed Password",
+ "unlock.AccessControlCardBinding": "Access Control Card Binding",
+ "unlock.LockCardUnbinding": "Lock Card Binding",
+ "unlock.getAuthOrder": "View authorized orders",
+ "unlock.ResetPassword": "Reset Password",
+ "unlock.remoteOpen": "Remote Access",
+ "unlock.remoteOpenLoading": "Door Opening...",
+ "unlock.remoteOpenSuccess": "Access Granted",
+ "unlock.remoteOpenFail": "Access Denied",
+ "unlock.fillInventory": "Please fill in the inventory list before using the warehouse",
+ "unlock.FaceEnrollment": "Enrollment",
+ "unlock.goToPay": "Go to Pay",
+ "unlock.cancelOrder": "Cancel Order",
+ "unlock.Deposit Refund": "Deposit Refund",
+ "unlock.agreement": "Agreement",
+ "bingCard.start": "Start pairing",
+ "bingCard.fail": "The operation failed",
+ "bingCard.Click": "Click [ Start Pairing ]",
+ "bingCard.Pairing": "Pairing",
+ "bingCard.panel": "Place the door card on the dashboard",
+ "bingCard.single": "You will hear a beep sound when card is paired successfully.",
+ "bingCard.close": "After success, you can close this pop-up window manually.",
+ "detail.store": "Store",
+ "detail.unit": "Unit type",
+ "detail.spec": "Ref Spec",
+ "detail.size": "Ref Size",
+ "detail.cSize": "Ref Volume",
+ "detail.cUnit": "UNIT TYPE",
+ "detail.startDate": "START DATE",
+ "detail.lease": "LEASE TERM",
+ "detail.rentalFee": "Rental fee",
+ "detail.cDeposit": "Deposit(1 month)",
+ "detail.cValueAdded": "VALUE-ADDED",
+ "detail.nodemand": "No Demand",
+ "detail.coupon": "COUPON",
+ "detail.valuation": "ITEM VALUATION",
+ "detail.currency": "(Currency: RMB)",
+ "detail.extraTip": "If your belongings exceed a valuation of $5000, please insure the premium yourself.",
+ "detail.feeDetail": "FEE DETAILS",
+ "detail.deposit": "Deposit",
+ "detail.valueAdded": "Value-added",
+ "detail.discount": "Discount",
+ "detail.total": "Total",
+ "detail.next": "NEXT",
+ "detail.read": "I have read and agreed on ",
+ "detail.agreement": "[User Service Agreement]",
+ "detail.agreeTip": "Please read and agree on [User Service Agreement].",
+ "detail.orderNum": "ORDER NUMBER",
+ "detail.type": "UNIT TYPE",
+ "detail.period": "LEASE PERIOD",
+ "detail.click": "Details: Click on",
+ "detail.sitemap": "SITEMAP",
+ "detail.selected": "SELECTED",
+ "detail.nodata": "No Data",
+ "detail.noselect": "No Select",
+ "detail.RENEWAL": "RENEWAL",
+ "detail.RefundableDeposit": "Refundable Deposit",
+ "detail.to": "TO",
+ "detail.quotation": "Quotation",
+ "detail.generateQuotation": "Generate Quotation",
+ "detail.regenerateQuotation": "Re-Generate Quotation",
+ "detail.viewQuotation": "View Quotation",
+ "detail.quotationFail": "Quotation generation failed",
+ "detail.quotationSuccess": "Please manually save or forward the quotation",
+ "detail.agreeTerm": "Agree to Terms",
+ "detail.scrollRead": "Please read all terms before agreeing",
+ "detail.points": "Points",
+ "detail.PointsRedemption": "Points Redemption",
+ "detail.AvailablePoints": "Available Points",
+ "detail.DeductionAmount": "Deduction Amount",
+ "door.refresh": "Refresh QR code",
+ "door.refreshPwd": "Refresh Password",
+ "door.tip": "Use facial recgonition device to scan QR code.",
+ "door.valid": "Valid for 1 minute.",
+ "door.pwd": "Enter the password to unlock.",
+ "door.Unlock": "Unlock",
+ "door.UnlockSuccessful": "Unlock Successful",
+ "person.order": "Order details",
+ "person.promotion": "Promotion",
+ "person.identify": "Identification",
+ "person.invoice": "Invoice",
+ "person.guide": "User guide",
+ "person.customer": "Customer service",
+ "person.invitation": "Invitation",
+ "person.evaluation": "Evaluation",
+ "person.latestEvents": "Latest Events",
+ "person.lock": "Locks",
+ "person.share": "SHARE AND GAIN RENT-GREE",
+ "person.join": "JOIN NOW",
+ "person.VideoTutorial": "Tutorial",
+ "person.referrerInfo": "Referrer Info",
+ "site.branch": "BRANCH",
+ "site.address": "Address",
+ "site.tip": "*illegal items are strictly prohibited",
+ "site.tip2": "*Charges are based on internal dimensions only",
+ "site.ReferenceVolume": "Ref Volume",
+ "site.WarehouseInternalDimensions": "Int. Dims",
+ "site.full": "SORRY,THIS TYPE IS FULL,PLEASE SELECT ANOTHER TYPE.",
+ "site.appointment": "Appointment",
+ "site.appointmentSuccess": "Appointment successful. Our staff will contact you shortly, please keep your phone accessible!",
+ "site.hadAppointment": "Already Appointment",
+ "site.cancelAppointment": "Whether to cancel the reservation",
+ "site.noAccessId": "The accesscontrol ID is not available",
+ "site.noPermission": "There is no permission for this store",
+ "login.account": "account",
+ "login.password": "password",
+ "login.confirm": "confirm password",
+ "login.code": "code",
+ "login.input": "Please input",
+ "login.login": "Log in",
+ "login.wxLogin": "WeChat Login",
+ "login.register": "Register an account",
+ "login.forget": "forget the password?",
+ "login.send": "SEND",
+ "login.change": "Change",
+ "login.toLogin": "LOGIN AN ACCOUNT",
+ "login.registered": "Registered",
+ "login.different": "The password is different.",
+ "login.phone": "Phone Number",
+ "login.inputPhone": "Please enter your phone number",
+ "login.phoneFormat": "Invalid phone format",
+ "login.inputCode": "Please enter the code",
+ "login.getCode": "Get Code",
+ "login.sending": "Sending...",
+ "login.sendSuccess": "Code sent",
+ "login.UserAgreement": "《User Agreement》",
+ "login.andAgreeTo": "and agree to",
+ "request.tip": "Tips",
+ "request.cancel": "Cancel",
+ "request.confirm": "Confirm",
+ "request.loginContent": "No login, whether to jump to the login page",
+ "request.captchaError": "CAPTCHA error or expired",
+ "request.userCancel": "Request canceled by user",
+ "request.timeout": "Network request timed out",
+ "request.noConnect": "Failed to connect to server",
+ "request.error": "Error",
+ "toast.copy": "Successful replication",
+ "invite.title1": "Invite friends and",
+ "invite.title2": "win the rewards.",
+ "invite.number": "Invitations",
+ "invite.activity": "Mechanism",
+ "invite.branch": "Branch",
+ "invite.details": "Details",
+ "invite.toInvite": "INVITE NOW",
+ "invite.record": "View records",
+ "invite.disclaimer": "* Disclaimer:",
+ "invite.disContent": " the sole decision of Storage Limited shall be final in case of any dispute.",
+ "common.edit": "Edit",
+ "common.paySuccess": "Payment Successful",
+ "common.payFail": "Payment Failed, Please Try Again!",
+ "common.$": "$",
+ "common.notStarted": "Not Started",
+ "common.status": "Status",
+ "common.verifyInfo": " Info Verify",
+ "common.infoUpdate": "Info Update",
+ "common.saveInfo": "Save Info",
+ "common.personalAuth": "Personal Auth",
+ "common.businessAuth": "Business Auth",
+ "common.IdCardFont": "Upload ID Front",
+ "common.IdCardBack": "Upload ID Back",
+ "common.UploadBusinessLicense": "Upload Business License",
+ "common.noOpen": "Not open, contact staff for details!",
+ "common.isGoAuth": "Upload personal information for verification.",
+ "common.Authentication": "Authentication",
+ "common.submit": "Submit",
+ "common.placeInputAll": "Please enter all the information",
+ "common.goodsList": "Goods List",
+ "common.OnlineConsultation": "Consultation",
+ "common.avatar": "Avatar",
+ "common.uploadAvatar": "Upload Avatar",
+ "common.nickname": "Nickname",
+ "common.phone": "Phone",
+ "common.bindPhone": "Bind Phone",
+ "common.bindPhoneAfter": "Bind the mobile phone number before performing this operation",
+ "common.bindPhoneUnlock": "Bind the phone number to get the order information",
+ "common.QuickBind": "Quick Bind",
+ "common.cancelBind": "Cancel Bind",
+ "common.facialData": "Facial Data",
+ "common.auth": "Authorization",
+ "common.requireAvatar": "Please upload the profile picture",
+ "common.requireName": "Please enter the nickname",
+ "common.requirePhone": "Please enter the phone number",
+ "common.note": "Notes",
+ "common.tip": "Tip",
+ "common.cancelApply": "Are you sure to cancel the application?",
+ "common.cancelSuccess": "Cancel successfully",
+ "common.cancelFail": "Cancel failed. Please try again later!",
+ "common.addOrder": "Confirm Order",
+ "common.AuthenticationFailedTips": "Your identity verification has not been approved.You may still place an order for same-day warehouse use (within the rental period).However, starting from the next day, you must submit valid identity information and pass verification to continue using the warehouse.",
+ "common.VacantDay": "Vacant Day",
+ "common.RemainingDay": "Remaining Day",
+ "common.OverdueDay": "Overdue Day",
+ "common.ORDER_AMOUNT_ERROR": "Invalid discount amount. Please select again.",
+ "common.tuangouCouponPrice": "tuangou coupon price",
+ "common.checkAgreementUrl": "Please read and agree to the terms first.",
+ "common.Expand": "Expand",
+ "common.Collapse": "Collapse",
+ "common.OtherStores": "Other Stores",
+ "coupon.coupon": "Coupon",
+ "coupon.meituanOrdazhongdianpingCoupon": "Meituan/Dazhongdianping Coupon",
+ "coupon.queryMeituanDazhongdianpingCoupon": "Click to check Meituan/Dianping coupons",
+ "coupon.useTips": "Instruction: Enter the coupon code to enjoy the discount.",
+ "coupon.enterCode": "Coupon code",
+ "coupon.limitedtimeoffer": "Limited-time offer",
+ "coupon.storewide": "Store-wide",
+ "coupon.redeemNow": "Redeem",
+ "coupon.instructions": "Instructions",
+ "coupon.validityPeriod": "Expiry",
+ "coupon.apply": "Apply",
+ "coupon.all": "All Unit Types",
+ "coupon.multiStoreUse": "Multi-store use",
+ "coupon.renewable": "Usable on reorders",
+ "coupon.noRenewable": "Not usable on reorders",
+ "coupon.redemptionuccessful": "Redemption successful",
+ "coupon.unusableCoupons": "Unusable Coupons",
+ "coupon.currentConditionsNotMet": "Current conditions not met",
+ "request.promoCodeError": "Promo code error",
+ "validation.getPhoneFail": "Failed to obtain the phone number, please enter it manually",
+ "validation.inputName1": "Please input the name",
+ "validation.selectCardType": "Please select the card type",
+ "validation.inputIdCard": "Please input the ID number",
+ "validation.uploadIdCard": "Please upload your ID photo",
+ "validation.inputPhone": "Please input the phone number",
+ "validation.inputInternationalPhone": "Please input the international phone number",
+ "validation.uploadImg": "The picture is uploading, please try again later",
+ "validation.inputName2": "Please input the company name",
+ "validation.inputLicense": "Please input the business license number",
+ "validation.uploadLicense": "Please upload your business ID card",
+ "validation.submitSuccess": "Submit successfully",
+ "validation.uploadSuccess": "Update successfully",
+ "validation.identifyCard": "China ID Card",
+ "validation.passport": "Passport",
+ "validation.permit": "Hong Kong and Macao Permit",
+ "validation.access": "One-click Access",
+ "validation.bind": "Binding",
+ "validation.vailSuccess": "Verification successful.",
+ "validation.agree": "Please read and agree to the User Service Agreement and Privacy Policy.",
+ "agreement.readAndAgree": "I have read and agree to the",
+ "agreement.service": "User Service Agreement",
+ "agreement.and": "and",
+ "agreement.privacy": "Privacy Policy",
+ "agreement.toast": "Please read and agree to the User Service Agreement and Privacy Policy.",
+ "verification.vailFail": "Authentication failed. Please verify that the document type and information are correct, and re-upload a clear image (front and back). Try authenticating again!",
+ "verification.vailSuccess": "Authentication successful.",
+ "invoiceApply.electronicInvoice": "Electronic Invoice",
+ "invoiceApply.paperInvoice": "Paper Invoice",
+ "invoiceApply.invoiceTips": "Your invoice application has been submitted successfully, please wait patiently for the staff to contact!",
+ "invoice.valid": "Invoices",
+ "invoice.pay": "Payment Time",
+ "invoice.site": "Store",
+ "invoice.type": "Unit Type",
+ "invoice.unit": "Unit",
+ "invoice.rent": "Lease Term",
+ "invoice.record": "Application Record",
+ "invoice.allSelect": "Select All",
+ "invoice.nextStep": "NEXT",
+ "invoice.tip": "- Invoices can be issued within one month after payment of the order",
+ "invoice.serial": "Number",
+ "invoice.time": "Application Time",
+ "invoice.status": "Audit Status",
+ "invoice.status0": "Pending approval",
+ "invoice.status1": "Approved, invoicing...",
+ "invoice.status2": "Failed approval",
+ "invoice.status3": "Cancelled",
+ "invoice.status4": "Invoiced",
+ "invoice.selectOrder": "Please select an order",
+ "invoice.validMoney": "The order amount must be greater than 0",
+ "evaluate.customerEvaluation": "CUSTOMER EVALUATION",
+ "evaluate.overallRating": "Overall rating",
+ "evaluate.userExperience": "User experience",
+ "evaluate.Hospitality": "Hospitality",
+ "evaluate.cleanliness": "Cleanliness",
+ "evaluate.convenience": "Convenience",
+ "evaluate.tips": "Please leave your invaluable comment or suggestion here.",
+ "evaluate.anonymous": "ANONYMOUS",
+ "goodsList.note": "Please note",
+ "goodsList.info": "Hello, according to the requirements of relevant departments, the items you store need to be declared independently for their category. This declaration form is for record keeping purposes, please fill it out carefully.",
+ "goodsList.multi": "Multiple choices",
+ "goodsList.tip1": "User Confirmation:",
+ "goodsList.tip2": "1. The stored items were obtained through legal channels;",
+ "goodsList.tip3": "2. Do not store prohibited items;",
+ "goodsList.tip4": "3. If property damage or personal injury is caused by changes in the user's stored items or other reasons, the user shall bear the responsibility.",
+ "goodsList.submit": "Confirm",
+ "houseKey.FriendsName": "Friend's name",
+ "houseKey.AuthorizationDate": "Authorization date",
+ "houseKey.ReceiveNotifications": "Receive notifications",
+ "houseKey.EnableNotifications": "Enable notifications",
+ "houseKey.PhoneNumber": "Phone number",
+ "houseKey.email": "Email",
+ "houseKey.EnterAuthorizedPhoneNumber": "Enter authorized person's phone number",
+ "houseKey.AddAuthorization": "Add authorization",
+ "houseKey.EnterFriendsName": "Enter friend's name",
+ "houseKey.EnterAuthorizationDate": "Enter authorization date",
+ "houseKey.EnterPhoneNumber": "Enter phone number",
+ "houseKey.EnterEmail": "Enter email",
+ "houseKey.CannotAuthorizeYourself": "Cannot authorize yourself",
+ "houseKey.UpdateSuccessful": "Update successful",
+ "houseKey.AddedSuccessfully": "Added successfully",
+ "houseKey.date": "Year-Month-Day",
+ "houseKey.overdue": "The authorization period has expired. Please re-select the authorization period and renew it.",
+ "houseKey.otherPhone": "The phone number of the authorized party",
+ "houseKey.otherEmail": "The email address of the authorized party",
+ "houseKey.getNote": "Open to receive notifications",
+ "unitTypeDetail.oneMonth": "Lease term: one month",
+ "unitTypeDetail.reference": "Reference",
+ "unitTypeDetail.discount": "Discount",
+ "reserve.FULLNAME": "Full Name",
+ "reserve.PHONE": "Phone",
+ "reserve.REGION": "Region",
+ "reserve.TYPE": "Type",
+ "reserve.PHONE NUMBER": "Phone Number",
+ "reserve.Individual & Family": "Individual & Family",
+ "reserve.Business & E-commerce": "Business & E-commerce",
+ "reserve.Retail & Store": "Retail & Store",
+ "reserve.contentTips": "Appointment successful! Please wait patiently for our staff to contact you. Keep your phone available. Thank you!",
+ "inviteDetail.title": "Invitation Records",
+ "inviteDetail.Username": "Username",
+ "inviteDetail.Registration Date": "Registration Date",
+ "inviteDetail.Status": "Status",
+ "inviteDetail.No invitation": "No invitation records found. Please share invitations.",
+ "inviteDetail.SORRY": "SORRY, THERE ARE NO RECORDS. PLEASE SHARE AND INVITE.",
+ "inviteDetail.Share Invitation": "Share Invitation",
+ "referrerInfo.company": "Referrer Company",
+ "referrerInfo.branch": "Referrer Branch",
+ "referrerInfo.commission": "Referral Commission Rate",
+ "referrerInfo.inviteRegister": "Invitation to Register",
+ "referrerInfo.inviteRecord": "Invitation Record",
+ "referrerInfo.inviteUserName": "User Name",
+ "referrerInfo.invitePhone": "Phone Number",
+ "referrerInfo.registrationTime": "Registration Time",
+ "referrerInfo.inviteEmpty": "No invitation record",
+ "referrerInfo.loadQrCode": "Download QR Code",
+ "referrerInfo.loadPoster": "Download Poster",
+ "referrerInfo.forwardInvitation": "Forward Invitation",
+ "pointsMall.title": "Points Mall",
+ "pointsMall.myPoints": "My Points",
+ "pointsMall.pointsUnit": "Points",
+ "pointsMall.exchange": "Redeem",
+ "pointsMall.exchangeFormTitle": "Shipping Information",
+ "pointsMall.submit": "Submit",
+ "pointsMall.receiverName": "Recipient Name",
+ "pointsMall.phone": "Phone Number",
+ "pointsMall.address": "Address",
+ "pointsMall.placeholderName": "Enter recipient name",
+ "pointsMall.placeholderPhone": "Enter phone number",
+ "pointsMall.placeholderAddress": "Enter detailed shipping address",
+ "pointsMall.exchangeConfirmTitle": "Exchange Confirmation",
+ "pointsMall.exchangeConfirmTip": "Are you sure you want to use {points} points to redeem?",
+ "pointsMall.stock": "Stock",
+ "pointsMall.successTitle": "Success",
+ "pointsMall.successTip": "Redemption successful. Please wait for our staff to contact you. Thank you!",
+ "pointsMall.toastOutOfStock": "Out of stock",
+ "pointsMall.toastNotEnoughPoints": "Not enough points",
+ "pointsMall.toastExchanging": "Redeeming...",
+ "pointsMall.toastExchangeFailed": "Redemption failed",
+ "pointsMall.exchangeRecordTitle": "Redemption Records",
+ "pointsMall.noExchangeRecord": "No redemption records"
+}
\ No newline at end of file
diff --git a/locale/index.js b/locale/index.js
new file mode 100644
index 0000000..7a96591
--- /dev/null
+++ b/locale/index.js
@@ -0,0 +1,38 @@
+import { createI18n } from 'vue-i18n';
+
+// 导入静态翻译内容
+import en from './en.json';
+import zhHans from './zh-Hans.json';
+import zhHant from './zh-Hant.json';
+import ja from './ja.json';
+// 导入动态翻译函数
+import messagesFunctions from './messagesFunctions.js';
+
+// 合并静态和动态的翻译内容
+const mergedMessages = {
+ en: {
+ ...en,
+ ...messagesFunctions.en,
+ },
+ 'zh-Hans': {
+ ...zhHans,
+ ...messagesFunctions.zhHans,
+ },
+ 'zh-Hant': {
+ ...zhHant,
+ ...messagesFunctions.zhHant,
+ },
+ ja: {
+ ...ja,
+ ...messagesFunctions.ja,
+ },
+};
+
+const language = "zh-Hans";
+const i18n = createI18n({
+ locale: language,
+ messages: mergedMessages
+});
+uni.setStorageSync("eliteSys-language-wx", language);
+
+export default i18n;
\ No newline at end of file
diff --git a/locale/ja.json b/locale/ja.json
new file mode 100644
index 0000000..b2fa1b8
--- /dev/null
+++ b/locale/ja.json
@@ -0,0 +1,23 @@
+{
+ "locale.auto": "システム",
+ "locale.en": "英語",
+ "locale.zh-hans": "简体中文",
+ "locale.zh-hant": "繁体中文",
+ "locale.ja": "日语",
+ "index.title": "Hello i18n",
+ "index.home": "ホーム",
+ "index.component": "コンポーネント",
+ "index.api": "API",
+ "index.schema": "Schema",
+ "index.demo": "uni-app globalization",
+ "index.demo-description": "ユニフレームワーク、manifest.json、pages.json、タブバー、ページ、コンポーネント、APIを含める、Schema",
+ "index.detail": "詳細",
+ "index.language": "言語",
+ "index.language-info": "設定",
+ "index.system-language": "システム言語",
+ "index.application-language": "アプリケーション言語",
+ "index.language-change-confirm": "この設定を適用すると、アプリが再起動します",
+ "api.message": "メッセージ",
+ "schema.add": "追加",
+ "schema.add-success": "成功を追加"
+}
diff --git a/locale/messagesFunctions.js b/locale/messagesFunctions.js
new file mode 100644
index 0000000..d0e7fad
--- /dev/null
+++ b/locale/messagesFunctions.js
@@ -0,0 +1,49 @@
+const numToChinese = (num) => {
+ if(num<1) num = 1
+ const map = ['零','一','二','三','四','五','六','七','八','九']
+ return map[num] || num.toString()
+}
+export default {
+ en: {
+ 'person.inviteData': ({ named }) => `Already invited ${named('friends')} friends, Opportunity to receive additional rewards`,
+ "detail.remain": ({ named }) => `Remaining ${named('days')} days`,
+ "detail.discountOff": ({ named }) => `${named('month')} MONTHS ${named('percent')}% OFF`,
+ "month": ({ named }) => `${named('count')} month(s)`,
+ "months": ({ named }) => `${named('count')} month(s)`,
+ "discountMomey": ({ named }) => `${named('discount')} Discount `,
+ "firstMonthRent": ({ named }) => `First Month Rent ${named('discount')}`,
+ "couponDiscount": ({ named }) => `${named('percent')} off `,
+ "freeMonth": ({ named }) => `Free ${named('discount')} months`,
+ "BonusMonth": ({ named }) => `Bonus ${named('discount')} months`,
+ "requiredMomey": ({ named }) => `${named('momey')} required`,
+ "fullMonths": ({ named }) => `available after ${named('count')} full months`,
+ "invoice.order": ({ named }) => `${named('number')} orders have been selected, totaling ${named('money')} yuan`,
+ "giftMonth": ({ named }) => `Gifted ${named('count')} months`,
+ "storeRenovationNotice": ({ named }) => `This store is under renovation. It will be available on ${named('limitDate')}. Orders can be placed in advance.`,
+ "storeCount": ({ named }) => `${named('count')} stores`,
+ "discount": ({ named }) => `${Math.floor(named('discount') * 100)}% off`,
+ "flashSaleDiscount": ({ named }) => `Extra ${Math.floor(named('discount') * 100)}% off`,
+ 'order.confirmReferrer': ({ named }) => `This order will be associated with the referrer ${named('referrer')}. Please confirm whether this transaction was completed through their referral.`,
+ },
+ zhHans: {
+ 'person.inviteData': ({ named }) => `已邀请 ${named('friends')} 名好友, 有机会获得额外奖励`, //获得 ${named('days')} 天免费租期!
+ "detail.remain": ({ named }) => `租期:剩余${named('days')}天`,
+ "detail.discountOff": ({ named }) => `${named('month')}个月享${named('discount')}折`,
+ "month": ({ named }) => `${named('count')} 月`,
+ "months": ({ named }) => `${named('count')} 月`,
+ "discountMomey": ({ named }) => `优惠 ¥${named('discount')} `,
+ "firstMonthRent": ({ named }) => `首月 ${named('discount')} 元`,
+ "couponDiscount": ({ named }) => ` 打 ${named('discount')} 折 `,
+ "freeMonth": ({ named }) => `免租 ${named('discount')} 个月`,
+ "BonusMonth": ({ named }) => `赠送 ${named('discount')} 个月`,
+ "requiredMomey": ({ named }) => `满¥${named('momey')} 可用`,
+ "fullMonths": ({ named }) => `满 ${named('count')} 个月可用`,
+ "invoice.order": ({ named }) => `已选 ${named('number')} 个订单,共 ${named('money')} 元`,
+ "giftMonth": ({ named }) => `赠送 ${named('count')} 个月`,
+ "storeRenovationNotice": ({ named }) =>`该店铺装修中,将于 ${named('limitDate')} 开放使用,可提前下单`,
+ "storeCount": ({ named }) => `一共 ${named('count')} 店`,
+ "discount": ({ named }) => `${numToChinese(Math.floor(named('discount') * 10))||numToChinese[1]} 折`,
+ "flashSaleDiscount": ({ named }) => `额外${numToChinese(Math.floor(named('discount') * 10))}折`,
+ 'order.confirmReferrer': ({ named }) => `此订单将关联至转介人 ${named('referrer')}。请确认是否通过他的推荐完成本次交易?`,
+ },
+};
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..597f8ec
--- /dev/null
+++ b/locale/zh-Hans.json
@@ -0,0 +1,502 @@
+{
+ "common.confirm": "确认",
+ "common.cancel": "取消",
+ "common.title": "提示",
+ "common.noData": "暂无数据",
+ "common.delete": "删除",
+ "common.update": "更新",
+ "common.password": "密码",
+ "common.close": "关闭",
+ "common.Skiptoday": "暂时跳过",
+ "common.payableTime": "剩余支付时间",
+ "common.AuthorizationOrder": "授权订单",
+ "common.cancelOrder": "取消订单",
+ "common.cancelOrderTips": "确认取消当前订单?",
+ "common.unpaidOrderTips": "存在未支付订单,请先支付,或者取消订单后再下单!",
+ "common.cantUselocker": "此体积仓位不可租用,请重新选择!",
+ "common.checkAgreementUrl": "请先阅读并同意协议",
+ "common.logout": "登出",
+ "common.logoutTip": "确认退出程序?",
+ "common.FirstTimeLoginTips": "「首次登录将自动注册」",
+ "common.SpaceSpecsGuide": "空间规格介绍参考",
+ "common.Seelegend": "查看图例",
+ "common.Rent": "租用",
+ "common.OriginalPrice": "原价格",
+ "common.SalePrice": "活动价",
+ "common.SwitchStores": "切换同地址分店",
+ "common.more": "更多",
+ "common.SwitchRegion": "切换区域",
+ "common.Countdown": "倒计时",
+ "common.FlashSale": "限时抢购",
+ "common.FlashSalePrice": "限时抢购价",
+ "common.ClickToCheck": "点击查看",
+ "common.ClickToZoomIn": "点击放大",
+ "common.tryZooming": "如果门禁识别不成功,可尝试点击放大",
+ "common.OnSiteAssessment": "上门评估",
+ "common.ConsultationQuotation": "咨询报价",
+ "common.Requirement": "需求",
+ "common.day": "天",
+ "common.reset": "重置",
+ "common.notRented": "未租",
+ "common.rented": "已租",
+ "common.locked": "鎖定",
+ "locale.auto": "系统",
+ "locale.en": "English",
+ "locale.zh-hans": "简体中文",
+ "locale.zh-hant": "繁体中文",
+ "locale.ja": "日语",
+ "index.title": "Hello i18n",
+ "index.home": "主页",
+ "index.component": "组件",
+ "index.api": "API",
+ "index.schema": "Schema",
+ "index.demo": "uni-app 国际化演示",
+ "index.demo-description": "包含 uni-framework、manifest.json、pages.json、tabbar、页面、组件、API、Schema",
+ "index.detail": "详情",
+ "index.language": "语言",
+ "index.language-info": "语言信息",
+ "index.system-language": "系统语言",
+ "index.application-language": "应用语言",
+ "index.language-change-confirm": "应用此设置将重启App",
+ "api.message": "提示",
+ "schema.name": "姓名",
+ "schema.add": "新增",
+ "schema.add-success": "新增成功",
+ "tabbar.home": "首页",
+ "tabbar.book": "订仓",
+ "tabbar.unlock": "用仓",
+ "tabbar.personal": "我的",
+ "home.select": "选择分店",
+ "home.reserve": "立即预约",
+ "home.book": "立即订仓",
+ "home.detail": "查看详情",
+ "home.appointment": "立即预约",
+ "home.recommend": "热推门店",
+ "home.morestore": "所有门店",
+ "home.navigate": "导航",
+ "home.wayfinding": "路径指引",
+ "home.travel": "出差寄存",
+ "home.collection": "玩具收藏",
+ "home.clothes": "衣物鞋帽",
+ "home.appliances": "家具家电",
+ "home.goods": "门店货物",
+ "home.relocate": "搬迁装修",
+ "home.wrapper": "包装材料",
+ "home.material": "物资储备",
+ "home.document": "文件档案",
+ "home.device": "办公设备",
+ "home.supplies": "活动物资",
+ "home.ecgoods": "电商货品",
+ "home.shops": "零售·门店",
+ "home.individuals": "个人·家庭",
+ "home.corporates": "企业·电商",
+ "home.advantage1": "连锁经营",
+ "home.advantage1Info1": "实力保证 覆盖广深",
+ "home.advantage1Info2": "南方卫视 多家采访",
+ "home.advantage1Info3": "千万用户 最优选择",
+ "home.advantage2": "使用方便",
+ "home.advantage2Info1": "全天开放 随时存取",
+ "home.advantage2Info2": "手机开仓 手机开锁",
+ "home.advantage2Info3": "一个月起 即租即用",
+ "home.advantage3": "安全保障",
+ "home.advantage3Info1": "实时监控 无死角位",
+ "home.advantage3Info2": "一人一仓 独立储物",
+ "home.advantage3Info3": "免费保险 保驾护航",
+ "home.advantage4": "环境整洁",
+ "home.advantage4Info1": "温度调节 防虫防鼠",
+ "home.advantage4Info2": "配备消防 光洁明亮",
+ "home.advantage4Info3": "定期保洁 专业消毒",
+ "home.interior": "参照",
+ "home.serviceHotline": "客服热线",
+ "home.quote": "立即查价",
+ "book.location": "地区筛选",
+ "book.map": "地图模式",
+ "book.list": "列表模式",
+ "book.city": "城市",
+ "book.area": "区域",
+ "book.get": "查找离你最近的店铺",
+ "book.getSite": "需要打开位置信息设置,来显示最近店铺",
+ "book.getCode": "获取二维码",
+ "unlock.door": "开门",
+ "unlock.lock": "开锁",
+ "unlock.renew": "续仓",
+ "unlock.details": "详情",
+ "unlock.moveout": "退仓",
+ "unlock.cancelPending": "退仓申请中",
+ "unlock.outComplete": "退仓完成",
+ "unlock.cancel": "取消",
+ "unlock.cCancel": "取消",
+ "unlock.cancelout": "取消退仓请求",
+ "unlock.return": "返回",
+ "unlock.moveoutReminder": "退仓提示",
+ "unlock.moveoutTip": "退仓后,您将失去开门权限!请确认已经清空仓内物品,14个工作日内,系统将会自动返还押金。",
+ "unlock.uploadTip": "请上传清空仓库后的照片。",
+ "unlock.moveoutSuccess": "退仓申请中,请等待耐心工作人员审核!",
+ "unlock.confirmOut": "确定退仓",
+ "unlock.evaluate": "评价",
+ "unlock.disapproval": "退仓驳回",
+ "unlock.disapprovalRemarks": "驳回理由",
+ "unlock.overdue": "已逾期",
+ "unlock.unPaid": "未支付",
+ "unlock.order": "我的订单",
+ "unlock.login": "点击登录,查看下单仓库",
+ "unlock.nodata": "暂无数据",
+ "unlock.auth": "授权",
+ "unlock.FixedPassword": "固定密码",
+ "unlock.AccessControlCardBinding": "门禁绑卡",
+ "unlock.LockCardUnbinding": "锁绑卡",
+ "unlock.getAuthOrder": "查看授权订单",
+ "unlock.ResetPassword": "重置密码",
+ "unlock.remoteOpen": "远程开门",
+ "unlock.remoteOpenLoading": "开门中...",
+ "unlock.remoteOpenSuccess": "开门成功",
+ "unlock.remoteOpenFail": "开门失败",
+ "unlock.fillInventory": "用仓前,请先填写物品清单",
+ "unlock.FaceEnrollment": "录入门禁",
+ "unlock.goToPay": "去支付",
+ "unlock.cancelOrder": "取消订单",
+ "unlock.Deposit Refund": "押金退款",
+ "unlock.agreement": "订仓协议",
+ "bingCard.start": "开始配对",
+ "bingCard.fail": "操作失败",
+ "bingCard.Click": "点击[ 开始配对 ]",
+ "bingCard.Pairing": "配对中",
+ "bingCard.panel": "请将ID卡开放在数位面板上",
+ "bingCard.single": "滴一声证明成功",
+ "bingCard.close": "成功后,可手工关闭此弹窗",
+ "detail.store": "门店",
+ "detail.unit": "仓型",
+ "detail.spec": "参考尺寸",
+ "detail.size": "参考体积",
+ "detail.cSize": "参考体积",
+ "detail.cUnit": "已选仓型",
+ "detail.startDate": "启用日期",
+ "detail.lease": "租赁期限",
+ "detail.rentalFee": "租仓费用",
+ "detail.cDeposit": "押金费用(一个月)",
+ "detail.cValueAdded": "额外服务",
+ "detail.nodemand": "无需求",
+ "detail.coupon": "使用优惠",
+ "detail.valuation": "费用详情",
+ "detail.currency": "(单位: 人民币)",
+ "detail.extraTip": "若您的物品估算金额超出¥5000,超出部分请您自行投保。",
+ "detail.feeDetail": "费用详情",
+ "detail.deposit": "押金费用",
+ "detail.valueAdded": "额外费用",
+ "detail.discount": "优惠抵扣",
+ "detail.total": "总共费用",
+ "detail.next": "下一步",
+ "detail.read": "我已经阅读并同意 ",
+ "detail.agreement": "《订仓协议》",
+ "detail.agreeTip": "请阅读并同意《订仓协议》",
+ "detail.orderNum": "订单序号",
+ "detail.type": "仓库",
+ "detail.period": "租赁时期",
+ "detail.click": "详情:点击查看订单",
+ "detail.sitemap": "平面图",
+ "detail.selected": "已选仓位",
+ "detail.nodata": "未选填需求",
+ "detail.noselect": "未选优惠",
+ "detail.RENEWAL": "续仓记录",
+ "detail.RefundableDeposit": "可退押金",
+ "detail.to": "续费至",
+ "detail.quotation": "报价单",
+ "detail.generateQuotation": "生成报价单",
+ "detail.regenerateQuotation": "重新生成报价单",
+ "detail.viewQuotation": "查看报价单",
+ "detail.quotationFail": "生成报价单失败",
+ "detail.quotationSuccess": "请手动保存或转发报价单",
+ "detail.scrollRead": "請在同意前閱讀所有條款",
+ "detail.agreeTerm": "同意條款",
+ "detail.points": "积分",
+ "detail.PointsRedemption": "积分抵扣",
+ "detail.AvailablePoints": "可用积分",
+ "detail.DeductionAmount": "抵扣金额",
+ "door.refresh": "刷新二维码",
+ "door.refreshPwd": "刷新密码",
+ "door.tip": "使用门禁设备扫描二维码",
+ "door.valid": "有效时限为1分钟",
+ "door.pwd": "输入密码即可开锁",
+ "door.Unlock": "开锁",
+ "door.UnlockSuccessful": "开锁成功",
+ "person.order": "订单详情",
+ "person.promotion": "优惠卡包",
+ "person.identify": "信息认证",
+ "person.invoice": "发票申请",
+ "person.guide": "用户指南",
+ "person.customer": "客服咨询",
+ "person.invitation": "邀请详情",
+ "person.evaluation": "用户评价",
+ "person.latestEvents": "最新活动",
+ "person.lock": "锁具管理",
+ "person.share": "分享即送免费租期",
+ "person.join": "立即参加",
+ "person.VideoTutorial": "视频教程",
+ "person.referrerInfo": "推荐人信息",
+ "site.branch": "分店",
+ "site.address": "地址",
+ "site.tip": "*非违规违禁物品均可存放",
+ "site.tip2": "*仅按仓内尺寸收费",
+ "site.ReferenceVolume": "参考体积",
+ "site.WarehouseInternalDimensions": "仓内尺寸",
+ "site.full": "抱歉,此仓型已租满,请选择其他仓型。",
+ "site.appointment": "候补预约",
+ "site.appointmentSuccess": "预约成功。随后工作人员会联系你,请保持手机顺畅!",
+ "site.hadAppointment": "已预约",
+ "site.cancelAppointment": "是否取消预约",
+ "site.noAccessId": "暂无门禁设备accesscontrol ID",
+ "site.noPermission": "暂无该门店的权限",
+ "login.account": "账号",
+ "login.password": "密码",
+ "login.confirm": "确认密码",
+ "login.code": "验证码",
+ "login.input": "请输入",
+ "login.login": "登录",
+ "login.wxLogin": "手机号快捷登录",
+ "login.register": "注册账号",
+ "login.forget": "忘记密码?",
+ "login.send": "发送",
+ "login.change": "更改",
+ "login.toLogin": "登录账号",
+ "login.registered": "注册",
+ "login.different": "密码不一致",
+ "login.phone": "手机号",
+ "login.inputPhone": "请输入手机号",
+ "login.phoneFormat": "手机号格式错误",
+ "login.inputCode": "请输入验证码",
+ "login.getCode": "获取验证码",
+ "login.sending": "发送中...",
+ "login.sendSuccess": "验证码已发送",
+ "login.UserAgreement": "《用户协议》",
+ "login.andAgreeTo": "同意并接受",
+ "request.tip": "提示",
+ "request.cancel": "取消",
+ "request.confirm": "确认",
+ "request.loginContent": "未登录,是否前往登录页面",
+ "request.captchaError": "验证码错误或已过期",
+ "request.userCancel": "用户取消请求",
+ "request.timeout": "网络请求超时",
+ "request.noConnect": "连接服务器失败",
+ "request.error": "错误",
+ "toast.copy": "复制成功",
+ "invite.title1": "邀好友",
+ "invite.title2": "赢优惠券",
+ "invite.number": "邀请人数",
+ "invite.activity": "活动内容",
+ "invite.branch": "适用门店",
+ "invite.details": "详情咨询",
+ "invite.toInvite": "去邀请",
+ "invite.record": "查看邀请记录",
+ "invite.disclaimer": "* 活动解释权归迷你仓所有",
+ "invite.disContent": "",
+ "common.edit": "编辑",
+ "common.paySuccess": "支付成功",
+ "common.payFail": "支付失败,请重新尝试!",
+ "common.$": "¥",
+ "common.notStarted": "未开始",
+ "common.status": "状态",
+ "common.verifyInfo": "信息认证",
+ "common.infoUpdate": "信息修改",
+ "common.saveInfo": "保存信息",
+ "common.personalAuth": "个人认证",
+ "common.businessAuth": "企业认证",
+ "common.IdCardFont": "上传证件照正面",
+ "common.IdCardBack": "上传证件照反面",
+ "common.UploadBusinessLicense": "上传营业执照",
+ "common.noOpen": "暂未开放,详细请联系工作人员!",
+ "common.isGoAuth": "所有用户必须进行身份验证。方可用仓。",
+ "common.Authentication": "身份验证",
+ "common.submit": "提交",
+ "common.placeInputAll": "请填写完信息后提交",
+ "common.goodsList": "物品清单",
+ "common.OnlineConsultation": "在线咨询",
+ "common.avatar": "头像",
+ "common.uploadAvatar": "上传头像",
+ "common.nickname": "昵称",
+ "common.phone": "手机号",
+ "common.facialData": "数据",
+ "common.bindPhone": "绑定手机号",
+ "common.bindPhoneAfter": "请先绑定手机号再进行此操作",
+ "common.bindPhoneUnlock": "请绑定手机号才能获取订单信息",
+ "common.QuickBind": "快速绑定",
+ "common.cancelBind": "暂不授权",
+ "common.auth": "授权",
+ "common.requireAvatar": "请上传头像",
+ "common.requireName": "请输入昵称",
+ "common.requirePhone": "请输入手机号",
+ "common.note": "备注",
+ "common.tip": "提示",
+ "common.cancelApply": "确定取消申请吗?",
+ "common.cancelSuccess": "取消成功",
+ "common.cancelFail": "取消失败,请稍后重试!",
+ "common.addOrder": "直接下单",
+ "common.AuthenticationFailedTips": "您当前身份信息认证未通过,下单当天可用仓(租赁期内),第二天起需要提交正确的身份信息且验证通过,方可继续用仓。",
+ "common.VacantDay": "空闲",
+ "common.RemainingDay": "剩余",
+ "common.OverdueDay": "逾期",
+ "common.ORDER_AMOUNT_ERROR": "订单金额必须大于0.01元,请重新选择!",
+ "common.userName": "姓名",
+ "common.tuangouCouponPrice": "团购优惠劵金额",
+ "common.Expand": "展开",
+ "common.Collapse": "收起",
+ "common.OtherStores": "其他门店",
+ "coupon.coupon": "优惠券",
+ "coupon.meituanOrdazhongdianpingCoupon": "美团/大众点评优惠劵",
+ "coupon.queryMeituanDazhongdianpingCoupon": "点击查询美团/大众点评优惠劵",
+ "coupon.useTips": "使用说明:填入优惠码兑换即可享受优惠。",
+ "coupon.enterCode": "填入优惠码",
+ "coupon.limitedtimeoffer": "限时优惠",
+ "coupon.storewide": "全店通用",
+ "coupon.redeemNow": "立即兑换",
+ "coupon.instructions": "使用说明",
+ "coupon.validityPeriod": "有效期",
+ "coupon.apply": "立即使用",
+ "coupon.all": "全部仓型",
+ "coupon.unusableCoupons": "当前门店不可用优惠券",
+ "coupon.multiStoreUse": "多店可用",
+ "coupon.renewable": "续单可用",
+ "coupon.noRenewable": "续单不可用",
+ "coupon.redemptionuccessful": "兑换成功",
+ "coupon.currentConditionsNotMet": "当前条件不满足",
+ "request.promoCodeError": "优惠码不正确",
+ "validation.getPhoneFail": "获取手机号失败,请手动输入",
+ "validation.inputName1": "请填写用户姓名",
+ "validation.selectCardType": "请选择证件类型",
+ "validation.inputIdCard": "请填写证件号码",
+ "validation.uploadIdCard": "请上传证件照",
+ "validation.inputPhone": "请填写手机号码",
+ "validation.inputInternationalPhone": "请填写境外号码",
+ "validation.inputInternationalPhoneHk": "请填写香港号码",
+ "validation.uploadImg": "图片正在上传中,请稍后重试",
+ "validation.inputName2": "请填写企业名称",
+ "validation.inputLicense": "请填写营业执照号码",
+ "validation.uploadLicense": "请上传企业证照",
+ "validation.submitSuccess": "提交成功",
+ "validation.uploadSuccess": "修改成功",
+ "validation.identifyCard": "内地身份证",
+ "validation.passport": "护照",
+ "validation.permit": "港澳通行证",
+ "validation.access": "一键获取",
+ "validation.bind": "一键绑定",
+ "validation.vailSuccess": "认证成功",
+ "agreement.readAndAgree": "我已阅读并同意",
+ "agreement.service": "《用户服务协议》",
+ "agreement.and": "及",
+ "agreement.privacy": "《隐私政策》",
+ "agreement.toast": "请先阅读并同意《用户服务协议》和《隐私政策》",
+ "verification.vailFail": "认证不通过,请检查证件类型与证件信息是否正确,请重新上传清晰图片(注意正反面)。",
+ "verification.vailSuccess": "认证成功",
+ "invoiceApply.electronicInvoice": "发票申请",
+ "invoiceApply.paperInvoice": "纸质发票",
+ "invoiceApply.invoiceTips": "您的发票申请已经提交成功,请耐心等候工作人员联系!",
+ "invoice.valid": "可开发票",
+ "invoice.pay": "支付时间",
+ "invoice.site": "门店",
+ "invoice.type": "仓型",
+ "invoice.unit": "仓位",
+ "invoice.rent": "租期",
+ "invoice.record": "申请记录",
+ "invoice.allSelect": "全选",
+ "invoice.nextStep": "下一步",
+ "invoice.tip": "- 订单付款后 一个月内可开发票",
+ "invoice.serial": "编号",
+ "invoice.time": "申请时间",
+ "invoice.status": "审核状态",
+ "invoice.status0": "待审核",
+ "invoice.status1": "审核通过,开票中",
+ "invoice.status2": "审核不通过",
+ "invoice.status3": "已取消",
+ "invoice.status4": "已开票",
+ "invoice.selectOrder": "请选择订单",
+ "invoice.validMoney": "订单金额必须大于0元",
+ "evaluate.customerEvaluation": "顾客评价",
+ "evaluate.overallRating": "综合评分",
+ "evaluate.userExperience": "用户体验",
+ "evaluate.Hospitality": "服务态度",
+ "evaluate.cleanliness": "整洁度",
+ "evaluate.convenience": "便利度",
+ "evaluate.tips": "请在这里留下你宝贵的意见或建议。",
+ "evaluate.anonymous": "匿名",
+ "goodsList.note": "请备注",
+ "goodsList.info": "您好,根据有关部门要求,您存放的物品需要进行物品品类自主申报。本申报单作留底备查之用,请认真填写。",
+ "goodsList.multi": "可多选",
+ "goodsList.tip1": "用户确认:",
+ "goodsList.tip2": "1、存放的物品均为合法渠道获取;",
+ "goodsList.tip3": "2、不存放违禁品;",
+ "goodsList.tip4": "3、由于用户存放物品异变等原因造成的财产毁损或人身伤亡的,由该用户承担责任。",
+ "goodsList.submit": "确认并提交",
+ "houseKey.FriendsName": "亲友姓名",
+ "houseKey.AuthorizationDate": "授权期限",
+ "houseKey.ReceiveNotifications": "接收通知",
+ "houseKey.EnableNotifications": "打开接受通知",
+ "houseKey.PhoneNumber": "电话号码",
+ "houseKey.email": "邮箱",
+ "houseKey.EnterAuthorizedPhoneNumber": "填写授权方的手机号",
+ "houseKey.AddAuthorization": "新增授权",
+ "houseKey.EnterFriendsName": "填写亲友姓名",
+ "houseKey.EnterAuthorizationDate": "填写授权期限",
+ "houseKey.EnterPhoneNumber": "填写电话号码",
+ "houseKey.EnterEmail": "填写邮箱",
+ "houseKey.CannotAuthorizeYourself": "不能授权给自己",
+ "houseKey.UpdateSuccessful": "更新成功",
+ "houseKey.AddedSuccessfully": "新增成功",
+ "houseKey.date": "年-月-日",
+ "houseKey.overdue": "授权期限已过期,请重新选择授权期限并更新",
+ "houseKey.otherPhone": "填写授权方的手机号",
+ "houseKey.otherEmail": "填写授权方的邮箱",
+ "houseKey.getNote": "打开接受通知",
+ "unitTypeDetail.oneMonth": "租期:一个月起租",
+ "unitTypeDetail.reference": "参考",
+ "unitTypeDetail.discount": "优惠",
+ "reserve.FULLNAME": "用户姓名",
+ "reserve.PHONE": "手機號碼",
+ "reserve.REGION": "城市地区",
+ "reserve.TYPE": "所属类型",
+ "reserve.PHONE NUMBER": "手机号码",
+ "reserve.Individual & Family": "个人&家庭",
+ "reserve.Business & E-commerce": "企业&电商",
+ "reserve.Retail & Store": "零售&门店",
+ "reserve.contentTips": "预约成功,请耐心等待工作人员联系,保持手机畅通,感谢!",
+ "inviteDetail.title": "邀请记录",
+ "inviteDetail.Username": "用户名称",
+ "inviteDetail.Registration Date": "注册日期",
+ "inviteDetail.Status": "状态",
+ "inviteDetail.No invitation": "抱歉,暂无邀请记录,请分享邀请。",
+ "inviteDetail.SORRY": "抱歉,没有记录。请分享并邀请。",
+ "inviteDetail.Share Invitation": "分享邀请",
+ "referrerInfo.company": "中介公司",
+ "referrerInfo.branch": "中介分行",
+ "referrerInfo.commission": "中介费百分比",
+ "referrerInfo.inviteRegister": "邀请注册",
+ "referrerInfo.inviteRecord": "邀请记录",
+ "referrerInfo.inviteUserName": "用户",
+ "referrerInfo.invitePhone": "手机号",
+ "referrerInfo.registrationTime": "注册时间",
+ "referrerInfo.inviteEmpty": "暂无邀请记录",
+ "referrerInfo.loadQrCode": "下载二维码",
+ "referrerInfo.loadPoster": "下载海报",
+ "referrerInfo.forwardInvitation": "转发邀请",
+ "pointsMall.title": "积分商城",
+ "pointsMall.myPoints": "我的积分",
+ "pointsMall.pointsUnit": "积分",
+ "pointsMall.exchange": "兑换",
+ "pointsMall.exchangeFormTitle": "填写收货信息",
+ "pointsMall.submit": "提交",
+ "pointsMall.receiverName": "姓名",
+ "pointsMall.phone": "手机号",
+ "pointsMall.address": "地址",
+ "pointsMall.placeholderName": "请输入收货人姓名",
+ "pointsMall.placeholderPhone": "请输入手机号码",
+ "pointsMall.placeholderAddress": "请输入详细收货地址",
+ "pointsMall.exchangeConfirmTitle": "兑换确认",
+ "pointsMall.exchangeConfirmTip": "是否确认使用 {points} 积分兑换?",
+ "pointsMall.stock": "库存",
+ "pointsMall.successTitle": "领取成功",
+ "pointsMall.successTip": "兑换成功,请耐心等候工作人员联系!感谢!",
+ "pointsMall.toastOutOfStock": "库存不足",
+ "pointsMall.toastNotEnoughPoints": "积分不足",
+ "pointsMall.toastExchanging": "兑换中...",
+ "pointsMall.toastExchangeFailed": "兑换失败",
+ "pointsMall.exchangeRecordTitle": "兑换记录",
+ "pointsMall.noExchangeRecord": "暂无兑换记录"
+}
\ No newline at end of file
diff --git a/locale/zh-Hant.json b/locale/zh-Hant.json
new file mode 100644
index 0000000..f287717
--- /dev/null
+++ b/locale/zh-Hant.json
@@ -0,0 +1,24 @@
+{
+ "locale.auto": "系統",
+ "locale.en": "English",
+ "locale.zh-hans": "简体中文",
+ "locale.zh-hant": "繁體中文",
+ "locale.ja": "日语",
+ "index.title": "Hello i18n",
+ "index.home": "主頁",
+ "index.component": "組件",
+ "index.api": "API",
+ "index.schema": "Schema",
+ "index.demo": "uni-app 國際化演示",
+ "index.demo-description": "包含 uni-framework、manifest.json、pages.json、tabbar、頁面、組件、API、Schema",
+ "index.detail": "詳情",
+ "index.language": "語言",
+ "index.language-info": "語言信息",
+ "index.system-language": "系統語言",
+ "index.application-language": "應用語言",
+ "index.language-change-confirm": "應用此設置將重啟App",
+ "api.message": "提示",
+ "schema.name": "姓名",
+ "schema.add": "新增",
+ "schema.add-success": "新增成功"
+}
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..42c1938
--- /dev/null
+++ b/main.js
@@ -0,0 +1,20 @@
+import { createSSRApp } from "vue";
+import App from "./App";
+import i18n from "./locale/index";
+import * as Pinia from "pinia";
+// import VConsole from 'vconsole'
+// new VConsole()
+// import '@/uni.scss'
+// 引入uvUI
+import uvUI from "@/uni_modules/uv-ui-tools";
+
+export function createApp() {
+ const app = createSSRApp(App);
+ app.use(uvUI);
+ app.use(Pinia.createPinia());
+ app.use(i18n);
+ return {
+ app,
+ Pinia,
+ };
+}
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..19844c7
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,113 @@
+{
+ "name" : "金刚迷你仓",
+ "appid" : "__UNI__FB6F2F3",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ "app-plus" : {
+ "optimization" : {
+ "subPackages" : true
+ },
+ "runmode" : "liberate", // 开启分包优化后,必须配置资源释放模式
+
+ /* 5+App特有相关 */
+ "usingComponents" : true,
+ "nvueCompiler" : "EliteSys",
+ "nvueStyleCompiler" : "EliteSys",
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ "modules" : {},
+ /* 模块配置 */
+ "distribute" : {
+ /* 应用发布信息 */
+ "android" : {
+ /* android打包配置 */
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ "ios" : {},
+ /* ios打包配置 */
+ "sdkConfigs" : {}
+ }
+ },
+ /* SDK配置 */
+ "quickapp" : {},
+ /* 快应用特有相关 */
+ "mp-weixin" : {
+ "appid" : "wx3c4ab696101d77d1",
+ "setting" : {
+ "urlCheck" : false
+ },
+ "usingComponents" : true,
+ "permission" : {
+ "scope.userLocation" : {
+ "desc" : "将获取你的具体位置信息,用于辅助显示最近店铺"
+ }
+ },
+ "plugins" : {
+ "player" : {
+ "version" : "2.0.0",
+ "provider" : "wxa75efa648b60994b"
+ }
+ },
+ "requiredPrivateInfos" : [ "getLocation" ]
+ },
+ "vueVersion" : "3",
+ "h5" : {
+ "router" : {
+ "base" : "./"
+ },
+ "devServer" : {
+ "port" : 8999,
+ "proxy" : {
+ "/api" : {
+ "target" : "http://localhost:5182",
+ "ws" : true,
+ "changeOrigin" : true
+ }
+ }
+ },
+ "optimization" : {
+ "treeShaking" : {
+ "enable" : true
+ }
+ },
+ "sdkConfigs" : {
+ "maps" : {
+ "qqmap" : {
+ "key" : "B5ZBZ-S4SKW-YYQR5-3BVNP-NX4NQ-FYFYF"
+ }
+ }
+ }
+ },
+ "locale" : "en",
+ "fallbackLocale" : "en",
+ "mp-xhs" : {
+ "appid" : "6786436ac669e40001348567",
+ "permission" : {
+ "scope.userLocation" : {
+ "desc" : "将获取你的具体位置信息,用于辅助显示最近店铺"
+ }
+ }
+ }
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..608b7b0
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1443 @@
+{
+ "name": "elitesysclient",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "金刚迷你仓",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "crypto-js": "^4.2.0",
+ "dayjs": "^1.11.11",
+ "vconsole": "^3.15.1",
+ "vue3-google-map": "^0.20.0"
+ },
+ "devDependencies": {
+ "sass-loader": "^10.5.2"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.7.tgz",
+ "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
+ "peer": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.6.tgz",
+ "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@googlemaps/js-api-loader": {
+ "version": "1.16.6",
+ "resolved": "https://registry.npmmirror.com/@googlemaps/js-api-loader/-/js-api-loader-1.16.6.tgz",
+ "integrity": "sha512-V8p5W9DbPQx74jWUmyYJOerhiB4C+MHekaO0ZRmc6lrOYrvY7+syLhzOWpp55kqSPeNb+qbC2h8i69aLIX6krQ==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ }
+ },
+ "node_modules/@googlemaps/markerclusterer": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmmirror.com/@googlemaps/markerclusterer/-/markerclusterer-2.5.3.tgz",
+ "integrity": "sha512-x7lX0R5yYOoiNectr10wLgCBasNcXFHiADIBdmn7jQllF2B5ENQw5XtZK+hIw4xnV0Df0xhN4LN98XqA5jaiOw==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "supercluster": "^8.0.1"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "peer": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "8.56.10",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
+ "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.14.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
+ "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.30.tgz",
+ "integrity": "sha512-ZL8y4Xxdh8O6PSwfdZ1IpQ24PjTAieOz3jXb/MDTfDtANcKBMxg1KLm6OX2jofsaQGYfIVzd3BAG22i56/cF1w==",
+ "peer": true,
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@vue/shared": "3.4.30",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.30.tgz",
+ "integrity": "sha512-+16Sd8lYr5j/owCbr9dowcNfrHd+pz+w2/b5Lt26Oz/kB90C9yNbxQ3bYOvt7rI2bxk0nqda39hVcwDFw85c2Q==",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-core": "3.4.30",
+ "@vue/shared": "3.4.30"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.30.tgz",
+ "integrity": "sha512-8vElKklHn/UY8+FgUFlQrYAPbtiSB2zcgeRKW7HkpSRn/JjMRmZvuOtwDx036D1aqKNSTtXkWRfqx53Qb+HmMg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@vue/compiler-core": "3.4.30",
+ "@vue/compiler-dom": "3.4.30",
+ "@vue/compiler-ssr": "3.4.30",
+ "@vue/shared": "3.4.30",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.10",
+ "postcss": "^8.4.38",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.30.tgz",
+ "integrity": "sha512-ZJ56YZGXJDd6jky4mmM0rNaNP6kIbQu9LTKZDhcpddGe/3QIalB1WHHmZ6iZfFNyj5mSypTa4+qDJa5VIuxMSg==",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.30",
+ "@vue/shared": "3.4.30"
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.30.tgz",
+ "integrity": "sha512-bVJurnCe3LS0JII8PPoAA63Zd2MBzcKrEzwdQl92eHCcxtIbxD2fhNwJpa+KkM3Y/A4T5FUnmdhgKwOf6BfbcA==",
+ "peer": true,
+ "dependencies": {
+ "@vue/shared": "3.4.30"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.30.tgz",
+ "integrity": "sha512-qaFEbnNpGz+tlnkaualomogzN8vBLkgzK55uuWjYXbYn039eOBZrWxyXWq/7qh9Bz2FPifZqGjVDl/FXiq9L2g==",
+ "peer": true,
+ "dependencies": {
+ "@vue/reactivity": "3.4.30",
+ "@vue/shared": "3.4.30"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.30.tgz",
+ "integrity": "sha512-tV6B4YiZRj5QsaJgw2THCy5C1H+2UeywO9tqgWEc21tn85qHEERndHN/CxlyXvSBFrpmlexCIdnqPuR9RM9thw==",
+ "peer": true,
+ "dependencies": {
+ "@vue/reactivity": "3.4.30",
+ "@vue/runtime-core": "3.4.30",
+ "@vue/shared": "3.4.30",
+ "csstype": "^3.1.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.30.tgz",
+ "integrity": "sha512-TBD3eqR1DeDc0cMrXS/vEs/PWzq1uXxnvjoqQuDGFIEHFIwuDTX/KWAQKIBjyMWLFHEeTDGYVsYci85z2UbTDg==",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-ssr": "3.4.30",
+ "@vue/shared": "3.4.30"
+ },
+ "peerDependencies": {
+ "vue": "3.4.30"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.30.tgz",
+ "integrity": "sha512-CLg+f8RQCHQnKvuHY9adMsMaQOcqclh6Z5V9TaoMgy0ut0tz848joZ7/CYFFyF/yZ5i2yaw7Fn498C+CNZVHIg==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
+ "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
+ "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
+ "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.12.1"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
+ "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/helper-wasm-section": "1.12.1",
+ "@webassemblyjs/wasm-gen": "1.12.1",
+ "@webassemblyjs/wasm-opt": "1.12.1",
+ "@webassemblyjs/wasm-parser": "1.12.1",
+ "@webassemblyjs/wast-printer": "1.12.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
+ "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
+ "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
+ "@webassemblyjs/wasm-gen": "1.12.1",
+ "@webassemblyjs/wasm-parser": "1.12.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
+ "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
+ "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true
+ },
+ "node_modules/acorn": {
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "peerDependencies": {
+ "acorn": "^8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.23.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz",
+ "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001629",
+ "electron-to-chromium": "^1.4.796",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.16"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001640",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz",
+ "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0",
+ "peer": true
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/copy-text-to-clipboard": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz",
+ "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "3.48.0",
+ "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.48.0.tgz",
+ "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==",
+ "hasInstallScript": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/crypto-js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
+ "license": "MIT"
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "peer": true
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.11",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz",
+ "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.819",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.819.tgz",
+ "integrity": "sha512-8RwI6gKUokbHWcN3iRij/qpvf/wCbIVY5slODi85werwqUQwpFXM+dvUBND93Qh7SB0pW3Hlq3/wZsqQ3M9Jaw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz",
+ "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/escalade": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "peer": true
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/kdbush": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/kdbush/-/kdbush-4.0.2.tgz",
+ "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA=="
+ },
+ "node_modules/klona": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
+ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mutation-observer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
+ "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "peer": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "peer": true
+ },
+ "node_modules/postcss": {
+ "version": "8.4.38",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "peer": true,
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/sass-loader": {
+ "version": "10.5.2",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.5.2.tgz",
+ "integrity": "sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "klona": "^2.0.4",
+ "loader-utils": "^2.0.0",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "fibers": ">= 3.1.0",
+ "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
+ "sass": "^1.3.0",
+ "webpack": "^4.36.0 || ^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "fibers": {
+ "optional": true
+ },
+ "node-sass": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/supercluster": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmmirror.com/supercluster/-/supercluster-8.0.1.tgz",
+ "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==",
+ "dependencies": {
+ "kdbush": "^4.0.2"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.31.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz",
+ "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.10",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
+ "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.20",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.1",
+ "terser": "^5.26.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+ "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/vconsole": {
+ "version": "3.15.1",
+ "resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz",
+ "integrity": "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==",
+ "dependencies": {
+ "@babel/runtime": "^7.17.2",
+ "copy-text-to-clipboard": "^3.0.1",
+ "core-js": "^3.11.0",
+ "mutation-observer": "^1.0.3"
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.30.tgz",
+ "integrity": "sha512-NcxtKCwkdf1zPsr7Y8+QlDBCGqxvjLXF2EX+yi76rV5rrz90Y6gK1cq0olIhdWGgrlhs9ElHuhi9t3+W5sG5Xw==",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.30",
+ "@vue/compiler-sfc": "3.4.30",
+ "@vue/runtime-dom": "3.4.30",
+ "@vue/server-renderer": "3.4.30",
+ "@vue/shared": "3.4.30"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue3-google-map": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmmirror.com/vue3-google-map/-/vue3-google-map-0.20.0.tgz",
+ "integrity": "sha512-GUih2O3lhKKBjl9jODZgva5OtwX2DXQJEL+6EO7sEk9mD8AJbSjxbT8KjfKUP90fYIwUmZpwvcEU0cqiCLCeaA==",
+ "dependencies": {
+ "@googlemaps/js-api-loader": "^1.16.2",
+ "@googlemaps/markerclusterer": "^2.4.0",
+ "fast-deep-equal": "^3.1.3"
+ },
+ "engines": {
+ "node": ">=16.11.0"
+ },
+ "peerDependencies": {
+ "vue": "^3"
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
+ "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "5.92.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz",
+ "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^1.0.5",
+ "@webassemblyjs/ast": "^1.12.1",
+ "@webassemblyjs/wasm-edit": "^1.12.1",
+ "@webassemblyjs/wasm-parser": "^1.12.1",
+ "acorn": "^8.7.1",
+ "acorn-import-attributes": "^1.9.5",
+ "browserslist": "^4.21.10",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.17.0",
+ "es-module-lexer": "^1.2.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.11",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.2.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.3.10",
+ "watchpack": "^2.4.1",
+ "webpack-sources": "^3.2.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..8557776
--- /dev/null
+++ b/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "金刚迷你仓",
+ "version": "1.0.0",
+ "description": "金刚迷你仓",
+ "main": "main.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "keywords": [],
+ "author": "YOGO",
+ "license": "ISC",
+ "dependencies": {
+ "crypto-js": "^4.2.0",
+ "dayjs": "^1.11.11",
+ "vconsole": "^3.15.1",
+ "vue3-google-map": "^0.20.0"
+ },
+ "devDependencies": {
+ "sass-loader": "^10.5.2"
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..c82a454
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,281 @@
+{
+ "subPackages": [
+ {
+ "name": "pagesb",
+ "root": "pagesb",
+ "pages": [
+ {
+ "path": "changeUser/index"
+ },
+ {
+ "path": "referrerInfo/index"
+ },
+ {
+ "path": "pointsMall/index"
+ },
+ {
+ "path": "invitation/index"
+ },
+ {
+ "path": "houseKey/index"
+ },
+ {
+ "path": "flashSale/index"
+ },
+ {
+ "path": "latestEvents/index"
+ },
+ {
+ "path": "activityDetail/index",
+ "style": {
+ "navigationBarTitleText": " "
+ }
+ },
+ {
+ "path": "invoice/index"
+ },
+ {
+ "path": "invoiceApplyforRecord/index"
+ },
+ {
+ "path": "invoiceApply/index"
+ },
+ {
+ "path": "videoTutorial/index"
+ },
+ {
+ "path": "reserve/index"
+ },
+ {
+ "path": "validationInfo/index",
+ "style": {
+ "navigationBarTitleText": "实名验证"
+ }
+ },
+ {
+ "path": "userguide/index"
+ },
+ {
+ "path": "unittypeDetail/index"
+ },
+ {
+ "path": "initLock/index"
+ },
+ {
+ "path": "maskUser/index"
+ },
+ {
+ "path": "AControl/index"
+ }
+ ],
+ "plugins": {
+ "ttPlugin": {
+ "version": "3.0.6",
+ "provider": "wx43d5971c94455481"
+ }
+ }
+ }
+ ],
+ "pages": [
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "首页",
+ "mp-weixin": {
+ "usingComponents": {
+ "player-component": "plugin://player/video"
+ }
+ }
+ }
+ },
+ {
+ "path": "pages/goodsList/index",
+ "style": {
+ "navigationBarTitleText": " "
+ }
+ },
+ {
+ "path": "pages/renewOrder/index",
+ "style": {
+ "navigationBarTitleText": " "
+ }
+ },
+ {
+ "path": "pages/webview/web",
+ "style": {
+ "navigationBarTitleText": " ",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path": "pages/book/book",
+ "style": {
+ "navigationBarTitleText": "Book"
+ }
+ },
+ {
+ "path": "pages/facecode/facecode",
+ "style": {
+ "navigationBarTitleText": "facecode"
+ }
+ },
+ {
+ "path": "pages/book/index",
+ "style": {
+ "navigationBarTitleText": "Book"
+ }
+ },
+ {
+ "path": "pages/unlock/index",
+ "style": {
+ "navigationBarTitleText": "订单"
+ }
+ },
+ {
+ "path": "pages/personal/index",
+ "style": {
+ "navigationBarTitleText": "我的"
+ }
+ },
+ {
+ "path": "pages/book/mapmode",
+ "style": {
+ "navigationBarTitleText": "Map"
+ }
+ },
+ {
+ "path": "pages/site/index",
+ "style": {
+ "navigationBarTitleText": "门店"
+ }
+ },
+ {
+ "path": "pages/setOrder/index",
+ "style": {
+ "navigationBarTitleText": "Order"
+ }
+ },
+ {
+ "path": "pages/login/index",
+ "style": {
+ "navigationBarTitleText": "Login"
+ }
+ },
+ {
+ "path": "pages/register/index",
+ "style": {
+ "navigationBarTitleText": "Register"
+ }
+ },
+ {
+ "path": "pages/forgotPawd/index",
+ "style": {
+ "navigationBarTitleText": "ForgotPAWd"
+ }
+ },
+ {
+ "path": "pages/book/navigate",
+ "style": {
+ "navigationBarTitleText": " ",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path": "pages/orderdetail/index",
+ "style": {
+ "navigationBarTitleText": "Orderdetail"
+ }
+ },
+ {
+ "path": "pages/orderdetail/lock",
+ "style": {
+ "navigationBarTitleText": "Lock"
+ }
+ },
+ {
+ "path": "pages/orderdetail/door",
+ "style": {
+ "navigationBarTitleText": "Door"
+ }
+ },
+ {
+ "path": "pages/personal/customerAi",
+ "style": {
+ "navigationBarTitleText": " ",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path": "pages/evaluate/index",
+ "style": {
+ "navigationBarTitleText": "Evaluate"
+ }
+ },
+ {
+ "path": "pages/call/index",
+ "style": {
+ "navigationBarTitleText": "Call"
+ }
+ },
+ {
+ "path": "pages/invite/index",
+ "style": {
+ "navigationBarTitleText": "Home"
+ }
+ }
+ ],
+ "tabBar": {
+ "list": [
+ {
+ "pagePath": "pages/index/index",
+ "text": " ",
+ "iconPath": "static/tabbar/index.png",
+ "selectedIconPath": "static/tabbar/index.png"
+ },
+ {
+ "pagePath": "pages/book/index",
+ "text": " ",
+ "iconPath": "static/tabbar/book.png",
+ "selectedIconPath": "static/tabbar/book.png"
+ },
+ {
+ "pagePath": "pages/call/index",
+ "iconPath": "static/tabbar/call.png",
+ "selectedIconPath": "static/tabbar/call.png"
+ },
+ {
+ "pagePath": "pages/unlock/index",
+ "text": " ",
+ "iconPath": "static/tabbar/unlock.png",
+ "selectedIconPath": "static/tabbar/unlock.png"
+ },
+ {
+ "pagePath": "pages/personal/index",
+ "text": " ",
+ "iconPath": "static/tabbar/personal.png",
+ "selectedIconPath": "static/tabbar/personal.png"
+ }
+ ]
+ },
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "Elitesys",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8",
+ "navigationStyle": "custom",
+ "app-plus": {
+ "background": "#efeff4"
+ }
+ },
+ "condition": {
+ //模式配置,仅开发期间生效
+ "current": 0, //当前激活的模式(list 的索引项)
+ "list": [
+ {
+ "name": "", //模式名称
+ "path": "", //启动页面,必选
+ "query": "" //启动参数,在页面的onLoad函数里面得到
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/pages/book/book.vue b/pages/book/book.vue
new file mode 100644
index 0000000..f0811a4
--- /dev/null
+++ b/pages/book/book.vue
@@ -0,0 +1,53 @@
+
+
+ 跳转下单(Go to Order)
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/book/index.vue b/pages/book/index.vue
new file mode 100644
index 0000000..6789832
--- /dev/null
+++ b/pages/book/index.vue
@@ -0,0 +1,456 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t("book.get") }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t("book.getCode") }}
+
+
+
+
+
+ {{ state.openDoorText }}
+
+
+
+
+
+
+
+
diff --git a/pages/book/map.vue b/pages/book/map.vue
new file mode 100644
index 0000000..4a818da
--- /dev/null
+++ b/pages/book/map.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/book/mapmode.vue b/pages/book/mapmode.vue
new file mode 100644
index 0000000..38aa165
--- /dev/null
+++ b/pages/book/mapmode.vue
@@ -0,0 +1,364 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("book.get") }}
+
+
+
+
+
+
+
diff --git a/pages/book/navigate.vue b/pages/book/navigate.vue
new file mode 100644
index 0000000..8015dfd
--- /dev/null
+++ b/pages/book/navigate.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/call/index.vue b/pages/call/index.vue
new file mode 100644
index 0000000..9be7893
--- /dev/null
+++ b/pages/call/index.vue
@@ -0,0 +1,12 @@
+
+
+ 空白页面站位
+
+
+
+
+
+
diff --git a/pages/evaluate/index.vue b/pages/evaluate/index.vue
new file mode 100644
index 0000000..8d19be7
--- /dev/null
+++ b/pages/evaluate/index.vue
@@ -0,0 +1,396 @@
+
+
+
+
+
+
+ {{ $t('evaluate.customerEvaluation') }}
+
+
+
+
+
+ {{ $t("evaluate.overallRating") }}
+
+
+
+
+
+
+ {{ $t("evaluate.userExperience") }}
+
+
+
+
+
+ {{ $t("evaluate.Hospitality") }}
+
+
+
+
+
+
+ {{ $t("evaluate.cleanliness") }}
+
+
+
+
+
+
+ {{ $t("evaluate.convenience") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/facecode/facecode.vue b/pages/facecode/facecode.vue
new file mode 100644
index 0000000..1beb33a
--- /dev/null
+++ b/pages/facecode/facecode.vue
@@ -0,0 +1,62 @@
+
+
+ 回到订单页,可对相关订单进行门禁授权
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/forgotPawd/index.vue b/pages/forgotPawd/index.vue
new file mode 100644
index 0000000..05d72b9
--- /dev/null
+++ b/pages/forgotPawd/index.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+ EMPOWER YOUR SELF STORAGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ count ? count+'S' : $t("login.send") }}
+
+
+
+ {{ $t("login.change") }}
+
+ {{ $t("login.toLogin") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/goodsList/index.vue b/pages/goodsList/index.vue
new file mode 100644
index 0000000..967ea8f
--- /dev/null
+++ b/pages/goodsList/index.vue
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}({{ $t("goodsList.multi") }})
+ {{ item.show?'-':'+' }}
+
+
+
+
+ [ {{item2.name}} ]
+
+
+
+
+
+
+
+
+
+
+
+ 其他({{ $t("goodsList.note") }})
+
+
+
+
+
+
+
+
+
+ {{ $t("goodsList.tip1") }}
+
+ {{ $t("goodsList.tip2") }}
+ {{ $t("goodsList.tip3") }}
+ {{ $t("goodsList.tip4") }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..9b1b2aa
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,1549 @@
+
+
+
+
+
+
+ {{ unitTypeData[0]?.city }}·{{ unitTypeData[0]?.district }}
+
+
+ 更多分店
+
+
+
+
+
+
+
+
+
+
+ {{ unitTypeData[0]?.sitdName }}
+
+
+
+
+ {{ siteDistance }}KM
+
+
+
+
+
+ {{ unitTypeData[0]?.sitdAddress }}
+
+
+
+
+ 仓型选择
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ unitTypeData[state.active].name }}
+
+
+ {{ unitTypeData[state.active].volumeRange }}
+
+ ({{ unitTypeData[state.active].description }})
+
+
+
+
+ -
+ 体积 (仓号:{{ state.selectUnitRow?.name }})
+ {{
+ state.selectUnitRow?.name ? `${state.selectUnitRow?.volume}m³ ` : "请选择" }}
+
+
+
+ -
+ 租期
+ {{ state.month }}个月
+
+
+
+ -
+ 租金
+ {{ state.priceData?.price ? `¥ ${state.priceData?.price}` :
+ '--'
+ }}
+
+
+ -
+ 实名验证
+ {{
+ state.hasVerify ? '已验证' : '未验证' }}
+
+
+
+
+
+
+ {{ state.priceData.expense ? `¥ ${state.priceData.expense}` : '¥--'
+ }}
+
+
+ 明细
+
+
+ 下单
+
+
+
+ 暂无可用仓型,请选择其他门店~
+
+
+
+
+
+
+
+
+ 阅读并同意《电子租赁条款》
+
+
+
+
+
+
+ 请选择其他门店~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("detail.agreement") }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("detail.agreeTerm") }}
+ {{ $t("detail.scrollRead") }}
+
+
+
+
+
+
+
+
diff --git a/pages/invite/index.vue b/pages/invite/index.vue
new file mode 100644
index 0000000..3066f81
--- /dev/null
+++ b/pages/invite/index.vue
@@ -0,0 +1,157 @@
+
+
+
+
+ {{ $t("invite.title1") }}
{{ $t("invite.title2") }}
+
+
+
+
+
+
+ {{ item.name }}
+
+ {{ $t("invite.number") }} 0/2
+
+
+
+ {{ $t("invite.activity") }}: {{ item.mechanism }}
+ {{ $t("invite.branch") }}: {{ item.branch }}
+ {{ $t("invite.details") }}: {{ item.details }}
+
+
+
+ {{ $t("invite.toInvite") }}
+ {{ $t("invite.record") }}>>
+
+
+ {{ $t("invite.disclaimer") }}
+ {{ $t("invite.disContent") }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/login/index.vue b/pages/login/index.vue
new file mode 100644
index 0000000..ed60edd
--- /dev/null
+++ b/pages/login/index.vue
@@ -0,0 +1,642 @@
+
+
+
+
+
+
+ EMPOWER YOUR SELF STORAGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('login.login') }}
+
+
+
+ {{ $t("login.register") }}
+
+ {{ $t("login.forget") }}
+
+
+
+
+
+
+
+
+
+
+ {{ state.areaCode }}
+
+
+
+
+
+
+
+
+ {{ countdown > 0 ? `${countdown}s` : $t('login.getCode') }}
+
+
+
+
+
+ {{ $t('login.login') }}
+
+
+
+
+ {{ $t('common.FirstTimeLoginTips') }},{{ $t('login.andAgreeTo') }}{{ $t('login.UserAgreement') }}。
+
+
+
+
+
+
+
+ {{ $t("login.wxLogin") }}
+
+
+
+
+
+
+
+
+ {{ $t("common.bindPhone") }}
+
+
+
+
+
+ {{ $t('common.bindPhoneAfter') }}
+
+ {{ $t("common.cancelBind") }}
+
+
+
+
+
+
+ 用户协议 User Agreement
+
+ 1. 您同意遵守本应用的各项使用规定,不得利用本应用进行违法或侵权行为。
+ You agree to comply with all the rules of this app and shall not use it for illegal or infringing activities.
+
+ 2. 本应用有权根据需要修改或更新本协议内容,修改后的协议将在应用内公告。
+ The app reserves the right to modify or update this agreement as needed, with changes announced within the app.
+
+ 3. 您理解并同意,首次登录即视为同意本协议及隐私政策。
+ You understand and agree that the first login signifies your acceptance of this User Agreement and Privacy Policy.
+
+
+
+
+ 隐私政策 Privacy Policy
+ 1. 我们重视您的隐私保护,严格按照相关法律法规收集和使用您的个人信息。
+ We value your privacy and collect and use your personal information in accordance with relevant laws and regulations.
+ 2. 您的手机号、设备信息、登录状态等信息将用于账户认证和服务优化。
+ Your phone number, device information, login status, and other data will be used for account authentication and service optimization.
+ 3. 您的信息不会未经授权向第三方披露,除非法律法规另有规定。
+ Your information will not be disclosed to third parties without your authorization, except as required by law.
+ 4. 您可以通过应用设置管理您的个人信息权限。
+ You can manage your personal information permissions through the app settings.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/orderdetail/door.vue b/pages/orderdetail/door.vue
new file mode 100644
index 0000000..994cd6d
--- /dev/null
+++ b/pages/orderdetail/door.vue
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+ {{ lockDetail.lockerName }}
+
+
+ {{ $t("detail.store") }}: {{ lockDetail.siteName }}
+ {{ $t("detail.unit") }}: {{ lockDetail.unitTypeName }}
+ {{ $t("detail.remain", { days: lockDetail.remainingDays }) }}
+
+ {{ $t('common.status') }}:
+ {{ $t("common.notStarted") }}
+ {{ $t("unlock.cancelPending") }}
+ {{ $t("unlock.outComplete") }}
+ {{ $t("unlock.disapproval") }}
+
+
+
+
+
+
+
+
+ {{ $t("door.tip") }}
+ {{ $t("door.valid") }}
+
+
+
+ {{ $t("common.tryZooming") }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/orderdetail/index.vue b/pages/orderdetail/index.vue
new file mode 100644
index 0000000..ac8cc99
--- /dev/null
+++ b/pages/orderdetail/index.vue
@@ -0,0 +1,1569 @@
+
+
+
+
+
+
+
+
+
+ {{ state.orderData.lockerName}}
+
+
+ {{ $t("detail.store") }}:{{state.orderData.siteName}}
+ {{ $t("detail.unit") }}:{{state.orderData.unitTypeName}}
+
+ {{ $t("detail.remain", { days: state.orderData.remainingDays }) }}
+
+ {{ $t('common.status') }}:
+ {{ $t("common.notStarted") }}
+ {{ $t("unlock.cancelPending") }}
+ {{ $t("unlock.outComplete") }}
+ {{ $t("unlock.disapproval") }} {{ state.orderData.orderStatus == 5 ?`(${$t("unlock.overdue")})`:''}}
+ {{ $t("unlock.overdue") }}
+
+
+ {{ $t("unlock.disapprovalRemarks") }}:{{ state.orderData.dismissRemarks }}
+
+
+
+ {{ $t("common.goodsList") }}
+
+
+ {{ $t("unlock.auth") }}
+
+
+ {{ $t("common.facialData") }}
+
+
+ {{ $t("unlock.FixedPassword") }}
+
+
+ {{ $t("unlock.AccessControlCardBinding") }}
+
+
+ {{ $t("unlock.LockCardUnbinding") }}
+
+
+
+
+
+ {{ $t('common.status') }}: {{ $t("unlock.unPaid") }}
+
+
+
+
+
+
+
+ * {{ $t("detail.orderNum") }}
+
+
+
+ {{state.orderData.orderNo}}
+
+
+
+
+
+ * {{ $t("detail.type") }}
+
+
+
+ {{state.orderData.unitTypeName}}
+
+
+
+
+
+ * {{ $t("detail.period") }}
+
+
+
+ {{state.orderData.rentalInitiateDate}} - {{state.orderData.rentalEndDate}}
+
+
+
+
+
+ * {{ $t("detail.cSize") }}
+
+
+
+ {{state.orderData.volume}}({{state.orderData.length}}*{{state.orderData.width}}*{{state.orderData.height}})
+
+
+
+
+
+ * {{ $t("detail.cValueAdded") }}
+
+
+
+ {{ $t("detail.nodemand") }}
+
+
+
+
+
+ * {{ $t("detail.valuation") }}
+
+
+
+ {{ $t("detail.rentalFee") }}
+
+
+ {{ currency }} {{ state.orderData.originalPrice}}
+
+
+
+
+ {{ $t("detail.deposit") }}
+
+
+ {{ currency }} {{ state.orderData.deposit}}
+
+
+
+
+ {{ $t("detail.valueAdded") }}
+
+
+ {{ currency }} 0.00
+
+
+
+
+ {{ $t("detail.discount") }}
+
+
+ {{ currency }} {{ state.orderData.favorable}}
+
+
+
+
+ {{ $t("common.tuangouCouponPrice") }}
+
+
+ {{ currency }} {{ state.orderData.couponPrice}}
+
+
+
+
+ {{ $t("detail.total") }}
+
+
+ {{ currency }} {{ state.orderData.actualPay}}
+
+
+
+
+
+ * {{$t("detail.RENEWAL")}}
+
+
+
+ {{ index+1 }} {{ item.startTime }} {{ $t("detail.to") }} {{ item.endTime }}
+
+
+ {{ currency }} {{ item.money}}
+
+
+
+
+
+
+ {{ $t("unlock.door") }}
+
+
+ {{ $t("unlock.lock") }}
+
+
+ {{ $t("unlock.renew") }}
+
+
+ {{ $t("unlock.moveout") }}
+
+
+ {{ $t("unlock.evaluate") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("unlock.moveoutReminder") }}
+
+ {{ $t("unlock.moveoutTip") }}
+
+
+
+
+
+
+ {{ $t("unlock.cancel") }}
+ {{ $t("unlock.confirmOut") }}
+
+
+
+
+
+
+ {{ $t("unlock.moveoutReminder") }}
+
+ {{ $t("unlock.moveoutSuccess") }}
+
+
+
+ {{ $t("unlock.order") }}
+
+
+
+
+
+
+
+
+
+ {{ $t('common.password') }}:{{ state.orderData?.userPassword || 'none' }}
+
+
+
+ {{ $t('unlock.ResetPassword') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("bingCard.start")}}
+
+ {{ $t("bingCard.Pairing")}}{{count}}s
+ {{ $t("bingCard.panel")}}
+
+
+
+
+ 1:{{ $t("bingCard.Click") }}
+ 2:{{ $t("bingCard.panel") }}
+ 3:{{ $t("bingCard.single") }}
+ 4:{{ $t("bingCard.close") }}
+
+
+
+
+
+
+
+ IC/ID卡号 CARD NUMBER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ state.paySuccessOrfail
+ ? $t("common.paySuccess")
+ : $t("common.payFail")
+ }}
+
+
+
+ {{ $t("unlock.FaceEnrollment") }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/orderdetail/lock.vue b/pages/orderdetail/lock.vue
new file mode 100644
index 0000000..92189b4
--- /dev/null
+++ b/pages/orderdetail/lock.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+ {{ lockDetail.lockerName }}
+
+
+ {{ $t("detail.store") }}: {{ lockDetail.siteName }}
+ {{ $t("detail.unit") }}: {{ lockDetail.unitTypeName }}
+ {{ $t("detail.remain", { days: lockDetail.remainingDays }) }}
+
+ {{ $t('common.status') }}:
+ {{ $t("common.notStarted") }}
+ {{ $t("unlock.cancelPending") }}
+ {{ $t("unlock.outComplete") }}
+ {{ $t("unlock.disapproval") }}
+
+
+
+
+
+ {{ lockPwd?.password }}{{ lockPwd?.password?'#':'' }}
+
+
+ {{ $t("door.pwd") }}
+ {{ $t("door.valid") }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/personal/customerAi.vue b/pages/personal/customerAi.vue
new file mode 100644
index 0000000..3247855
--- /dev/null
+++ b/pages/personal/customerAi.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/personal/index.vue b/pages/personal/index.vue
new file mode 100644
index 0000000..b2d010d
--- /dev/null
+++ b/pages/personal/index.vue
@@ -0,0 +1,123 @@
+
+
+
+
+ -
+ 订单详情
+
+
+
+
+ -
+ 信息验证
+
+
+
+
+
+ -
+ 客服咨询
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/phone/index.vue b/pages/phone/index.vue
new file mode 100644
index 0000000..d77dee1
--- /dev/null
+++ b/pages/phone/index.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/register/index.vue b/pages/register/index.vue
new file mode 100644
index 0000000..8a88040
--- /dev/null
+++ b/pages/register/index.vue
@@ -0,0 +1,305 @@
+
+
+
+
+
+
+ EMPOWER YOUR SELF STORAGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ count? count+'S' : $t('login.send') }}
+
+
+
+ {{ $t("login.registered") }}
+
+ {{ $t("login.toLogin") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/renewOrder/index.vue b/pages/renewOrder/index.vue
new file mode 100644
index 0000000..74ef12e
--- /dev/null
+++ b/pages/renewOrder/index.vue
@@ -0,0 +1,1154 @@
+
+
+
+
+
+
+
+
+
+ {{ state.lockData.name }}
+
+
+ {{ $t("detail.store") }}:{{ state.lockData.siteName }}
+ {{ $t("detail.unit") }}:{{
+ state.lockData.unitTypeName
+ }}
+ {{ $t("detail.spec") }}:{{ removeTrailingZeros(state.lockData.length) }}m *
+ {{ removeTrailingZeros(state.lockData.width) }}m * {{ removeTrailingZeros(state.lockData.height) }}m
+ {{ $t("detail.size") }}:{{ state.lockData.volume }} m³.
+
+
+
+ {{ currency }} {{ state.priceData.originalPrice }}
+
+
+ {{ currency }} {{ state.priceData.price }}
+
+
+
+
+
+
+
+ {{ $t("detail.sitemap") }}
+
+
+ {{ $t("detail.selected") }}
+
+
+
+
+
+
+
+
+ * {{ $t("detail.cUnit") }}
+
+
+ {{ state.lockData.unitTypeName }}
+
+
+
+
+
+ * {{ $t("detail.startDate") }}
+
+
+ {{ dayjs(state.rentalEndDate).format("YYYY/MM/DD") }}
+
+
+
+
+
+
+ * {{ $t("detail.lease") }}
+
+
+ {{ state.month }}
+
+
+
+
+
+
+
+
+ {{
+ $t("detail.discountOff", {
+ month: item.month,
+ percent: 100 - (item.discount * 100),
+ discount: item.discount * 100 / 10,
+ })
+ }}
+
+
+
+
+
+
+ {{ $t("detail.rentalFee") }}
+
+ {{ currency }} {{ state.priceData.discountExpense }}
+
+
+
+ {{ $t("detail.cDeposit") }}
+
+ {{ currency }} {{ state.priceData.securityDeposit }}
+
+
+
+
+
+ * {{ $t("detail.coupon") }}
+
+
+
+
+
+ {{ item.title }}
+
+ ,
+
+ {{item.couponCode }} {{ couponDesc(item) }}
+
+ {{
+ $t("detail.noselect")
+ }}
+
+
+
+
+
+
+
+
+ * {{ $t("detail.PointsRedemption") }} ({{ $t('detail.AvailablePoints') }}:{{ state.priceData?.maxPoint }})
+
+
+
+
+
+
+
+ {{$t('detail.DeductionAmount')}}:{{ currency }} {{ state.priceData?.deductionMoney }}
+
+
+
+
+
+
+
+ {{ $t("giftMonth",{count:state.priceData.giveExtraMonth})}}
+
+
+
+
+
+
+ * {{ $t("detail.feeDetail") }}
+
+
+ {{ $t("detail.rentalFee") }}
+
+ {{ currency }} {{ state.priceData.lockerExpense }}
+
+
+
+ {{ $t("detail.deposit") }}
+
+ {{ currency }} {{ state.priceData.securityDeposit }}
+
+
+
+ {{ $t("detail.valueAdded") }}
+
+ {{ currency }} 0.00
+
+
+
+ {{ $t("detail.discount") }}
+
+ {{ currency }} {{ state.priceData.favorable }}
+
+
+
+ {{ $t("common.tuangouCouponPrice") }}
+
+ {{ currency }} {{ state.priceData.couponPrice }}
+
+
+
+ {{ $t("detail.total") }}
+
+ {{ currency }} {{ state.priceData.expense }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("common.bindPhone") }}
+ {{ $t('common.bindPhoneAfter') }}
+
+
+
+
+
+
+
+
+
+
+ {{
+ state.paySuccessOrfail
+ ? $t("common.paySuccess")
+ : $t("common.payFail")
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/setOrder/index.vue b/pages/setOrder/index.vue
new file mode 100644
index 0000000..8e0248e
--- /dev/null
+++ b/pages/setOrder/index.vue
@@ -0,0 +1,1770 @@
+
+
+
+
+
+
+
+
+
+ {{ state.lockData.name }}
+
+
+ {{ $t("detail.store") }}:{{ state.lockData.siteName }}
+ {{ $t("detail.unit") }}:{{
+ state.lockData.unitTypeName
+ }}
+ {{ $t("detail.size") }}:{{ state.lockData.volume }} m³
+ {{ $t("detail.spec") }}:{{ removeTrailingZeros(state.lockData.length) }}m *
+ {{ removeTrailingZeros(state.lockData.width) }}m * {{ removeTrailingZeros(state.lockData.height) }}m
+
+
+
+ {{ currency }} {{ state.lockData.price }}
+ {{ currency }} {{ state.lockData.flashSalePrice }}
+
+
+ {{ currency }} {{ state.priceData.price }}
+
+
+
+
+
+
+
+ {{ $t("detail.sitemap") }}
+
+
+ {{ $t("detail.selected") }}
+
+
+
+
+
+
+
+
+ * {{ $t("detail.cUnit") }}
+
+
+ {{ state.lockData.unitTypeName }}
+
+
+
+
+
+ * {{ $t("detail.startDate") }}
+
+
+ {{ dayjs(state.startDate).format("YYYY/MM/DD") }}
+
+
+
+
+
+
+
+ * {{ $t("detail.lease") }}
+
+
+ {{ $t("months",{count: state.month}) }}
+
+
+ {{ state.lockData.shortTermDay }} {{ $t("common.day") }}
+
+
+
+
+
+
+
+
+ {{
+ $t("detail.discountOff", {
+ month: item.month,
+ percent: 100 - item.discount * 100,
+ discount: (item.discount * 100) / 10,
+ })
+ }}
+
+
+
+ {{ state.lockData.shortTermDay }} {{ $t("common.day") }}
+
+
+
+
+
+ {{ $t("detail.rentalFee") }}
+
+ {{ currency }} {{ state.priceData.discountExpense }}
+
+
+
+ {{ $t("detail.cDeposit") }}
+
+
+ {{ currency }} {{ state.priceData.securityDeposit }}
+
+
+
+
+
+
+ * {{ $t("detail.coupon") }}
+
+
+
+
+
+ {{ item.title }}
+
+
+
+ {{ item.couponCode }}
+ {{
+ couponDesc(item)
+ }}
+
+ {{
+ $t("detail.noselect")
+ }}
+
+
+
+
+
+
+
+
+
+ * {{ $t("detail.PointsRedemption") }} ({{ $t('detail.AvailablePoints') }}:{{ state.priceData?.maxPoint }})
+
+
+
+
+
+
+ {{$t('detail.DeductionAmount')}}:{{ currency }} {{ state.priceData?.deductionMoney }}
+
+
+
+
+
+
+
+
+
+ {{ $t("giftMonth",{count:state.priceData.giveExtraMonth})}}
+
+
+
+
+ * {{ $t("detail.feeDetail") }}
+
+
+ {{ $t("detail.rentalFee") }}
+
+ {{ currency }} {{ state.priceData.lockerExpense }}
+
+
+
+ {{ $t("detail.deposit") }}
+
+
+ {{ currency }} {{ state.priceData.securityDeposit }}
+
+
+
+
+ {{ $t("detail.valueAdded") }}
+
+ {{ currency }} 0.00
+
+
+
+ {{ $t("detail.discount") }}
+
+ {{ currency }} {{ state.priceData.favorable }}
+
+
+
+ {{ $t("common.tuangouCouponPrice") }}
+
+ {{ currency }} {{ state.priceData.couponPrice }}
+
+
+
+ {{ $t("detail.total") }}
+
+ {{ currency }} {{ state.priceData.expense }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("detail.read") }}
+ {{
+ $t("detail.agreement")
+ }}
+
+
+
+
+
+
+
+
+
+ {{ $t("common.bindPhone") }}
+ {{ $t("common.bindPhoneAfter") }}
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ state.paySuccessOrfail
+ ? $t("common.paySuccess")
+ : $t("common.payFail")
+ }}
+
+
+
+ {{ $t("unlock.FaceEnrollment") }}
+
+
+
+
+
+
+
+
+ {{ $t('common.Authentication') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("detail.agreement") }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("detail.agreeTerm") }}
+ {{ $t("detail.scrollRead") }}
+
+
+
+
+
+
+
+
+
diff --git a/pages/site/index.vue b/pages/site/index.vue
new file mode 100644
index 0000000..c02f19f
--- /dev/null
+++ b/pages/site/index.vue
@@ -0,0 +1,350 @@
+
+
+
+
+
+ {{state.city}}{{state.district?'·'+state.district:''}}
+
+
+ 更多分店
+
+
+
+
+
+
+
+
+ 推荐 {{ item.name }} 距离最近
+
+
+ 随存随取
+
+
+
+
+
+
+
+
+ {{ item.distance }} KM
+
+
+
+
+ {{ item.city }}{{ item.district }}{{ item.address }}
+
+ 营业: 00:00-24:00
+
+
+ 电话: 400-818-1813
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unlock/index.vue b/pages/unlock/index.vue
new file mode 100644
index 0000000..c65fa0f
--- /dev/null
+++ b/pages/unlock/index.vue
@@ -0,0 +1,1472 @@
+
+
+
+
+
+
+
+ 订单号:{{ item.orderNo }} 复制
+
+
+
+
+
+
+ {{ item.siteName }}
+
+
+
+
+
+
+ {{ item.siteCity }}{{ item.siteDistrict }}{{ item.siteAddress }}
+
+
+
+
+ 仓号:
+ {{ item.lockerName }}
+
+
+ 体积:
+ 长{{ item.lockerLength }}m*宽{{ item.lockerWidth }}m*高{{
+ item.lockerHight }}m ({{ item.lockerVolume }}m³)
+
+
+ 仓型:
+ {{ item.unitTypeName }}
+
+
+ 租期:
+ {{ item.endTime?.substr(0, 10) }}
+
+
+ {{ $t('common.status') }}:
+
+ {{ $t("common.notStarted") }}
+ {{ $t("unlock.cancelPending")
+ }}
+ {{ $t("unlock.outComplete")
+ }}
+ {{ $t("unlock.disapproval") }} {{
+ item.orderStatus == 5 ? `(${$t("unlock.overdue")})` : ''}}
+ {{ $t("unlock.overdue")
+ }}
+
+
+
+
+
+ 开门
+ 开锁
+ 续仓
+ 详情
+
+
+
+ 取消退仓申请
+ {{ $t("unlock.details") }}
+
+
+ {{ $t("unlock.details") }}
+
+
+ 取消订单
+
+
+
+
+ 你还没有订单哦~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("unlock.moveoutReminder") }}
+
+ {{ $t("unlock.moveoutTip") }}
+
+
+
+
+
+
+
+ {{ $t("unlock.cancel") }}
+
+
+ {{ $t("unlock.confirmOut") }}
+
+
+
+
+
+
+
+ {{ $t("unlock.moveoutReminder") }}
+
+ {{ $t("unlock.moveoutSuccess") }}
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/webview/web.vue b/pages/webview/web.vue
new file mode 100644
index 0000000..e34a66e
--- /dev/null
+++ b/pages/webview/web.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/AControl/index.vue b/pagesb/AControl/index.vue
new file mode 100644
index 0000000..1174e55
--- /dev/null
+++ b/pagesb/AControl/index.vue
@@ -0,0 +1,363 @@
+
+
+
+
+
+
+
+
+
+ * 上传{{ state.appText }} Upload Photo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/Apis/flashSale.js b/pagesb/Apis/flashSale.js
new file mode 100644
index 0000000..06c0899
--- /dev/null
+++ b/pagesb/Apis/flashSale.js
@@ -0,0 +1,17 @@
+import request from "/utils/request.js";
+export default {
+ GetFlashSaleDistrict:(data) => {
+ return request.request({
+ url: '/ClientSite/GetFlashSaleDistrict',
+ method: 'get',
+ data,
+ });
+ },
+ GetFlashSaleInfo:(data) => {
+ return request.request({
+ url: '/ClientSite/GetFlashSaleInfo',
+ method: 'get',
+ data,
+ });
+ },
+ }
\ No newline at end of file
diff --git a/pagesb/activityDetail/index.vue b/pagesb/activityDetail/index.vue
new file mode 100644
index 0000000..36dd485
--- /dev/null
+++ b/pagesb/activityDetail/index.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+
+ {{ `活动内容:邀请50位小伙伴关注[${projectInfo.name}]公众号,即可获得租仓优惠券!` }}
+
+
+ 使用门店:全部门店
+
+ {{ `详情咨询:${projectInfo.phone}` }}
+
+
+
+
+
+
+ {{ `*活动解释权归${projectInfo.name}所有` }}
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/changeUser/index.vue b/pagesb/changeUser/index.vue
new file mode 100644
index 0000000..252a514
--- /dev/null
+++ b/pagesb/changeUser/index.vue
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+ openId
+
+
+
+ 写入 openId
+ 清空 openId
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/components/my-uv-collapse/changelog.md b/pagesb/components/my-uv-collapse/changelog.md
new file mode 100644
index 0000000..0219560
--- /dev/null
+++ b/pagesb/components/my-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/pagesb/components/my-uv-collapse/components/uv-collapse-item/props.js b/pagesb/components/my-uv-collapse/components/uv-collapse-item/props.js
new file mode 100644
index 0000000..18983c1
--- /dev/null
+++ b/pagesb/components/my-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/pagesb/components/my-uv-collapse/components/uv-collapse-item/uv-collapse-item.vue b/pagesb/components/my-uv-collapse/components/uv-collapse-item/uv-collapse-item.vue
new file mode 100644
index 0000000..777bc1a
--- /dev/null
+++ b/pagesb/components/my-uv-collapse/components/uv-collapse-item/uv-collapse-item.vue
@@ -0,0 +1,232 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/components/my-uv-collapse/components/uv-collapse/props.js b/pagesb/components/my-uv-collapse/components/uv-collapse/props.js
new file mode 100644
index 0000000..70fa04c
--- /dev/null
+++ b/pagesb/components/my-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/pagesb/components/my-uv-collapse/components/uv-collapse/uv-collapse.vue b/pagesb/components/my-uv-collapse/components/uv-collapse/uv-collapse.vue
new file mode 100644
index 0000000..5e5c96d
--- /dev/null
+++ b/pagesb/components/my-uv-collapse/components/uv-collapse/uv-collapse.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
diff --git a/pagesb/components/my-uv-collapse/package.json b/pagesb/components/my-uv-collapse/package.json
new file mode 100644
index 0000000..cf9565f
--- /dev/null
+++ b/pagesb/components/my-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/pagesb/components/qf-image-cropper/changelog.md b/pagesb/components/qf-image-cropper/changelog.md
new file mode 100644
index 0000000..531a5e4
--- /dev/null
+++ b/pagesb/components/qf-image-cropper/changelog.md
@@ -0,0 +1,67 @@
+## 2.2.4(2024-06-21)
+* 新增 reverseRotatable 属性,是否支持逆向翻转
+* 修复 `2.1.7` 版本导致旋转后图片没有自动适配裁剪框的问题
+## 2.2.3(2024-06-21)
+* 新增 gpu 属性,是否开启硬件加速,图片缩放过程中如果出现元素的“留影”或“重影”效果,可通过该方式解决或减轻这一问题
+* 修复 组件使用 `v-if` 并设置 `src` 属性时可能会出现图片渲染位置存在偏差的问题
+
+## 2.2.2(2024-06-21)
+* 优化 组件实例 chooseImage 方法支持传参
+* 修复 组件使用 `v-if` 时组件无非正常渲染的问题
+
+## 2.2.1(2024-06-15)
+* 修复 H5平台不支持手势拖动图片的问题
+
+## 2.2.0(2024-05-31)
+* 修复 APP平台 `vue2` 项目因 `2.1.9` 版本修复 `vue3` 项目bug而引发的问题
+
+## 2.1.9(2024-05-29)
+* 修复 APP平台 `vue3` 项目因 uniapp `renderjs` 中未支持条件编译,导致运行了H5平台代码报错的问题
+
+## 2.1.8(2024-05-29)
+* 新增 zIndex 属性,调整组件层级
+* 新增 组件内容插槽
+* 优化 微信小程序平台动态修改元素style时的多余内容
+
+## 2.1.7(2024-05-28)
+* 新增 checkRange 属性,当 checkRange=false 时允许图片位置超出裁剪边界
+* 新增 minScale 属性,图片最小缩放倍数,当 minScale<0 时可使图片宽高不再受裁剪区域宽高限制
+* 新增 backgroundColor 属性,生成图片背景色,如果裁剪区域没有完全包含在图片中时,不设置该属性生成图片存在一定的透明块
+* 优化 动态修改图片宽高但没有传入src时,尺寸适应问题
+* 修复 APP平台通过 `this.$ownerInstance` 获取组件实例时机过早,其值为 `undefined` 导致报错界面没有正常渲染的问题
+
+## 2.1.6(2023-04-16)
+* 修复 组件使用 v-show 指令会导致选择图片后初始位置严重偏位的问题
+
+## 2.1.5(2023-04-15)
+* 新增 兼容APP平台
+
+## 2.1.4(2023-03-13)
+* 新增 fileType 属性,用于指定生成文件的类型,只支持 'jpg' 或 'png',默认为 'png'
+* 新增 delay 属性,微信小程序平台使用 `Canvas 2D` 绘制时控制图片从绘制到生成所需时间
+* 优化 当生成图片的尺寸宽/高超过 Canvas 2D 最大限制(1365*1365)则将画布尺寸缩放在限制范围内绘制完成后输出目标尺寸
+* 优化 旋转图标指示方向与实际旋转方向不符
+
+## 2.1.3(2023-02-06)
+* 优化 vue3支持
+
+## 2.1.2(2023-02-03)
+* 新增 navigation 属性,H5平台当 showAngle 为 true 时,使用插件的页面在 `page.json` 中配置了 "navigationStyle": "custom" 时,必须将此值设为 false ,否则四个可拉伸角的触发位置会有偏差
+* 修复 H5平台部分设备(已知iPhone11以下机型)拍照的图片缩放时会闪动的问题
+
+## 2.1.1(2022-12-06)
+* 修复 横屏适配问题
+
+## 2.1.0(2022-12-06)
+* 新增 兼容H5平台,使用 renderjs 响应手势事件
+
+## 2.0.0(2022-12-05)
+* 重构 插件,使用 WXS 响应手势事件
+* 新增 图片翻转
+* 新增 拉伸裁剪框放大图片
+* 新增 监听PC鼠标滚轮触发缩放
+* 新增 圆形、圆角矩形的图片裁剪
+* 优化 图片缩放,移动端以双指触摸中心点为缩放中心点,PC端以鼠标所在点为缩放中心点
+* 优化 裁剪框样式
+* 优化 图片位置拖动 支持边界回弹效果(滑动时可滑出边界,释放时回弹到边界)
+* 优化 生成图片使用新版 Canvas 2D 接口
diff --git a/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js b/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js
new file mode 100644
index 0000000..d4e2339
--- /dev/null
+++ b/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js
@@ -0,0 +1,738 @@
+/**
+ * 图片编辑器-手势监听
+ * 1. 支持编译到app-vue(uni-app 2.5.5及以上版本)、H5上
+ */
+/** 图片偏移量 */
+var offset = { x: 0, y: 0 };
+/** 图片缩放比例 */
+var scale = 1;
+/** 图片最小缩放比例 */
+var minScale = 1;
+/** 图片旋转角度 */
+var rotate = 0;
+/** 触摸点 */
+var touches = [];
+/** 图片布局信息 */
+var img = {};
+/** 系统信息 */
+var sys = {};
+/** 裁剪区域布局信息 */
+var area = {};
+/** 触摸行为类型 */
+var touchType = '';
+/** 操作角的位置 */
+var activeAngle = 0;
+/** 裁剪区域布局信息偏移量 */
+var areaOffset = { left: 0, right: 0, top: 0, bottom: 0 };
+/** 元素ID */
+var elIds = {
+ 'imageStyles': 'crop-image',
+ 'maskStylesList': 'crop-mask-block',
+ 'borderStyles': 'crop-border',
+ 'circleBoxStyles': 'crop-circle-box',
+ 'circleStyles': 'crop-circle',
+ 'gridStylesList': 'crop-grid',
+ 'angleStylesList': 'crop-angle',
+}
+/** 记录上次初始化时间戳,排除APP重复更新 */
+var timestamp = 0;
+/** vue3 renderjs 条件编译无效,以此方式区别 APP 和 H5 */
+// #ifdef H5
+var platform = 'H5';
+// #endif
+// #ifdef APP
+var platform = 'APP';
+// #endif
+/**
+ * 样式对象转字符串
+ * @param {Object} style 样式对象
+ */
+function styleToString(style) {
+ if(typeof style === 'string') return style;
+ var str = '';
+ for (let k in style) {
+ str += k + ':' + style[k] + ';';
+ }
+ return str;
+}
+/**
+ *
+ * @param {Object} instance 页面实例对象
+ * @param {Object} key 要修改样式的key
+ * @param {Object|Array} style 样式
+ */
+function setStyle(instance, key, style) {
+ // console.log('setStyle', instance, key, JSON.stringify(style))
+ // #ifdef APP-PLUS
+ if(platform === 'APP') {
+ if(Object.prototype.toString.call(style) === '[object Array]') {
+ for (var i = 0, len = style.length; i < len; i++) {
+ var el = window.document.getElementById(elIds[key] + '-' + (i + 1));
+ el && (el.style = styleToString(style[i]));
+ }
+ } else {
+ var el = window.document.getElementById(elIds[key]);
+ el && (el.style = styleToString(style));
+ }
+ }
+ // #endif
+ // #ifdef H5
+ if(platform === 'H5') instance[key] = style;
+ // #endif
+}
+/**
+ * 触发页面实例指定方法
+ * @param {Object} instance 页面实例对象
+ * @param {Object} name 方法名称
+ * @param {Object} obj 传递参数
+ */
+function callMethod(instance, name, obj) {
+ // #ifdef APP-PLUS
+ if(platform === 'APP') instance.callMethod(name, obj);
+ // #endif
+ // #ifdef H5
+ if(platform === 'H5') instance[name](obj);
+ // #endif
+}
+/**
+ * 计算两点间距
+ * @param {Object} touches 触摸点信息
+ */
+function getDistanceByTouches(touches) {
+ // 根据勾股定理求两点间距离
+ var a = touches[1].pageX - touches[0].pageX;
+ var b = touches[1].pageY - touches[0].pageY;
+ var c = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));
+ // 求两点间的中点坐标
+ // 1. a、b可能为负值
+ // 2. 在求a、b时,如用touches[1]减touches[0],则求中点坐标也得用touches[1]减a/2、b/2
+ // 3. 同理,在求a、b时,也可用touches[0]减touches[1],则求中点坐标也得用touches[0]减a/2、b/2
+ var x = touches[1].pageX - a / 2;
+ var y = touches[1].pageY - b / 2;
+ return { c, x, y };
+};
+
+/**
+ * 修正取值
+ * @param {Object} a
+ * @param {Object} b
+ * @param {Object} c
+ * @param {Object} reverse 是否反向
+ */
+function correctValue(a, b, c, reverse) {
+ return reverse ? Math.max(Math.min(a, b), c) : Math.min(Math.max(a, b), c);
+}
+
+/**
+ * 检查边界:限制 x、y 拖动范围,禁止滑出边界
+ * @param {Object} e 点坐标
+ */
+function checkRange(e) {
+ var r = rotate / 90 % 2;
+ if(r === 1) { // 因图片宽高可能不等,翻转 90° 或 270° 后图片宽高需反着计算,且左右和上下边界要根据差值做偏移
+ var o = (img.height - img.width) / 2; // 宽高差值一半
+ return {
+ x: correctValue(e.x, -img.height + o + area.width + area.left, area.left + o, img.height < area.height),
+ y: correctValue(e.y, -img.width - o + area.height + area.top, area.top - o, img.width < area.width)
+ }
+ }
+ return {
+ x: correctValue(e.x, -img.width + area.width + area.left, area.left, img.width < area.width),
+ y: correctValue(e.y, -img.height + area.height + area.top, area.top, img.height < area.height)
+ }
+};
+/**
+ * 变更图片布局信息
+ * @param {Object} e 布局信息
+ */
+function changeImageRect(e) {
+ // console.log('changeImageRect', e)
+ offset.x += e.x || 0;
+ offset.y += e.y || 0;
+ if(e.check && area.checkRange) { // 检查边界
+ var point = checkRange(offset);
+ if(offset.x !== point.x || offset.y !== point.y) {
+ offset = point;
+ }
+ }
+
+ // 因频繁修改 width/height 会造成大量的内存消耗,改为scale
+ // e.instance.imageStyles = {
+ // width: img.width + 'px',
+ // height: img.height + 'px',
+ // transform: 'translate(' + (offset.x + ox) + 'px, ' + (offset.y + ox) + 'px) rotate(' + rotate +'deg)'
+ // };
+ var ox = (img.width - img.oldWidth) / 2;
+ var oy = (img.height - img.oldHeight) / 2;
+ // e.instance.imageStyles = {
+ // width: img.oldWidth + 'px',
+ // height: img.oldHeight + 'px',
+ // transform: 'translate(' + (offset.x + ox) + 'px, ' + (offset.y + oy) + 'px) rotate(' + rotate +'deg) scale(' + scale + ')'
+ // };
+ setStyle(e.instance, 'imageStyles', {
+ width: img.oldWidth + 'px',
+ height: img.oldHeight + 'px',
+ transform: (img.gpu ? 'translateZ(0) ' : '') + 'translate(' + (offset.x + ox) + 'px, ' + (offset.y + oy) + 'px' + ') rotate(' + rotate +'deg) scale(' + scale + ')'
+ });
+ callMethod(e.instance, 'dataChange', {
+ width: img.width,
+ height: img.height,
+ x: offset.x,
+ y: offset.y,
+ rotate: rotate
+ });
+};
+/**
+ * 变更裁剪区域布局信息
+ * @param {Object} e 布局信息
+ */
+function changeAreaRect(e) {
+ // console.log('changeAreaRect', e)
+ // 变更蒙版样式
+ setStyle(e.instance, 'maskStylesList', [
+ {
+ left: 0,
+ width: (area.left + areaOffset.left) + 'px',
+ top: 0,
+ bottom: 0,
+ 'z-index': area.zIndex + 2
+ },
+ {
+ left: (area.right + areaOffset.right) + 'px',
+ right: 0,
+ top: 0,
+ bottom: 0,
+ 'z-index': area.zIndex + 2
+ },
+ {
+ left: (area.left + areaOffset.left) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ top: 0,
+ height: (area.top + areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 2
+ },
+ {
+ left: (area.left + areaOffset.left) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ top: (area.bottom + areaOffset.bottom) + 'px',
+ // height: (area.top - areaOffset.bottom + sys.offsetBottom) + 'px',
+ bottom: 0,
+ 'z-index': area.zIndex + 2
+ }
+ ]);
+ // 变更边框样式
+ if(area.showBorder) {
+ setStyle(e.instance, 'borderStyles', {
+ left: (area.left + areaOffset.left) + 'px',
+ top: (area.top + areaOffset.top) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ height: (area.height + areaOffset.bottom - areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 3
+ });
+ }
+
+ // 变更参考线样式
+ if(area.showGrid) {
+ setStyle(e.instance, 'gridStylesList', [
+ {
+ 'border-width': '1px 0 0 0',
+ left: (area.left + areaOffset.left) + 'px',
+ right: (area.right + areaOffset.right) + 'px',
+ top: (area.top + areaOffset.top + (area.height + areaOffset.bottom - areaOffset.top) / 3 - 0.5) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '1px 0 0 0',
+ left: (area.left + areaOffset.left) + 'px',
+ right: (area.right + areaOffset.right) + 'px',
+ top: (area.top + areaOffset.top + (area.height + areaOffset.bottom - areaOffset.top) * 2 / 3 - 0.5) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '0 1px 0 0',
+ top: (area.top + areaOffset.top) + 'px',
+ bottom: (area.bottom + areaOffset.bottom) + 'px',
+ left: (area.left + areaOffset.left + (area.width + areaOffset.right - areaOffset.left) / 3 - 0.5) + 'px',
+ height: (area.height + areaOffset.bottom - areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '0 1px 0 0',
+ top: (area.top + areaOffset.top) + 'px',
+ bottom: (area.bottom + areaOffset.bottom) + 'px',
+ left: (area.left + areaOffset.left + (area.width + areaOffset.right - areaOffset.left) * 2 / 3 - 0.5) + 'px',
+ height: (area.height + areaOffset.bottom - areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 3
+ }
+ ]);
+ }
+
+ // 变更四个伸缩角样式
+ if(area.showAngle) {
+ setStyle(e.instance, 'angleStylesList', [
+ {
+ 'border-width': area.angleBorderWidth + 'px 0 0 ' + area.angleBorderWidth + 'px',
+ left: (area.left + areaOffset.left - area.angleBorderWidth) + 'px',
+ top: (area.top + areaOffset.top - area.angleBorderWidth) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px 0 0',
+ left: (area.right + areaOffset.right - area.angleSize) + 'px',
+ top: (area.top + areaOffset.top - area.angleBorderWidth) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '0 0 ' + area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px',
+ left: (area.left + areaOffset.left - area.angleBorderWidth) + 'px',
+ top: (area.bottom + areaOffset.bottom - area.angleSize) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '0 ' + area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px 0',
+ left: (area.right + areaOffset.right - area.angleSize) + 'px',
+ top: (area.bottom + areaOffset.bottom - area.angleSize) + 'px',
+ 'z-index': area.zIndex + 3
+ }
+ ]);
+ }
+
+ // 变更圆角样式
+ if(area.radius > 0) {
+ var radius = area.radius;
+ if(area.width === area.height && area.radius >= area.width / 2) { // 圆形
+ radius = (area.width / 2);
+ } else { // 圆角矩形
+ if(area.width !== area.height) { // 限制圆角半径不能超过短边的一半
+ radius = Math.min(area.width / 2, area.height / 2, radius);
+ }
+ }
+ setStyle(e.instance, 'circleBoxStyles', {
+ left: (area.left + areaOffset.left) + 'px',
+ top: (area.top + areaOffset.top) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ height: (area.height + areaOffset.bottom - areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 2
+ });
+ setStyle(e.instance, 'circleStyles', {
+ 'box-shadow': '0 0 0 ' + Math.max(area.width, area.height) + 'px rgba(51, 51, 51, 0.8)',
+ 'border-radius': radius + 'px'
+ });
+ }
+};
+/**
+ * 缩放图片
+ * @param {Object} e 布局信息
+ */
+function scaleImage(e) {
+ // console.log('scaleImage', e)
+ var last = scale;
+ scale = Math.min(Math.max(e.scale + scale, minScale), img.maxScale);
+ if(last !== scale) {
+ img.width = img.oldWidth * scale;
+ img.height = img.oldHeight * scale;
+ // 参考问题:有一个长4000px、宽4000px的四方形ABCD,A点的坐标固定在(-2000,-2000),
+ // 该四边形上有一个点E,坐标为(-100,-300),将该四方形复制一份并缩小到90%后,
+ // 新四边形的A点坐标为多少时可使新四边形的E点与原四边形的E点重合?
+ // 预期效果:从图中选取某点(参照物)为中心点进行缩放,缩放时无论图像怎么变化,该点位置始终固定不变
+ // 计算方法:以相同起点先计算缩放前后两点间的距离,再加上原图像偏移量即可
+ e.x = (e.x - offset.x) * (1 - scale / last);
+ e.y = (e.y - offset.y) * (1 - scale / last);
+ changeImageRect(e);
+ return true;
+ }
+ return false;
+};
+/**
+ * 获取触摸点在哪个角
+ * @param {number} x 触摸点x轴坐标
+ * @param {number} y 触摸点y轴坐标
+ * @return {number} 角的位置:0=无;1=左上;2=右上;3=左下;4=右下;
+ */
+function getToucheAngle(x, y) {
+ // console.log('getToucheAngle', x, y, JSON.stringify(area))
+ var o = area.angleBorderWidth; // 需扩大触发范围则把 o 值加大即可
+ var oy = sys.navigation ? 0 : sys.windowTop;
+ if(y >= area.top - o + oy && y <= area.top + area.angleSize + o + oy) {
+ if(x >= area.left - o && x <= area.left + area.angleSize + o) {
+ return 1; // 左上角
+ } else if(x >= area.right - area.angleSize - o && x <= area.right + o) {
+ return 2; // 右上角
+ }
+ } else if(y >= area.bottom - area.angleSize - o + oy && y <= area.bottom + o + oy) {
+ if(x >= area.left - o && x <= area.left + area.angleSize + o) {
+ return 3; // 左下角
+ } else if(x >= area.right - area.angleSize - o && x <= area.right + o) {
+ return 4; // 右下角
+ }
+ }
+ return 0; // 无触摸到角
+};
+/**
+ * 重置数据
+ */
+function resetData() {
+ offset = { x: 0, y: 0 };
+ scale = 1;
+ minScale = img.minScale;
+ rotate = 0;
+};
+function getTouchs(touches) {
+ var result = [];
+ var len = touches ? touches.length : 0
+ for (var i = 0; i < len; i++) {
+ result[i] = {
+ pageX: touches[i].pageX,
+ // h5无标题栏时,窗口顶部距离仍为标题栏高度,且触摸点y轴坐标还是有标题栏的值,即减去标题栏高度的值
+ pageY: touches[i].pageY + sys.windowTop
+ };
+ }
+ return result;
+};
+var mouseEvent = false;
+export default {
+ data() {
+ return {
+ imageStyles: {},
+ maskStylesList: [{}, {}, {}, {}],
+ borderStyles: {},
+ gridStylesList: [{}, {}, {}, {}],
+ angleStylesList: [{}, {}, {}, {}],
+ circleBoxStyles: {},
+ circleStyles: {}
+ }
+ },
+ created() {
+ // 监听 PC 端鼠标滚轮
+ // #ifdef H5
+ platform === 'H5' && window.addEventListener('mousewheel', async (e) => {
+ var touchs = getTouchs([e])
+ img.src && scaleImage({
+ instance: await this.getInstance(),
+ check: true,
+ // 鼠标向上滚动时,deltaY 固定 -100,鼠标向下滚动时,deltaY 固定 100
+ scale: e.deltaY > 0 ? -0.05 : 0.05,
+ x: touchs[0].pageX,
+ y: touchs[0].pageY
+ });
+ });
+ // #endif
+ },
+ // #ifdef H5
+ mounted() {
+ platform === 'H5' && this.initH5Events();
+ },
+ // #endif
+ setPlatform(p) {
+ platform = p;
+ },
+ methods: {
+ // #ifdef H5
+ getTouchEvent(e) {
+ e.touches = [
+ { pageX: e.pageX, pageY: e.pageY }
+ ];
+ return e;
+ },
+ initH5Events() {
+ const preview = document.getElementById('pic-preview');
+ preview?.addEventListener('mousedown', (e, ev) => {
+ mouseEvent = true;
+ this.touchstart(this.getTouchEvent(e));
+ });
+ preview?.addEventListener('mousemove', (e) => {
+ if (!mouseEvent) return;
+ this.touchmove(this.getTouchEvent(e));
+ });
+ preview?.addEventListener('mouseup', (e) => {
+ mouseEvent = false;
+ this.touchend(this.getTouchEvent(e))
+ });
+ preview?.addEventListener('mouseleave', (e) => {
+ mouseEvent = false;
+ this.touchend(this.getTouchEvent(e))
+ });
+ },
+ // #endif
+ async getInstance() {
+ // #ifdef APP-PLUS
+ if(platform === 'APP')
+ return this.$ownerInstance
+ ? Promise.resolve(this.$ownerInstance)
+ : new Promise((resolve) => {
+ setTimeout(async () => {
+ resolve(await this.getInstance());
+ });
+ });
+ // #endif
+ // #ifdef H5
+ if(platform === 'H5')
+ return Promise.resolve(this);
+ // #endif
+ },
+ /**
+ * 初始化:观察数据变更
+ * @param {Object} newVal 新数据
+ * @param {Object} oldVal 旧数据
+ * @param {Object} o 组件实例对象
+ */
+ initObserver: async function(newVal, oldVal, o, i) {
+ // console.log('initObserver', newVal, oldVal, o, i)
+ if(newVal && (!img.src || timestamp !== newVal.timestamp)) {
+ timestamp = newVal.timestamp;
+ img = newVal.img;
+ sys = newVal.sys;
+ area = newVal.area;
+ minScale = img.minScale;
+ resetData();
+ const instance = await this.getInstance()
+ img.src && changeImageRect({
+ instance,
+ x: (sys.windowWidth - img.width) / 2,
+ y: (sys.windowHeight + sys.windowTop - sys.offsetBottom - img.height) / 2
+ });
+ changeAreaRect({
+ instance
+ });
+ }
+ },
+ /**
+ * 鼠标滚轮滚动
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ mousewheel: function(e, o) {
+ // h5平台 wheel 事件无法判断滚轮滑动方向,需使用 mousewheel
+ },
+ /**
+ * 触摸开始
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ touchstart: function(e, o) {
+ if(!img.src) return;
+ touches = getTouchs(e.touches);
+ activeAngle = area.showAngle ? getToucheAngle(touches[0].pageX, touches[0].pageY) : 0;
+ if(touches.length === 1 && activeAngle !== 0) {
+ touchType = 'stretch'; // 伸缩裁剪区域
+ } else {
+ touchType = '';
+ }
+ // console.log('touchstart', e, activeAngle)
+ },
+ /**
+ * 触摸移动
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ touchmove: async function(e, o) {
+ if(!img.src) return;
+ // console.log('touchmove', e, o)
+ e.touches = getTouchs(e.touches);
+ if(touchType === 'stretch') { // 触摸四个角进行拉伸
+ var point = e.touches[0];
+ var start = touches[0];
+ var x = point.pageX - start.pageX;
+ var y = point.pageY - start.pageY;
+ if(x !== 0 || y !== 0) {
+ var maxX = area.width * (1 - area.minScale);
+ var maxY = area.height * (1 - area.minScale);
+ // console.log(x, y, maxX, maxY, offset, area)
+ touches[0] = point;
+ switch(activeAngle) {
+ case 1: // 左上角
+ x += areaOffset.left;
+ y += areaOffset.top;
+ // console.log(x, y, offset.left > area.left)
+ // console.log(maxX, maxY)
+ if(x >= 0 && y >= 0) { // 有效滑动
+ var max = minScale < 1 && area.checkRange && ((offset.x > 0 && offset.x >= area.left) || (offset.y > 0 && offset.y >= area.top))
+ ? Math.min(offset.y - area.top, offset.x - area.left)
+ : false;
+ if(x > y) { // 以x轴滑动距离为缩放基准
+ if(typeof max === 'number') maxX = max;
+ if(x > maxX) x = maxX;
+ y = x * area.height / area.width;
+ } else { // 以y轴滑动距离为缩放基准
+ if(typeof max === 'number') maxY = max;
+ if(y > maxY) y = maxY;
+ x = y * area.width / area.height;
+ }
+ areaOffset.left = x;
+ areaOffset.top = y;
+ }
+ break;
+ case 2: // 右上角
+ x += areaOffset.right;
+ y += areaOffset.top;
+ if(x <= 0 && y >= 0) { // 有效滑动
+ var max = minScale < 1 && area.checkRange && ((offset.x > 0 && offset.x + img.width <= area.right) || (offset.y > 0 && offset.y >= area.top))
+ ? Math.min(offset.y - area.top, area.right - offset.x - img.width)
+ : false;
+ if(-x > y) { // 以x轴滑动距离为缩放基准
+ if(typeof max === 'number') maxX = max;
+ if(-x > maxX) x = -maxX;
+ y = -x * area.height / area.width;
+ } else { // 以y轴滑动距离为缩放基准
+ if(typeof max === 'number') maxY = max;
+ if(y > maxY) y = maxY;
+ x = -y * area.width / area.height;
+ }
+ areaOffset.right = x;
+ areaOffset.top = y;
+ }
+ break;
+ case 3: // 左下角
+ x += areaOffset.left;
+ y += areaOffset.bottom;
+ if(x >= 0 && y <= 0) { // 有效滑动
+ var max = minScale < 1 && area.checkRange && ((offset.x > 0 && offset.x >= area.left) || (offset.y > 0 && offset.y + img.height <= area.bottom))
+ ? Math.min(area.bottom - offset.y - img.height, offset.x - area.left)
+ : false;
+ if(x > -y) { // 以x轴滑动距离为缩放基准
+ if(typeof max === 'number') maxX = max;
+ if(x > maxX) x = maxX;
+ y = -x * area.height / area.width;
+ } else { // 以y轴滑动距离为缩放基准
+ if(typeof max === 'number') maxY = max;
+ if(-y > maxY) y = -maxY;
+ x = -y * area.width / area.height;
+ }
+ areaOffset.left = x;
+ areaOffset.bottom = y;
+ }
+ break;
+ case 4: // 右下角
+ x += areaOffset.right;
+ y += areaOffset.bottom;
+ if(x <= 0 && y <= 0) { // 有效滑动
+ var max = minScale < 1 && area.checkRange && ((offset.x > 0 && offset.x + img.width <= area.right) || (offset.y > 0 && offset.y + img.height <= area.bottom))
+ ? Math.min(area.bottom - offset.y - img.height, area.right - offset.x - img.width)
+ : false;
+ if(-x > -y) { // 以x轴滑动距离为缩放基准
+ if(typeof max === 'number') maxX = max;
+ if(-x > maxX) x = -maxX;
+ y = x * area.height / area.width;
+ } else { // 以y轴滑动距离为缩放基准
+ if(typeof max === 'number') maxY = max;
+ if(-y > maxY) y = -maxY;
+ x = y * area.width / area.height;
+ }
+ areaOffset.right = x;
+ areaOffset.bottom = y;
+ }
+ break;
+ }
+ // console.log(x, y, JSON.stringify(areaOffset))
+ changeAreaRect({
+ instance: await this.getInstance(),
+ });
+ // this.draw();
+ }
+ } else if (e.touches.length == 2) { // 双点触摸缩放
+ var start = getDistanceByTouches(touches);
+ var end = getDistanceByTouches(e.touches);
+ scaleImage({
+ instance: await this.getInstance(),
+ check: !area.bounce,
+ scale: (end.c - start.c) / 100,
+ x: end.x,
+ y: end.y
+ });
+ touchType = 'scale';
+ } else if(touchType === 'scale') {// 从双点触摸变成单点触摸 / 从缩放变成拖动
+ touchType = 'move';
+ } else {
+ changeImageRect({
+ instance: await this.getInstance(),
+ check: !area.bounce,
+ x: e.touches[0].pageX - touches[0].pageX,
+ y: e.touches[0].pageY - touches[0].pageY
+ });
+ touchType = 'move';
+ }
+ touches = e.touches;
+ },
+ /**
+ * 触摸结束
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ touchend: async function(e, o) {
+ if(!img.src) return;
+ if(touchType === 'stretch') { // 拉伸裁剪区域的四个角缩放
+ // 裁剪区域宽度被缩放到多少
+ var left = areaOffset.left;
+ var right = areaOffset.right;
+ var top = areaOffset.top;
+ var bottom = areaOffset.bottom;
+ var w = area.width + right - left;
+ var h = area.height + bottom - top;
+ // 图像放大倍数
+ var p = scale * (area.width / w) - scale;
+ // 复原裁剪区域
+ areaOffset = { left: 0, right: 0, top: 0, bottom: 0 };
+ changeAreaRect({
+ instance: await this.getInstance(),
+ });
+ scaleImage({
+ instance: await this.getInstance(),
+ scale: p,
+ x: area.left + left + (1 === activeAngle || 3 === activeAngle ? w : 0),
+ y: area.top + top + (1 === activeAngle || 2 === activeAngle ? h : 0)
+ });
+ } else if (area.bounce) { // 检查边界并矫正,实现拖动到边界时有回弹效果
+ changeImageRect({
+ instance: await this.getInstance(),
+ check: true
+ });
+ }
+ },
+ /**
+ * 顺时针翻转图片90°
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ rotateImage: async function(r) {
+ rotate = (rotate + (r || 90)) % 360;
+
+ if(img.minScale >= 1) {
+ // 因图片宽高可能不等,翻转后图片宽高需足够填满裁剪区域
+ minScale = 1;
+ if(img.width < area.height) {
+ minScale = area.height / img.oldWidth;
+ } else if(img.height < area.width) {
+ minScale = (area.width / img.oldHeight)
+ }
+ if(minScale !== 1) {
+ scaleImage({
+ instance: await this.getInstance(),
+ scale: minScale - scale,
+ x: sys.windowWidth / 2,
+ y: (sys.windowHeight - sys.offsetBottom) / 2
+ });
+ }
+ }
+
+ // 由于拖动画布后会导致图片位置偏移,翻转时的旋转中心点需是图片区域+偏移区域的中心点
+ // 翻转x轴中心点 = (超出裁剪区域右侧的图片宽度 - 超出裁剪区域左侧的图片宽度) / 2
+ // 翻转y轴中心点 = (超出裁剪区域下方的图片宽度 - 超出裁剪区域上方的图片宽度) / 2
+ var ox = ((offset.x + img.width - area.right) - (area.left - offset.x)) / 2;
+ var oy = ((offset.y + img.height - area.bottom) - (area.top - offset.y)) / 2;
+ changeImageRect({
+ instance: await this.getInstance(),
+ check: true,
+ x: -ox - oy,
+ y: -oy + ox
+ });
+ },
+ rotateImage90: function() {
+ this.rotateImage(90)
+ },
+ rotateImage270: function() {
+ this.rotateImage(270)
+ },
+ }
+}
\ No newline at end of file
diff --git a/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue b/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue
new file mode 100644
index 0000000..807731c
--- /dev/null
+++ b/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue
@@ -0,0 +1,790 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+
+ 重选
+
+
+ 选择图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs b/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs
new file mode 100644
index 0000000..27fbd51
--- /dev/null
+++ b/pagesb/components/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs
@@ -0,0 +1,604 @@
+/**
+ * 图片编辑器-手势监听
+ * 1. wxs 暂不支持 es6 语法
+ * 2. 支持编译到微信小程序、QQ小程序、app-vue、H5上(uni-app 2.2.5及以上版本)
+ */
+/** 图片偏移量 */
+var offset = { x: 0, y: 0 };
+/** 图片缩放比例 */
+var scale = 1;
+/** 图片最小缩放比例 */
+var minScale = 1;
+/** 图片旋转角度 */
+var rotate = 0;
+/** 触摸点 */
+var touches = [];
+/** 图片布局信息 */
+var img = {};
+/** 系统信息 */
+var sys = {};
+/** 裁剪区域布局信息 */
+var area = {};
+/** 触摸行为类型 */
+var touchType = '';
+/** 操作角的位置 */
+var activeAngle = 0;
+/** 裁剪区域布局信息偏移量 */
+var areaOffset = { left: 0, right: 0, top: 0, bottom: 0 };
+/**
+ * 计算两点间距
+ * @param {Object} touches 触摸点信息
+ */
+function getDistanceByTouches(touches) {
+ // 根据勾股定理求两点间距离
+ var a = touches[1].pageX - touches[0].pageX;
+ var b = touches[1].pageY - touches[0].pageY;
+ var c = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));
+ // 求两点间的中点坐标
+ // 1. a、b可能为负值
+ // 2. 在求a、b时,如用touches[1]减touches[0],则求中点坐标也得用touches[1]减a/2、b/2
+ // 3. 同理,在求a、b时,也可用touches[0]减touches[1],则求中点坐标也得用touches[0]减a/2、b/2
+ var x = touches[1].pageX - a / 2;
+ var y = touches[1].pageY - b / 2;
+ return { c, x, y };
+};
+/**
+ * 修正取值
+ * @param {Object} a
+ * @param {Object} b
+ * @param {Object} c
+ * @param {Object} reverse 是否反向
+ */
+function correctValue(a, b, c, reverse) {
+ return reverse ? Math.max(Math.min(a, b), c) : Math.min(Math.max(a, b), c);
+}
+
+/**
+ * 检查边界:限制 x、y 拖动范围,禁止滑出边界
+ * @param {Object} e 点坐标
+ */
+function checkRange(e) {
+ var r = rotate / 90 % 2;
+ if(r === 1) { // 因图片宽高可能不等,翻转 90° 或 270° 后图片宽高需反着计算,且左右和上下边界要根据差值做偏移
+ var o = (img.height - img.width) / 2; // 宽高差值一半
+ return {
+ x: correctValue(e.x, -img.height + o + area.width + area.left, area.left + o, img.height < area.height),
+ y: correctValue(e.y, -img.width - o + area.height + area.top, area.top - o, img.width < area.width)
+ }
+ }
+ return {
+ x: correctValue(e.x, -img.width + area.width + area.left, area.left, img.width < area.width),
+ y: correctValue(e.y, -img.height + area.height + area.top, area.top, img.height < area.height)
+ }
+};
+/**
+ * 变更图片布局信息
+ * @param {Object} e 布局信息
+ */
+function changeImageRect(e) {
+ offset.x += e.x || 0;
+ offset.y += e.y || 0;
+ var image = e.instance.selectComponent('.crop-image');
+ if(e.check && area.checkRange) { // 检查边界
+ var point = checkRange(offset);
+ if(offset.x !== point.x || offset.y !== point.y) {
+ offset = point;
+ }
+ }
+ // image.setStyle({
+ // width: img.width + 'px',
+ // height: img.height + 'px',
+ // transform: 'translate(' + offset.x + 'px, ' + offset.y + 'px) rotate(' + rotate +'deg)'
+ // });
+ var ox = (img.width - img.oldWidth) / 2;
+ var oy = (img.height - img.oldHeight) / 2;
+ image.setStyle({
+ width: img.oldWidth + 'px',
+ height: img.oldHeight + 'px',
+ transform: (img.gpu ? 'translateZ(0) ' : '') + 'translate(' + (offset.x + ox) + 'px, ' + (offset.y + oy) + 'px) rotate(' + rotate +'deg) scale(' + scale + ')'
+ });
+
+ e.instance.callMethod('dataChange', {
+ width: img.width,
+ height: img.height,
+ x: offset.x,
+ y: offset.y,
+ rotate: rotate
+ });
+};
+/**
+ * 变更裁剪区域布局信息
+ * @param {Object} e 布局信息
+ */
+function changeAreaRect(e) {
+ // 变更蒙版样式
+ var masks = e.instance.selectAllComponents('.crop-mask-block');
+ var maskStyles = [
+ {
+ left: 0,
+ width: (area.left + areaOffset.left) + 'px',
+ top: 0,
+ bottom: 0,
+ 'z-index': area.zIndex + 2
+ },
+ {
+ left: (area.right + areaOffset.right) + 'px',
+ right: 0,
+ top: 0,
+ bottom: 0,
+ 'z-index': area.zIndex + 2
+ },
+ {
+ left: (area.left + areaOffset.left) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ top: 0,
+ height: (area.top + areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 2
+ },
+ {
+ left: (area.left + areaOffset.left) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ top: (area.bottom + areaOffset.bottom) + 'px',
+ // height: (area.top - areaOffset.bottom + sys.offsetBottom) + 'px',
+ bottom: 0,
+ 'z-index': area.zIndex + 2
+ }
+ ];
+ var len = masks.length;
+ for (var i = 0; i < len; i++) {
+ masks[i].setStyle(maskStyles[i]);
+ }
+
+ // 变更边框样式
+ if(area.showBorder) {
+ var border = e.instance.selectComponent('.crop-border');
+ border.setStyle({
+ left: (area.left + areaOffset.left) + 'px',
+ top: (area.top + areaOffset.top) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ height: (area.height + areaOffset.bottom - areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 3
+ });
+ }
+
+ // 变更参考线样式
+ if(area.showGrid) {
+ var grids = e.instance.selectAllComponents('.crop-grid');
+ var gridStyles = [
+ {
+ 'border-width': '1px 0 0 0',
+ left: (area.left + areaOffset.left) + 'px',
+ right: (area.right + areaOffset.right) + 'px',
+ top: (area.top + areaOffset.top + (area.height + areaOffset.bottom - areaOffset.top) / 3 - 0.5) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '1px 0 0 0',
+ left: (area.left + areaOffset.left) + 'px',
+ right: (area.right + areaOffset.right) + 'px',
+ top: (area.top + areaOffset.top + (area.height + areaOffset.bottom - areaOffset.top) * 2 / 3 - 0.5) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '0 1px 0 0',
+ top: (area.top + areaOffset.top) + 'px',
+ bottom: (area.bottom + areaOffset.bottom) + 'px',
+ left: (area.left + areaOffset.left + (area.width + areaOffset.right - areaOffset.left) / 3 - 0.5) + 'px',
+ height: (area.height + areaOffset.bottom - areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '0 1px 0 0',
+ top: (area.top + areaOffset.top) + 'px',
+ bottom: (area.bottom + areaOffset.bottom) + 'px',
+ left: (area.left + areaOffset.left + (area.width + areaOffset.right - areaOffset.left) * 2 / 3 - 0.5) + 'px',
+ height: (area.height + areaOffset.bottom - areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 3
+ }
+ ];
+ var len = grids.length;
+ for (var i = 0; i < len; i++) {
+ grids[i].setStyle(gridStyles[i]);
+ }
+ }
+
+ // 变更四个伸缩角样式
+ if(area.showAngle) {
+ var angles = e.instance.selectAllComponents('.crop-angle');
+ var angleStyles = [
+ {
+ 'border-width': area.angleBorderWidth + 'px 0 0 ' + area.angleBorderWidth + 'px',
+ left: (area.left + areaOffset.left - area.angleBorderWidth) + 'px',
+ top: (area.top + areaOffset.top - area.angleBorderWidth) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px 0 0',
+ left: (area.right + areaOffset.right - area.angleSize) + 'px',
+ top: (area.top + areaOffset.top - area.angleBorderWidth) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '0 0 ' + area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px',
+ left: (area.left + areaOffset.left - area.angleBorderWidth) + 'px',
+ top: (area.bottom + areaOffset.bottom - area.angleSize) + 'px',
+ 'z-index': area.zIndex + 3
+ },
+ {
+ 'border-width': '0 ' + area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px 0',
+ left: (area.right + areaOffset.right - area.angleSize) + 'px',
+ top: (area.bottom + areaOffset.bottom - area.angleSize) + 'px',
+ 'z-index': area.zIndex + 3
+ }
+ ];
+ var len = angles.length;
+ for (var i = 0; i < len; i++) {
+ angles[i].setStyle(angleStyles[i]);
+ }
+ }
+
+ // 变更圆角样式
+ if(area.radius > 0) {
+ var circleBox = e.instance.selectComponent('.crop-circle-box');
+ var circle = e.instance.selectComponent('.crop-circle');
+ var radius = area.radius;
+ if(area.width === area.height && area.radius >= area.width / 2) { // 圆形
+ radius = (area.width / 2);
+ } else { // 圆角矩形
+ if(area.width !== area.height) { // 限制圆角半径不能超过短边的一半
+ radius = Math.min(area.width / 2, area.height / 2, radius);
+ }
+ }
+ circleBox.setStyle({
+ left: (area.left + areaOffset.left) + 'px',
+ top: (area.top + areaOffset.top) + 'px',
+ width: (area.width + areaOffset.right - areaOffset.left) + 'px',
+ height: (area.height + areaOffset.bottom - areaOffset.top) + 'px',
+ 'z-index': area.zIndex + 2
+ });
+ circle.setStyle({
+ 'box-shadow': '0 0 0 ' + Math.max(area.width, area.height) + 'px rgba(51, 51, 51, 0.8)',
+ 'border-radius': radius + 'px'
+ });
+ }
+};
+/**
+ * 缩放图片
+ * @param {Object} e 布局信息
+ */
+function scaleImage(e) {
+ var last = scale;
+ scale = Math.min(Math.max(e.scale + scale, minScale), img.maxScale);
+ if(last !== scale) {
+ img.width = img.oldWidth * scale;
+ img.height = img.oldHeight * scale;
+ // 参考问题:有一个长4000px、宽4000px的四方形ABCD,A点的坐标固定在(-2000,-2000),
+ // 该四边形上有一个点E,坐标为(-100,-300),将该四方形复制一份并缩小到90%后,
+ // 新四边形的A点坐标为多少时可使新四边形的E点与原四边形的E点重合?
+ // 预期效果:从图中选取某点(参照物)为中心点进行缩放,缩放时无论图像怎么变化,该点位置始终固定不变
+ // 计算方法:以相同起点先计算缩放前后两点间的距离,再加上原图像偏移量即可
+ e.x = (e.x - offset.x) * (1 - scale / last);
+ e.y = (e.y - offset.y) * (1 - scale / last);
+ changeImageRect(e);
+ return true;
+ }
+ return false;
+};
+/**
+ * 获取触摸点在哪个角
+ * @param {number} x 触摸点x轴坐标
+ * @param {number} y 触摸点y轴坐标
+ * @return {number} 角的位置:0=无;1=左上;2=右上;3=左下;4=右下;
+ */
+function getToucheAngle(x, y) {
+ // console.log('getToucheAngle', x, y, JSON.stringify(area))
+ var o = area.angleBorderWidth; // 需扩大触发范围则把 o 值加大即可
+ if(y >= area.top - o && y <= area.top + area.angleSize + o) {
+ if(x >= area.left - o && x <= area.left + area.angleSize + o) {
+ return 1; // 左上角
+ } else if(x >= area.right - area.angleSize - o && x <= area.right + o) {
+ return 2; // 右上角
+ }
+ } else if(y >= area.bottom - area.angleSize - o && y <= area.bottom + o) {
+ if(x >= area.left - o && x <= area.left + area.angleSize + o) {
+ return 3; // 左下角
+ } else if(x >= area.right - area.angleSize - o && x <= area.right + o) {
+ return 4; // 右下角
+ }
+ }
+ return 0; // 无触摸到角
+};
+/**
+ * 重置数据
+ */
+function resetData() {
+ offset = { x: 0, y: 0 };
+ scale = 1;
+ minScale = img.minScale;
+ rotate = 0;
+};
+/**
+* 顺时针翻转图片90°
+* @param {Object} e 事件对象
+* @param {Object} o 组件实例对象
+*/
+function rotateImage(e, o, r) {
+ rotate = (rotate + r) % 360;
+
+ if(img.minScale >= 1) {
+ // 因图片宽高可能不等,翻转后图片宽高需足够填满裁剪区域
+ minScale = 1;
+ if(img.width < area.height) {
+ minScale = area.height / img.oldWidth;
+ } else if(img.height < area.width) {
+ minScale = (area.width / img.oldHeight)
+ }
+ if(minScale !== 1) {
+ scaleImage({
+ instance: o,
+ scale: minScale - scale,
+ x: sys.windowWidth / 2,
+ y: (sys.windowHeight - sys.offsetBottom) / 2
+ });
+ }
+ }
+
+ // 由于拖动画布后会导致图片位置偏移,翻转时的旋转中心点需是图片区域+偏移区域的中心点
+ // 翻转x轴中心点 = (超出裁剪区域右侧的图片宽度 - 超出裁剪区域左侧的图片宽度) / 2
+ // 翻转y轴中心点 = (超出裁剪区域下方的图片宽度 - 超出裁剪区域上方的图片宽度) / 2
+ var ox = ((offset.x + img.width - area.right) - (area.left - offset.x)) / 2;
+ var oy = ((offset.y + img.height - area.bottom) - (area.top - offset.y)) / 2;
+ changeImageRect({
+ instance: o,
+ check: true,
+ x: -ox - oy,
+ y: -oy + ox
+ });
+};
+module.exports = {
+ /**
+ * 初始化:观察数据变更
+ * @param {Object} newVal 新数据
+ * @param {Object} oldVal 旧数据
+ * @param {Object} o 组件实例对象
+ */
+ initObserver: function(newVal, oldVal, o, i) {
+ if(newVal) {
+ img = newVal.img;
+ sys = newVal.sys;
+ area = newVal.area;
+ minScale = img.minScale;
+ resetData();
+ img.src && changeImageRect({
+ instance: o,
+ x: (sys.windowWidth - img.width) / 2,
+ y: (sys.windowHeight - sys.offsetBottom - img.height) / 2
+ });
+ changeAreaRect({
+ instance: o
+ });
+ // console.log('initRect', JSON.stringify(newVal))
+ }
+ },
+ /**
+ * 鼠标滚轮滚动
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ mousewheel: function(e, o) {
+ if(!img.src) return;
+ scaleImage({
+ instance: o,
+ check: true,
+ // 鼠标向上滚动时,deltaY 固定 -100,鼠标向下滚动时,deltaY 固定 100
+ scale: e.detail.deltaY > 0 ? -0.05 : 0.05,
+ x: e.touches[0].pageX,
+ y: e.touches[0].pageY
+ });
+ },
+ /**
+ * 触摸开始
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ touchstart: function(e, o) {
+ if(!img.src) return;
+ touches = e.touches;
+ activeAngle = area.showAngle ? getToucheAngle(touches[0].pageX, touches[0].pageY) : 0;
+ if(touches.length === 1 && activeAngle !== 0) {
+ touchType = 'stretch'; // 伸缩裁剪区域
+ } else {
+ touchType = '';
+ }
+ // console.log('touchstart', JSON.stringify(e), activeAngle)
+ },
+ /**
+ * 触摸移动
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ touchmove: function(e, o) {
+ if(!img.src) return;
+ // console.log('touchmove', JSON.stringify(e), JSON.stringify(o))
+ if(touchType === 'stretch') { // 触摸四个角进行拉伸
+ var point = e.touches[0];
+ var start = touches[0];
+ var x = point.pageX - start.pageX;
+ var y = point.pageY - start.pageY;
+ if(x !== 0 || y !== 0) {
+ var maxX = area.width * (1 - area.minScale);
+ var maxY = area.height * (1 - area.minScale);
+ // console.log(x, y, maxX, maxY, offset, area)
+ touches[0] = point;
+ switch(activeAngle) {
+ case 1: // 左上角
+ x += areaOffset.left;
+ y += areaOffset.top;
+ if(x >= 0 && y >= 0) { // 有效滑动
+ var max = minScale < 1 && area.checkRange && ((offset.x > 0 && offset.x >= area.left) || (offset.y > 0 && offset.y >= area.top))
+ ? Math.min(offset.y - area.top, offset.x - area.left)
+ : false;
+ if(x > y) { // 以x轴滑动距离为缩放基准
+ if(typeof max === 'number') maxX = max;
+ if(x > maxX) x = maxX;
+ y = x * area.height / area.width;
+ } else { // 以y轴滑动距离为缩放基准
+ if(typeof max === 'number') maxY = max;
+ if(y > maxY) y = maxY;
+ x = y * area.width / area.height;
+ }
+ areaOffset.left = x;
+ areaOffset.top = y;
+ }
+ break;
+ case 2: // 右上角
+ x += areaOffset.right;
+ y += areaOffset.top;
+ if(x <= 0 && y >= 0) { // 有效滑动
+ var max = minScale < 1 && area.checkRange && ((offset.x > 0 && offset.x + img.width <= area.right) || (offset.y > 0 && offset.y >= area.top))
+ ? Math.min(offset.y - area.top, area.right - offset.x - img.width)
+ : false;
+ if(-x > y) { // 以x轴滑动距离为缩放基准
+ if(typeof max === 'number') maxX = max;
+ if(-x > maxX) x = -maxX;
+ y = -x * area.height / area.width;
+ } else { // 以y轴滑动距离为缩放基准
+ if(typeof max === 'number') maxY = max;
+ if(y > maxY) y = maxY;
+ x = -y * area.width / area.height;
+ }
+ areaOffset.right = x;
+ areaOffset.top = y;
+ }
+ break;
+ case 3: // 左下角
+ x += areaOffset.left;
+ y += areaOffset.bottom;
+ if(x >= 0 && y <= 0) { // 有效滑动
+ var max = minScale < 1 && area.checkRange && ((offset.x > 0 && offset.x >= area.left) || (offset.y > 0 && offset.y + img.height <= area.bottom))
+ ? Math.min(area.bottom - offset.y - img.height, offset.x - area.left)
+ : false;
+ if(x > -y) { // 以x轴滑动距离为缩放基准
+ if(typeof max === 'number') maxX = max;
+ if(x > maxX) x = maxX;
+ y = -x * area.height / area.width;
+ } else { // 以y轴滑动距离为缩放基准
+ if(typeof max === 'number') maxY = max;
+ if(-y > maxY) y = -maxY;
+ x = -y * area.width / area.height;
+ }
+ areaOffset.left = x;
+ areaOffset.bottom = y;
+ }
+ break;
+ case 4: // 右下角
+ x += areaOffset.right;
+ y += areaOffset.bottom;
+ if(x <= 0 && y <= 0) { // 有效滑动
+ var max = minScale < 1 && area.checkRange && ((offset.x > 0 && offset.x + img.width <= area.right) || (offset.y > 0 && offset.y + img.height <= area.bottom))
+ ? Math.min(area.bottom - offset.y - img.height, area.right - offset.x - img.width)
+ : false;
+ if(-x > -y) { // 以x轴滑动距离为缩放基准
+ if(typeof max === 'number') maxX = max;
+ if(-x > maxX) x = -maxX;
+ y = x * area.height / area.width;
+ } else { // 以y轴滑动距离为缩放基准
+ if(typeof max === 'number') maxY = max;
+ if(-y > maxY) y = -maxY;
+ x = y * area.width / area.height;
+ }
+ areaOffset.right = x;
+ areaOffset.bottom = y;
+ }
+ break;
+ }
+ // console.log(x, y, JSON.stringify(areaOffset))
+ changeAreaRect({
+ instance: o,
+ });
+ // this.draw();
+ }
+ } else if (e.touches.length == 2) { // 双点触摸缩放
+ var start = getDistanceByTouches(touches);
+ var end = getDistanceByTouches(e.touches);
+ scaleImage({
+ instance: o,
+ check: !area.bounce,
+ scale: (end.c - start.c) / 100,
+ x: end.x,
+ y: end.y
+ });
+ touchType = 'scale';
+ } else if(touchType === 'scale') {// 从双点触摸变成单点触摸 / 从缩放变成拖动
+ touchType = 'move';
+ } else {
+ changeImageRect({
+ instance: o,
+ check: !area.bounce,
+ x: e.touches[0].pageX - touches[0].pageX,
+ y: e.touches[0].pageY - touches[0].pageY
+ });
+ touchType = 'move';
+ }
+ touches = e.touches;
+ },
+ /**
+ * 触摸结束
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ touchend: function(e, o) {
+ if(!img.src) return;
+ if(touchType === 'stretch') { // 拉伸裁剪区域的四个角缩放
+ // 裁剪区域宽度被缩放到多少
+ var left = areaOffset.left;
+ var right = areaOffset.right;
+ var top = areaOffset.top;
+ var bottom = areaOffset.bottom;
+ var w = area.width + right - left;
+ var h = area.height + bottom - top;
+ // 图像放大倍数
+ var p = scale * (area.width / w) - scale;
+ // 复原裁剪区域
+ areaOffset = { left: 0, right: 0, top: 0, bottom: 0 };
+ changeAreaRect({
+ instance: o,
+ });
+ scaleImage({
+ instance: o,
+ scale: p,
+ x: area.left + left + (1 === activeAngle || 3 === activeAngle ? w : 0),
+ y: area.top + top + (1 === activeAngle || 2 === activeAngle ? h : 0)
+ });
+ } else if (area.bounce) { // 检查边界并矫正,实现拖动到边界时有回弹效果
+ changeImageRect({
+ instance: o,
+ check: true
+ });
+ }
+ },
+ /**
+ * 顺时针翻转图片90°
+ * @param {Object} e 事件对象
+ * @param {Object} o 组件实例对象
+ */
+ rotateImage: function(e, o) {
+ rotateImage(e, o, 90);
+ },
+ rotateImage90: function(e, o) {
+ rotateImage(e, o, 90)
+ },
+ rotateImage270: function(e, o) {
+ rotateImage(e, o, 270)
+ },
+ // 此处只用于对齐其他平台端的样式参数,防止异常,无作用
+ imageStyles: '',
+ maskStylesList: ['', '', '', ''],
+ borderStyles: '',
+ gridStylesList: ['', '', '', ''],
+ angleStylesList: ['', '', '', ''],
+ circleBoxStyles: '',
+ circleStyles: '',
+}
\ No newline at end of file
diff --git a/pagesb/components/qf-image-cropper/package.json b/pagesb/components/qf-image-cropper/package.json
new file mode 100644
index 0000000..e945454
--- /dev/null
+++ b/pagesb/components/qf-image-cropper/package.json
@@ -0,0 +1,81 @@
+{
+ "id": "qf-image-cropper",
+ "displayName": "图片裁剪插件",
+ "version": "2.2.4",
+ "description": "图片裁剪插件,支持自定义尺寸、定点等比例缩放、拖动、图片翻转、剪切圆形/圆角图片、定制样式,功能多性能高体验好注释全。",
+ "keywords": [
+ "qf-image-cropper",
+ "图片裁剪",
+ "图片编辑",
+ "头像裁剪",
+ "小程序"
+],
+ "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": [],
+ "encrypt": [],
+ "platforms": {
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "u"
+ },
+ "H5-pc": {
+ "Chrome": "u",
+ "IE": "u",
+ "Edge": "u",
+ "Firefox": "u",
+ "Safari": "u"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "n",
+ "百度": "n",
+ "字节跳动": "n",
+ "QQ": "u",
+ "钉钉": "n",
+ "快手": "n",
+ "飞书": "n",
+ "京东": "n"
+ },
+ "快应用": {
+ "华为": "n",
+ "联盟": "n"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/pagesb/components/qf-image-cropper/readme.md b/pagesb/components/qf-image-cropper/readme.md
new file mode 100644
index 0000000..0c62aac
--- /dev/null
+++ b/pagesb/components/qf-image-cropper/readme.md
@@ -0,0 +1,95 @@
+# qf-image-cropper
+## 图片裁剪插件
+uniapp微信小程序图片裁剪插件,支持自定义尺寸、定点等比例缩放、拖动、图片翻转、剪切圆形/圆角图片、定制样式,功能多性能高体验好注释全。
+
+### 平台支持:
+1. 支持微信小程序:移动端、PC端、开发者工具
+2. 支持H5平台(2.1.0版本起)
+3. 支持APP平台(2.1.5版本起):Android、IOS
+4. 其他平台暂未测试兼容性未知
+
+### 支持功能:
+1. 自定义裁剪尺寸
+2. 定点等比例缩放:移动端以双指触摸中心点为缩放中心点,PC端以鼠标所在点为缩放中心点
+3. 自由拖动:支持限制滑出边界,也支持回弹效果(滑动时可滑出边界,释放时回弹到边界)
+4. 图片翻转:在裁剪尺寸非 1:1 的情况下,翻转时宽高无法铺满裁剪区域时,图片会自动放大到合适尺寸
+5. 裁剪生成新图片
+6. 本地选择图片
+7. 可定制样式:可自由选择是否渲染裁剪边框、可伸缩裁剪顶角、参考线
+8. 裁剪圆角图片:圆形、圆角矩形
+
+### 属性说明
+| 属性名 | 类型 | 默认值 | 说明 |
+|:---|:---|:---|:---|
+| src | String | | 图片资源地址 |
+| width | Number | 300 | 裁剪宽度 |
+| height | Number | 300 | 裁剪高度 |
+| showBorder | Boolean | true | 是否绘制裁剪区域边框 |
+| showGrid | Boolean | true | 是否绘制裁剪区域网格参考线 |
+| showAngle | Boolean | true | 是否展示四个支持伸缩的角 |
+| areaScale | Number | 0.3 | 裁剪区域最小缩放倍数 |
+| minScale | Number | 1 | 图片最小缩放倍数 |
+| maxScale | Number | 5 | 图片最大缩放倍数 |
+| checkRange | Boolean | true | 检查图片位置是否超出裁剪边界,如果超出则会矫正位置 |
+| backgroundColor | String | | 生成图片背景色:如果裁剪区域没有完全包含在图片中时,不设置该属性则生成图片存在一定的透明块 |
+| bounce | Boolean | true | 是否有回弹效果:当 checkRange 为 true 时有效,拖动时可以拖出边界,释放时会弹回边界 |
+| rotatable | Boolean | true | 是否支持翻转 |
+| reverseRotatable | Boolean | false | 是否支持逆向翻转 |
+| choosable | Boolean | true | 是否支持从本地选择素材 |
+| gpu | Boolean | false | 是否开启硬件加速,图片缩放过程中如果出现元素的“留影”或“重影”效果,可通过该方式解决或减轻这一问题 |
+| angleSize | Number | 20 | 四个角尺寸,单位px |
+| angleBorderWidth | Number | 2 | 四个角边框宽度,单位px |
+| zIndex | Number/String | | 调整组件层级 |
+| radius | Number | | 裁剪图片圆角半径,单位px |
+| fileType | String | png | 生成文件的类型,只支持 'jpg' 或 'png'。默认为 'png' |
+| delay | Number | 1000 | 图片从绘制到生成所需时间,单位ms
微信小程序平台使用 `Canvas 2D` 绘制时有效
如绘制大图或出现裁剪图片空白等情况应适当调大该值,因 `Canvas 2d` 采用同步绘制,需自己把控绘制完成时间 |
+| navigation | Boolean | true | 页面是否是原生标题栏:
H5平台当 showAngle 为 true 时,使用插件的页面在 `page.json` 中配置了 `"navigationStyle": "custom"` 时,必须将此值设为 false ,否则四个可拉伸角的触发位置会有偏差。
注:因H5平台的窗口高度是包含标题栏的,而屏幕触摸点的坐标是不包含的 |
+| @crop | EventHandle | | 剪裁完成后触发,event = { tempFilePath }。在H5平台下,tempFilePath 为 base64 |
+
+### 基本用法
+```
+
+
+
+
+
+
+
+```
+通过ref组件实例可在进入页面后直接打开相册选择图片
+```
+mounted() {
+ this.$refs.qfImageCropper.chooseImage({ sourceType: ['album'] });
+}
+```
+### 使用说明
+1.建议在`pages.json`中将引用插件的页面添加一下配置禁止下拉刷新和禁止页面滑动,防止出现性能或页面抖动等问题。
+```
+{
+ "enablePullDownRefresh": false,
+ "disableScroll": true
+}
+```
+2.建议使用本插件不要设置过大宽高的目标图片尺寸,建议1365x1365以内,否则可能会导致如下问题:
+```
+1.界面卡顿,内存占用过高
+2.生成图片失真(模糊)
+3.确定裁剪后一直显示 `裁剪中...`,该问题是由 `uni.canvasToTempFilePath` 无法回调导致,不同平台不同设备限制可能有所不同。
+```
+3.如裁剪后的图片存在偏移的问题,请检查是否受自己项目中父组件或全局样式影响。
+4.src属性设置网络图片时,图片资源必须是能触发 `getImageInfo` API 的 success 回调才可用于插件裁剪。因此小程序平台获取网络图片信息需先配置download域名白名单才能生效。
\ No newline at end of file
diff --git a/pagesb/flashSale/index.vue b/pagesb/flashSale/index.vue
new file mode 100644
index 0000000..fee5f8d
--- /dev/null
+++ b/pagesb/flashSale/index.vue
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.FlashSale') }}
+
+
+
+ {{$t('common.SwitchRegion')}}
+
+
+
+
+
+
+
+
+ {{$t('common.Countdown')}}
+
+
+ {{ countDown?.formatted?.value }}
+
+
+
+
+
+
+ {{ $t("discount",{discount:item.discount}) }}
+
+
+ {{item.siteName}}
+
+
+
+ {{item.unitTypeName}}
+
+
+ [ {{ item.lockerName }} ]
+
+
+
+
+ {{$t('site.ReferenceVolume')}}:{{item.volume}}m³
+
+
+
+
+
+
+ {{currency}} {{item.flashSalePrice}}
+
+
+ {{currency}} {{item.price}}
+
+
+
+
+
+
+
+
+
+ {{ $t('common.noData') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/houseKey/index.vue b/pagesb/houseKey/index.vue
new file mode 100644
index 0000000..af4b327
--- /dev/null
+++ b/pagesb/houseKey/index.vue
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('houseKey.overdue') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/initLock/index.vue b/pagesb/initLock/index.vue
new file mode 100644
index 0000000..1a5d18b
--- /dev/null
+++ b/pagesb/initLock/index.vue
@@ -0,0 +1,728 @@
+
+
+
+
+
+
+
+
+ {{ state.lockInfo.deviceName || state.lockInfo.MAC }}
+
+
+
+
+ 该智能锁已初始化成功
+
+
+
+ WiFi
+
+
+
+
+
+
+
+ 添加锁时,手机必须在锁旁边
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 配置网络
+
+ 不支持 5G WiFi 网络,请选择 2.4G WiFi 网络进行配置
+
+ WiFi 名称
+ {{ wifiData.selectWifi.SSID }}
+
+
+
+ WiFi 密码
+
+
+ 确定
+
+
+
+
+
+
+ 取消
+ 选择网络
+ 搜索
+
+
+
+
+
+
+ {{ item.SSID }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/initLock/lockInitApi.js b/pagesb/initLock/lockInitApi.js
new file mode 100644
index 0000000..87233a4
--- /dev/null
+++ b/pagesb/initLock/lockInitApi.js
@@ -0,0 +1,158 @@
+const getResponseData = (response) => {
+ switch (response.type) {
+ case 0:
+ return response["data"]; // 操作成功
+ default: {
+ uni.showToast({
+ icon: "none",
+ title: response.errorMsg,
+ });
+ return null;
+ }
+ }
+};
+
+export const ttLockRequest = (url, method, params) => {
+ return new Promise(resolve => {
+ uni.request({
+ url: `https://cnapi.ttlock.com${url}`,
+ header: {
+ "content-type": "application/x-www-form-urlencoded",
+ },
+ data: params,
+ method: method,
+ success: (response) => {
+ let result = null;
+ switch (response.statusCode) {
+ case 200:
+ if (!!response.data && typeof response.data["errcode"] === "undefined") {
+ result = getResponseData({
+ data: response.data,
+ errorCode: -2,
+ errorMsg: "操作成功",
+ type: 0,
+ });
+ } else {
+ let errMsg = response.data["errcode"] === 0 ? "操作成功" : response.data["errmsg"];
+ result = getResponseData({
+ data: response.data,
+ errorCode: -2,
+ errorMsg: errMsg,
+ type: 0,
+ });
+ }
+ break;
+ default:
+ result = getResponseData({
+ errorCode: -2,
+ errorMsg: `服务器请求失败,状态码:${response.statusCode}`,
+ type: 2,
+ });
+ break;
+ }
+ resolve(result);
+ },
+ fail: (err) => {
+ let result = getResponseData({
+ errorCode: -1,
+ errorMsg: "服务器请求失败,请检查服务器域名是否已被列入白名单",
+ type: 3,
+ });
+ resolve(result);
+ },
+ });
+ });
+};
+
+export const ttLockRequest2 = (url, method, params) => {
+ return new Promise(resolve => {
+ uni.request({
+ url: `https://api.ttlock.com${url}`,
+ header: {
+ "content-type": "application/x-www-form-urlencoded",
+ },
+ data: _makeParams(params),
+ method: method,
+ dataType: "json",
+ success: (response) => {
+ let result = null;
+ switch (response.statusCode) {
+ case 200:
+ if (!!response.data && typeof response.data["errcode"] === "undefined") {
+ result = getResponseData({
+ data: response.data,
+ errorCode: -2,
+ errorMsg: "操作成功",
+ type: 0,
+ });
+ } else {
+ let errMsg = response.data["errcode"] === 0 ? "操作成功" : response.data["errmsg"];
+ result = getResponseData({
+ data: response.data,
+ errorCode: -2,
+ errorMsg: errMsg,
+ type: 0,
+ });
+ }
+ break;
+ default:
+ result = getResponseData({
+ errorCode: -2,
+ errorMsg: `服务器请求失败,状态码:${response.statusCode}`,
+ type: 2,
+ });
+ break;
+ }
+ resolve(result);
+ },
+ fail: (err) => {
+ let result = getResponseData({
+ errorCode: -1,
+ errorMsg: "服务器请求失败,请检查服务器域名是否已被列入白名单",
+ type: 3,
+ });
+ resolve(result);
+ },
+ });
+ });
+};
+
+function _generateParams(params) {
+ if (!params) return {};
+ for (let key of Object.keys(params)) {
+ if (params[key] === null) {
+ params[key] = undefined;
+ continue;
+ }
+ const type = typeof params[key];
+ switch (type) {
+ case "function":
+ {
+ params[key] = undefined;
+ }
+ break;
+ case "object":
+ {
+ params[key] = JSON.stringify(params[key]);
+ }
+ break;
+ case "number":
+ case "string":
+ case "boolean":
+ default:
+ break;
+ }
+ }
+ return JSON.parse(JSON.stringify(params));
+}
+
+function _makeParams(params) {
+ return JSON.parse(
+ JSON.stringify({
+ ..._generateParams(params),
+ clientId: "7946f0d923934a61baefb3303de4d132",
+ accessToken: uni.getStorageSync("tt_access_token"),
+ date: Date.now(),
+ })
+ );
+}
\ No newline at end of file
diff --git a/pagesb/invitation/index.vue b/pagesb/invitation/index.vue
new file mode 100644
index 0000000..9d24eeb
--- /dev/null
+++ b/pagesb/invitation/index.vue
@@ -0,0 +1,394 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("referrerInfo.loadQrCode") }}
+
+
+
+
+
+
+
+ {{ $t("referrerInfo.forwardInvitation") }}
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/invoice/index.vue b/pagesb/invoice/index.vue
new file mode 100644
index 0000000..3cdb0f8
--- /dev/null
+++ b/pagesb/invoice/index.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+ {{ $t("invoice.valid") }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("invoice.pay") }}: {{ item.paymentTime }}
+ {{ $t("invoice.site") }}: {{ item.siteName }}
+ {{ $t("invoice.type") }}: {{ item.unitTypeName }}
+ {{ $t("invoice.rent") }}:
+ {{ item.termOfLease?.match(/\d{4}-\d{2}-\d{2}/g)[0] }} - {{
+ item.termOfLease?.match(/\d{4}-\d{2}-\d{2}/g)[1]
+ }}
+
+
+ {{ item.lockerName }}
+ {{ currency }}{{ item.money }}
+
+
+
+
+
+
+
+
+ {{ $t("invoice.order", { number: state.checkList.length, money: checkRowMoney }) }}
+ {{ $t("invoice.tip") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/invoiceApply/index.vue b/pagesb/invoiceApply/index.vue
new file mode 100644
index 0000000..d0bc9bb
--- /dev/null
+++ b/pagesb/invoiceApply/index.vue
@@ -0,0 +1,582 @@
+
+
+
+
+
+
+
+
+
+ * 发票类型 INVOICE TYPE
+
+
+
+
+
+
+
+
+
+
+
+
+ * 抬头类型 HEADER TYPE
+
+
+
+
+
+
+
+
+
+
+
+ * 发票抬头 INVOICE TITLE
+
+
+
+
+
+
+ 抬头簿
+
+
+
+
+
+
+
+ {{ state.formData.titleType == 2 ? '*' : '-' }} 纳税人识别号 IDENTIFICATION NUMBER
+
+
+
+
+
+
+
+
+
+ - 更多信息 REMARKS
+
+
+ {{ state.expand?'点击收起信息':'展开可填写购买方信息、备注等。' }}
+
+
+
+
+
+
+
+
+
+ - 银行账号 ACCOUNT NUMBER
+
+
+
+
+
+
+
+
+ - 开户银行 ACCOUNT OPENING
+
+
+
+
+
+
+
+
+ - 公司地址 ADDRESS
+
+
+
+
+
+
+
+
+ - 公司电话 PHONE NUMBER
+
+
+
+
+
+
+
+
+ * 收票邮箱 RECEIVING INFORMATION
+
+
+ * 收票邮箱 EMAIL
+
+
+
+
+
+
+
+
+
+ - 备注信息 REMARKS
+
+
+
+
+
+
+
+
+ - 发票金额 AMOUNT
+
+
+ {{ currency }} {{ state.formData.amount }}
+
+
+
+
+
+
+
+
+ 根据相关政策规定,消费环节汇总各种形式的券、积分等金额不支持开票。
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pagesb/invoiceApplyforRecord/index.vue b/pagesb/invoiceApplyforRecord/index.vue
new file mode 100644
index 0000000..000b487
--- /dev/null
+++ b/pagesb/invoiceApplyforRecord/index.vue
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t("invoice.serial") }}: {{ item.id }}
+ {{ $t("invoice.time") }}: {{ item.applicationTime }}
+ {{ $t("invoice.status") }}: {{ auditOption[item.audit] }}
+ {{ $t("invoice.unit") }}: {{ item.lockerNames?.length ? item.lockerNames.join("、") : "无"}}
+
+ {{ $t("common.note") }}: {{ item.rejectRemarks}}
+
+
+
+ {{ currency }}{{ item.money }}
+
+
+
+
+
+
+ {{ $t('common.noData') }}
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/latestEvents/index.vue b/pagesb/latestEvents/index.vue
new file mode 100644
index 0000000..33142b4
--- /dev/null
+++ b/pagesb/latestEvents/index.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ {{ item.viceTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 抱歉,暂无活动,敬请关注。
+ SORRY,THERE ARE NO EVENTS,STAY TUNED PLEASE.
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/maskUser/index.vue b/pagesb/maskUser/index.vue
new file mode 100644
index 0000000..14857b8
--- /dev/null
+++ b/pagesb/maskUser/index.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+ 访问受限
+ 您的账户已被限制访问
+
+
+
+
+
+
+
diff --git a/pagesb/pointsMall/index.vue b/pagesb/pointsMall/index.vue
new file mode 100644
index 0000000..16bc81d
--- /dev/null
+++ b/pagesb/pointsMall/index.vue
@@ -0,0 +1,522 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('pointsMall.myPoints') }}
+
+ {{ userInfo.points }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+ {{ $t('pointsMall.stock') }}:{{ item.stock }}
+
+
+ {{ item.desc }}
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ $t('pointsMall.exchangeConfirmTip').replace('{points}', currentNeedPoints)
+ }}
+
+
+
+
+
+ {{ currentGoods.name }}
+
+ {{ currentNeedPoints }} {{ $t('pointsMall.pointsUnit') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('pointsMall.successTip') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('pointsMall.noExchangeRecord') }}
+
+
+
+
+
+
+ {{ r.giftName || r.name || '-' }}
+
+
+
+ {{ r.exchangeTime?.substring(0, 10) }}
+
+
+
+
+
+ {{ recordMoreLoading ? $t('common.loading') : $t('common.loadMore') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/referrerInfo/index.vue b/pagesb/referrerInfo/index.vue
new file mode 100644
index 0000000..f504cf7
--- /dev/null
+++ b/pagesb/referrerInfo/index.vue
@@ -0,0 +1,258 @@
+
+
+
+
+
+ {{ $t("person.referrerInfo") }}
+
+
+ * {{ $t("referrerInfo.company") }}
+
+
+
+
+
+
+
+
+ * {{ $t("referrerInfo.branch") }}
+
+
+
+
+
+
+
+
+ - {{ $t("referrerInfo.commission") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("referrerInfo.inviteRegister") }}
+ {{ $t("referrerInfo.inviteRecord") }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/reserve/index.vue b/pagesb/reserve/index.vue
new file mode 100644
index 0000000..baee6bf
--- /dev/null
+++ b/pagesb/reserve/index.vue
@@ -0,0 +1,530 @@
+
+
+
+
+
+
+
+
+
+ * {{ $t("reserve.FULLNAME") }}
+
+
+
+
+
+
+
+
+ * {{ $t("reserve.REGION") }}
+
+
+
+
+
+
+
+
+
+ * {{ $t("reserve.TYPE") }}
+
+
+
+
+
+
+
+
+
+
+
+
+ * {{ $t("reserve.PHONE NUMBER") }}
+
+
+
+
+
+
+
+
+
+
+
+ * {{ $t("common.Requirement")}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/unittypeDetail/index.vue b/pagesb/unittypeDetail/index.vue
new file mode 100644
index 0000000..da9fbe8
--- /dev/null
+++ b/pagesb/unittypeDetail/index.vue
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+
+ {{ unitTypeData[state.active]?.name }}
+
+
+ {{ $t("detail.size") }}: {{
+ unitTypeData[state.active]?.volumeRange
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("unitTypeDetail.oneMonth") }}:
+
+
+
+
+
+
+
+
+
+ {{ $t("unitTypeDetail.reference") }}:{{ unitTypeData[state.active]?.description }}
+
+
+
+
+
+
+
+
+
+ {{ $t("unitTypeDetail.discount") }}:
+ {{
+ $t("detail.discountOff", {
+ month: 24,
+ percent: 100 - 0.6 * 100,
+ discount: (0.6 * 100) / 10,
+ })
+ }}
+ {{
+ $t("detail.discountOff", {
+ month: 12,
+ percent: 100 - 0.7 * 100,
+ discount: (0.7 * 100) / 10,
+ })
+ }}
+ {{
+ $t("detail.discountOff", {
+ month: 6,
+ percent: 100 - 0.8 * 100,
+ discount: (0.8 * 100) / 10,
+ })
+ }}
+ {{
+ $t("detail.discountOff", {
+ month: 3,
+ percent: 100 - 0.9 * 100,
+ discount: (0.9 * 100) / 10,
+ })
+ }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/userguide/index.vue b/pagesb/userguide/index.vue
new file mode 100644
index 0000000..513f932
--- /dev/null
+++ b/pagesb/userguide/index.vue
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+ 常见问题
+
+
+
+
+
+ {{ item.title }}
+ >
+
+
+
+
+ {{ item2.expend ? "—" : "+" }}
+ {{ item2.text }}
+
+
+
+ {{ item3 }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/validationInfo/index.vue b/pagesb/validationInfo/index.vue
new file mode 100644
index 0000000..5ff74d9
--- /dev/null
+++ b/pagesb/validationInfo/index.vue
@@ -0,0 +1,618 @@
+
+
+
+
+
+
+ 实名验证
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("verification.vailFail") }}
+
+
+ {{ $t("verification.vailSuccess") }}
+
+
+
+
+ {{ state.formData.certificateStatus1 == 1 ? $t("common.verifyInfo") :
+ $t("common.saveInfo") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pagesb/videoTutorial/index.vue b/pagesb/videoTutorial/index.vue
new file mode 100644
index 0000000..78a8050
--- /dev/null
+++ b/pagesb/videoTutorial/index.vue
@@ -0,0 +1,249 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/book/noSelectMapIcon.png b/static/book/noSelectMapIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..b87cda897f4bc1c51d59931de16ac0a0b6a0102a
GIT binary patch
literal 566
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQaHv)V@T!Hle%Lf1VnEXF)`2T_-
zh_M@nt{D8kWcdH2(f@Ns|Bo5{KWhB{h|&Ke#{c)4{NH8v|CA9(>V)zCV_VeoW?4UR
zO&?WbFApzwM_2cwGpzpK(4Sake`l%1aq
z(EE1}E^gnra^YN#Z=c@3ym6+ZJu%+T&8Nsn6sYu_r;B5V#O2%x*NYAr2)JJ7z0B0|
zMaz3yj`uOy*+N;b{{IgYu})yK$gfT-dv~{$tGM8PUO7AOip+aUk6L(!$-SLn{ry0<
z4woU{VxK=NrdBVRJ+nXdc;UwWqNrQp`xJ#wy9wP+syI43=w8>&BToM#csjEsC++K9
za{G4RG&|@09UEf3XCJx8T5^10H{Xm&`n*$EtY1uc;A}ZHXJJF#mUk1Dvemx#nNS&%
z>Brk3ow#{d&4ax4Z4CN0{5Rg6X;_>2(|+o+KL2I)lKXZqn;x*J$grO?S*7lN(Mv5U
u*;l&a^Y6=DgC#L_l(<~e&J56*HNuZdNvX0a|TaWKbLh*2~7a783~O5
literal 0
HcmV?d00001
diff --git a/static/book/return.png b/static/book/return.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f3ee10b858cb94d1313c6e84820d9f97655999e
GIT binary patch
literal 425
zcmV;a0apHrP)Px$V@X6oRCodH+CdV+APj|Jj^@$4nMaF*L&m^h4X&KLzZ*a>FkUiJAm1=XR&Ej~NelyHY9Us?v1XIezgIpT
zV1!Ey1{gsgOb?P#e|ZIiWCVdQB^fhD{Kq=qX3b|3Jp&96$Fi3(XJI}g8N)+kZzGuu
zFhZ4pA%!tEgTrtBIIW)yFnmpIt%30yhQuyce}I%Z>SOefB=0k1Ff!@Tz!>QOB=pkP
zl#*FQ4whR=XS4KxvO%eT%kEWlP(GkYC#5GQx%%iN1r%>2%Scid5R$S1IY8;XxBg=Y
zH%gWdD4Qi&4&~E}xT}p+`GDfR#7AC>aEUO25-@yvfFiYhknJg;tV>T%l&7owNcn6o
z@c|0=DQo#`JnMdxOo~oQ`lbGcQa274zw816@1sNS4o^KfZtW;MTeI^EU=S7pvKafGW>=x;TbNTu!}ky|3AU$03m2sp0OI9AC-ms)bAc{NKN{sbfce@sf$U
zhc~}XGo8O)Es`&`a8ZiJX@#pw*>Af~-!kp!U9Bp=wd@KTYcdn>=T{4@>s*r7ci8mj
z|4=r4DQ0SDc~&uOYvSHBo=XiT^8M~O_s{W>^hNi^qY`%BDfxk43*8M5sPOFPXODfO
zpYmQivp7ufK**+lpAOZ@GbFw1v|4;1c!%kud0W{99djAxY5DVYekj`ZM?P*TcWU=4
qEggCH3sc=+Kh4<|Qdhh9GwO97=x#)pUXO@geCyFlH|4k
literal 0
HcmV?d00001
diff --git a/static/customicons.css b/static/customicons.css
new file mode 100644
index 0000000..14ed5fa
--- /dev/null
+++ b/static/customicons.css
@@ -0,0 +1,20 @@
+@font-face {
+ font-family: "customicons"; /* Project id 2878519 */
+ src:url('/static/customicons.ttf') format('truetype');
+}
+
+.customicons {
+ font-family: "customicons" !important;
+}
+
+.youxi:before {
+ content: "\e60e";
+}
+
+.wenjian:before {
+ content: "\e60f";
+}
+
+.zhuanfa:before {
+ content: "\e610";
+}
diff --git a/static/customicons.ttf b/static/customicons.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..a3c8ab9f22d18d5d605503eda314e5d2a31fdfc0
GIT binary patch
literal 2416
zcmd^A%WoS+82@H>?IgD2#K~q|hdkDH>bQB>&f0O>=25F@5|GlQX`8fENObGiPEx<*
zIHl>yDoB8U!lAtvAt9k$df{KC1gT1(TA*@aKU;Z8A_c6Yj%<0Ab$%Pq=pKvad
z-A@0oKRQn&-bGc{Qu=Do+{0<;!iM5&AR2xX-va&;wQns~zS&B(8f^c>xHVfy>O!2V
zuzd$(TTZ`OWbJet@*^0lc|DhE{bb?+k@a&TAyX`DmiI>vrzUh9wW#VtLONPQPcgH{GfcG%HCo!>rVIv8K7)wAe(G9W~W6s*}
z5MlL3;c^>AXo`e0v-20pnbpgA>V(Zx`M)vCu4i=kuX|?D<5C8Ok=0}+EcYWmqwucq
z9k>tcJ$p@N7UdY3K%*@M)z9zF77#b3%z!fxHdq^cAvWrY
zjm5{}(W73UQ-HKbh-#b|iyQiGC8|vcP=ZB(`A1^`pS7F$eO6f+XC1Pl#U~jwSS-Z6
zoYdm6fFb2Ts4UG+2aoy3eJ4h)WHMJqPWZ+ggv;Y`8Ne>v?K0a?dV7a@d%xnHstS*S!80>UHNq5P
zcT^Cf-6E!7v@~-j7+e|8elTC7!G#HLb7P0n=yWzJ9gWT2iG@K%Yp-64j#evA{TmZG
zWJPwUm;la=mS?v1K>SNwq9YWdlSr<&p0z19Zlu(!^)Mr=JSzZ7)T_mjuz=s|>kl!c
zB@l~)Q)H`{IH*LH!r`TeI(%*{!Lr8Sps0GoVXsi(ZM7mhk8cX!KdH!FU9!mAbI=zO
zP#q6W0#>gAiixoIV3!-P``)ng_~q*Du3#5l{`J@HiH~s`$rPj0xaF>5@3G|gDTd`t
z2}&`saAq1brJKoCUtp5O
z;^K01ht1M-_H0vw)#X+iuR9#q9aYKR<`5;DCw%I1?(O?_+2N4wrR4G}CnNsOmL?^|
z?r41nJAO^`vqW__v>3uGEQc3DyKNq9yhk|YJmP6uSZGw-E=vQP_BpOMS9fi$j;5~R
zmD%KpS-b3(?Z^BHZ8{R|>1<(-tEK86+@Y}Cr!9vT!UsEbw=A*jY1`o&ywm0}zN$9*
z)x4>Q+QHOsI)0nBn^>R*ddb8hc%O+S-~kg`@aNM^Yz04QVjB(OyQ}-O!($Prh)GSD
zCqQqSm{BWzW@3Sy^o5B<@ZXwP0{+Rw7E);6#8&VJCbrQEYc{c+0xUUQO6ld)s(Ni(
zT~8MB=|aAI*q={jwz7KZaCq3Sq)MCXg}gcviX2jNseGz*=w|aqMk|-oYPwX&sk88x
z%4Q2{u~gVdCCj0;a=Cai9OmS
z&fu!b!m{+7^jYf_XqRXcdfcZoHN+IGM+T-)9_ZH9MG(}
zz7$rH1y-?vT($u}Noa>?&9ExsItb%AjOS24WW<@{KiqoZ|NR#gi3v<(60?v^AJ&GW
i+l8&0>&^ObYFtuIC+Gpxs*A((`E@KK=o#Msw}}
literal 0
HcmV?d00001
diff --git a/static/evaluate/addPic.png b/static/evaluate/addPic.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c9180b2d3c6c34250b730102ec399006f6cdd54
GIT binary patch
literal 2761
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
literal 0
HcmV?d00001
diff --git a/static/home/address.png b/static/home/address.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec3c3d103dc522e515b42acb646961ace914336f
GIT binary patch
literal 271
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1Iglb$Y)Ar^v5
zCtc({tia>)S=2On%Ky67RHFd#Q!N)mV^Ze&HVAPtZmhf`sqg(b`trYgTe~DWM4fvFdAj
literal 0
HcmV?d00001
diff --git a/static/home/address.svg b/static/home/address.svg
new file mode 100644
index 0000000..2642e65
--- /dev/null
+++ b/static/home/address.svg
@@ -0,0 +1,3 @@
+
diff --git a/static/home/appointment.png b/static/home/appointment.png
new file mode 100644
index 0000000000000000000000000000000000000000..92934c531b758d9b7df7e0c1282b69bf5fb2db3d
GIT binary patch
literal 339
zcmV-Z0j&OsP)Px$4M{{nR7ef&S4$3qAP{B2!8`;DN}FVa60cO;lv2WX);5(R762yFUN`;&UncuqrPifBAta|Na*Wk6yc)Qo
z!JfUiUKP6obB^(_aCN-j7P$1vV(z{cMbyR4Kcj#GA0hIxJI
lbKoIb&UogDO|_x}zz^Wp-5rgsf%pIb002ovPDHLkV1hv@ly(3B
literal 0
HcmV?d00001
diff --git a/static/home/area.png b/static/home/area.png
new file mode 100644
index 0000000000000000000000000000000000000000..46981af1aa4702c2db847dd38c33287530705119
GIT binary patch
literal 195
zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}wVp1HAr^wk
z2@OnqqQdNau8;r9cpdw1ImJiHK|+mv@x-eJ4kC>rj}Hkr3$!_1F-*t^FuBLSi806O
zM%o*;M^`wCrS8BSWZJx}l@QMawv|
p;fLT7#w;tZu12-84QwW+4Bh&>8+*1-djxa{gQu&X%Q~loCID1UJemLi
literal 0
HcmV?d00001
diff --git a/static/home/bus.png b/static/home/bus.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b5876cf3d2e22ed1aae00147ec3aaa60b6360fc
GIT binary patch
literal 240
zcmeAS@N?(olHy`uVBq!ia0vp^{6H+k!3HE-=Cy!0jKx9jP7LeL$-D$|R(ZNOhFAz*
z4L-=*puqEnNhPx$5lKWrR7efAmH`gLAP59~nosM``ZO-`-Efu29nGphF-~h}D;=wh2_TioRI@-f96*`Arf)(hrQa;tE>Q0T%0KFNV
zQQV=M(V+(^D^YGnS5!L$=M?O>o}QH8gS7`Yqe(s1U;(kO2RNJ_0T_ZRKqfjH6%KN5
zRvLrN|4|^T_E<_;pr+*;t*$d;d53i48jr6YRn9&xZGj?)SWB^^i2h%W2+cgBe?837
zblS3lN{ys->UFU=eitu8dvyBpF)q~YZjI3?)LC(?h&k*MbPfAJy$6DgxE&7alNxJ^
pz2F$kDym@ZH!A>hT-c-1_X8fkjs6<8JMaJi002ovPDHLkV1jbRk;MQ2
literal 0
HcmV?d00001
diff --git a/static/home/region.png b/static/home/region.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef716584df222992cc6bf7bd3048cbf7b97632c1
GIT binary patch
literal 186
zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}C7v#hAr^wk
z2@OnUs>!i@u9L(3R44n+@lu}e$q9G_C+8?mLVY0*|Mh#7FEjdm<1_fS&%M*in
gbT&4NEMCpXP!Tajw<5ZJ4bXlDPgg&ebxsLQ0LYXzwg3PC
literal 0
HcmV?d00001
diff --git a/static/home/right.png b/static/home/right.png
new file mode 100644
index 0000000000000000000000000000000000000000..28d8bd327e86ceecef91cb5e0e7f0873a0404594
GIT binary patch
literal 341
zcmV-b0jmCqP)Px$4@pEpR7efAl?xJuAP7ZWnoDbEEsZyqz(-jIn9Ml-IY3~gIE08Q5p6`YOCu4T
zW3M_?jgJTjN+Yt3wchL|LDncgRABb<%y=B;k6~))GgMD3=zFMS;Q|(`+)t^p7^Y7A
zz0{SL9_4|0%gW(pAW`^2;QXCowM4A8-yw3(kT(F+FG&KrXMixcy(AK1uh9%N9*2g2
zw9NB*3lFoB271F`4VwyS6c`Spv6R1Iq?j!%YACo|7WkWc#1?)A2F78qvlan~M5A+}
zJsgwIRj2r2p(PrFonAiZdR;!lKwRl%3*~jN2--6H%H#RR&@s$fFqx6aXg^HB31|+a
nKWs6i-1Q_(s0Tps-ZkOPf=3@7^t00000NkvXXu0mjf!ZM1M
literal 0
HcmV?d00001
diff --git a/static/home/shichang_logo.png b/static/home/shichang_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8122f93145f273ca07d880975e1e784bc3e622e
GIT binary patch
literal 40224
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